Спорадическая необычно низкая производительность при вставке одной строки в таблицу базы данных PostgreSQL

Я использую комбинацию Amazon Aurora (Aurora PostgreSQL 11.6) и Entity Framework Core для выполнения (среди других операций с базами данных) очень простой вставки одной строки в относительно небольшую (33k) таблицу записей.

Большую часть времени вставка занимает однозначные миллисекунды, но иногда я замечаю, что вставка занимает около 950 мс. Я действительно не понимаю, что вызывает это? Всякий раз, когда я пытаюсь просмотреть EXPLAIN / ANALYZE, он ничего особенного мне не показывает, это просто вставка с возвращаемым идентификатором. Я не вижу здесь очевидных проблем. Также странно, что никакие другие вставки не кажутся затронутыми этой спорадической «медлительностью». Кто-нибудь может помочь?

Таблица:

      CREATE TABLE request_to_print (
    request_internal_id UUID NOT NULL DEFAULT uuid_generate_v4(),
    card_number VARCHAR(100),
    customer_internal_id UUID NOT NULL,
    requested_date TIMESTAMP,
    requesting_store VARCHAR(10),
    request_sent_date TIMESTAMP,
    PRIMARY KEY ("request_internal_id")
);

Образец выписки:

      INSERT INTO request_to_print (card_number, customer_internal_id, request_sent_date, request_type, requested_date, requesting_store)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5)
RETURNING request_internal_id;

Вывод из объяснения / анализа

      [
  {
    "Plan": {
      "Node Type": "ModifyTable",
      "Operation": "Insert",
      "Parallel Aware": false,
      "Relation Name": "request_to_print",
      "Schema": "public",
      "Alias": "request_to_print",
      "Startup Cost": 0,
      "Total Cost": 0.01,
      "Plan Rows": 1,
      "Plan Width": 422,
      "Actual Startup Time": 0.072,
      "Actual Total Time": 0.073,
      "Actual Rows": 1,
      "Actual Loops": 1,
      "Output": [
        "request_internal_id"
      ],
      "Shared Hit Blocks": 3,
      "Shared Read Blocks": 0,
      "Shared Dirtied Blocks": 0,
      "Shared Written Blocks": 0,
      "Local Hit Blocks": 0,
      "Local Read Blocks": 0,
      "Local Dirtied Blocks": 0,
      "Local Written Blocks": 0,
      "Temp Read Blocks": 0,
      "Temp Written Blocks": 0,
      "I/O Read Time": 0,
      "I/O Write Time": 0,
      "Plans": [
        {
          "Node Type": "Result",
          "Parent Relationship": "Member",
          "Parallel Aware": false,
          "Startup Cost": 0,
          "Total Cost": 0.01,
          "Plan Rows": 1,
          "Plan Width": 422,
          "Actual Startup Time": 0.02,
          "Actual Total Time": 0.02,
          "Actual Rows": 1,
          "Actual Loops": 1,
          "Output": [
            "uuid_generate_v4()",
            "''::character varying(100)",
            "'5687afea-52cd-4e11-8278-9a71fb9f5982'::uuid",
            "'2021-05-14 06:24:17.424055'::timestamp without time zone",
            "''::character varying(10)",
            "'2021-05-14 06:24:17.424055'::timestamp without time zone",
            "''::character varying(50)"
          ],
          "Shared Hit Blocks": 0,
          "Shared Read Blocks": 0,
          "Shared Dirtied Blocks": 0,
          "Shared Written Blocks": 0,
          "Local Hit Blocks": 0,
          "Local Read Blocks": 0,
          "Local Dirtied Blocks": 0,
          "Local Written Blocks": 0,
          "Temp Read Blocks": 0,
          "Temp Written Blocks": 0,
          "I/O Read Time": 0,
          "I/O Write Time": 0
        }
      ]
    },
    "Planning Time": 0.02,
    "Triggers": [],
    "Execution Time": 0.087
  }
]

Дополнительная информация:

      "Insert on request_to_print  (cost=0.00..0.01 rows=1 width=422) (actual time=0.070..0.071 rows=1 loops=1)"
"  ->  Result  (cost=0.00..0.01 rows=1 width=422) (actual time=0.020..0.020 rows=1 loops=1)"
"Planning Time: 0.021 ms"
"Execution Time: 0.094 ms"

1 ответ

Возможно, проблема связана с полем uuid_generate_v4(). У нас есть столбец, использующий его по умолчанию, и теперь по неизвестной причине он замедлил наши вставки в 10 раз. Раньше мы получали 25000 вставок в секунду, а теперь это 2000. Если я отброшу столбец, скорость вернется, если Добавляю обратно тормозит обратно. Я не понимаю, почему производительность внезапно ухудшилась, но это может объяснить вашу спорадическую производительность.

Другие вопросы по тегам