172 похожих чатов

Вопрос по перформансу вставки. Как понять почему база тормозит под

нагрузкой?

В таблице есть 16 полей, 5 индексов и пару foreign key. Всего около 11 миллионов строк.

Вставка в эту таблицу без нагрузки занимает единицы милисекунд. Но если дать большую нагрузку, то именно эти запросы начинают работать очень долго, вплоть до 10 секунд 😞

Транзакции делаю как можно короче, в них только пару селектов и вот этот insert.

Использую постгрес версии 10.0, развернут на azure. Конфигурация сейчас минимальная (специально сделал, чтобы ловить проблемы перформанса): два ядра, 5к IOPS.

Пример query plan:
Insert on xx (cost=0.00..0.01 rows=1 width=2352) (actual time=8.029..8.030 rows=1 loops=1)
-> Result (cost=0.00..0.01 rows=1 width=2352) (actual time=0.011..0.012 rows=1 loops=1)
Planning time: 0.052 ms
Trigger for constraint xx_fkey: time=0.207 calls=1
Trigger for constraint yy_fkey: time=0.130 calls=1
Execution time: 8.418 ms

Влючил опцию log_lock_waits. Очень редко появляются сообщения вида:
2019-12-27 12:42:20 UTC-5e05fbfe.4e07c-LOG: process 319612 still waiting for ExclusiveLock on extension of relation 16671 of database 16497 after 640.643 ms
2019-12-27 12:42:20 UTC-5e05fbfe.4e07c-DETAIL: Process holding the lock: 319584. Wait queue: 319616, 319612, 319596, 319544, 319536, 319504, 319636.

Иногда в бэкенде вижу эксепшены типа такого:
QueryCanceled: canceling statement due to statement timeout
CONTEXT: while locking tuple (12,12) in relation "customer"
SQL statement "SELECT 1 FROM ONLY "public"."customer" x WHERE "customer_id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x"
Судя по всему это лок на форенкей. KEY SHARE это экслюзивный лок?

В общем куда копать, как и что можно логировать?

Хочу попробовать убрать foreign key и индексы. Посмотреть насколько увеличиться RPS.

1 ответов

9 просмотров

Тут возможны две причины: 1. Insert-ы деруться за relation extension lock. Мы с этой проблемой сталкивались. Лечить её можно многоми способами. Но не на уровне DBA (т.е. надо патчить постгрес). А какую версию Посгреса вы используете? В ваниле были относительно недавно фиксы по этому поводу. 2. Инсёрты деруться с селектами. А можете попробовать убрать вообще селекты (или инсёрты) и посмотреть как от этого изменится скорость? Или для этого придётся слишком много всего менять?

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Карта сайта