|
Медленный DELETE по индексированному полю
|
|||
---|---|---|---|
#18+
Есть таблица (~100 Мб). Удаляются строки по проиндексированному полю по условию = any(array[...]). Иногда (но не всегда) DELETE работает очень медленно (более 100 секунд). При этом SELECT с теми же условиями выполняется очень быстро. FK и триггеров на таблице нет. Селективность по этому полю нормальная. Пример плана: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
В плане смущает две вещи: 1. Откуда такой пробел в actual time? Если верить результатам, данные из индекса были получены уже через ~ 1 мс, при этом удаление началось только через 131.8 секунд. 2. Почему набор ID в запросе и Index Cond разный (ID специально в плане оставил)? Замена = any() на in() приводит к такому же результату. Версия PostgreSQL 12.4. Помогите, пожалуйста, разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 17:46 |
|
Медленный DELETE по индексированному полю
|
|||
---|---|---|---|
#18+
bff7755a, если включен log_lock_waits - посмотрите в логе, не ждали ли всё это время кого-то другого. Если выключен - то включить и подождать следующую аномалию. bff7755a 2. Почему набор ID в запросе и Index Cond разный (ID специально в плане оставил)? Поясните? При проверке методом ctrl+f в браузере - одинаковые данные. Только у вас похоже pager с горизонтальной прокруткой включен и о наличии хвоста справа сигнализирует символом > ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 19:01 |
|
|
start [/forum/topic.php?fid=53&fpage=13&tid=1994082]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 349ms |
total: | 455ms |
0 / 0 |