Спорадическая необычно низкая производительность при вставке одной строки в таблицу базы данных 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. Если я отброшу столбец, скорость вернется, если Добавляю обратно тормозит обратно. Я не понимаю, почему производительность внезапно ухудшилась, но это может объяснить вашу спорадическую производительность.