powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Медленный DELETE по индексированному полю
3 сообщений из 3, страница 1 из 1
Медленный DELETE по индексированному полю
    #40062527
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица (~100 Мб). Удаляются строки по проиндексированному полю по условию = any(array[...]). Иногда (но не всегда) DELETE работает очень медленно (более 100 секунд). При этом SELECT с теми же условиями выполняется очень быстро. FK и триггеров на таблице нет. Селективность по этому полю нормальная. Пример плана:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
db=*> explain (analyze,verbose,buffers)
delete from <table> WHERE <indexed_column> = 
ANY(array[5204878,5206098,5206363,5206364,5206365,5206366,5206367,5206368,5206369,5206370,5206371,5206372,5206373,5206374,5206375,5206376,5206377,5206378,5206379,5206380,5206381]);
                                                                                                                 QUERY PLAN                                                                  >
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
 Delete on public.<table>  (cost=0.42..271.19 rows=377 width=6) (actual time=131806.532..131806.533 rows=0 loops=1)
   Buffers: shared hit=1260 dirtied=12
   ->  Index Scan using <table>_<indexed_column>_idx on public.<table>  (cost=0.42..271.19 rows=377 width=6) (actual time=0.019..1.055 rows=958 loops=1)
         Output: ctid
         Index Cond: (<table>.<indexed_column> = ANY ('{5204878,5206098,5206363,5206364,5206365,5206366,5206367,5206368,5206369,5206370,5206371,5206372,5206373,5206374,5206375,5206376,5206377>
         Buffers: shared hit=302
 Planning Time: 0.085 ms
 Execution Time: 131806.552 ms
(8 rows)



В плане смущает две вещи:

1. Откуда такой пробел в actual time? Если верить результатам, данные из индекса были получены уже через ~ 1 мс, при этом удаление началось только через 131.8 секунд.
2. Почему набор ID в запросе и Index Cond разный (ID специально в плане оставил)?

Замена = any() на in() приводит к такому же результату. Версия PostgreSQL 12.4.

Помогите, пожалуйста, разобраться.
...
Рейтинг: 0 / 0
Медленный DELETE по индексированному полю
    #40062546
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bff7755a,

если включен log_lock_waits - посмотрите в логе, не ждали ли всё это время кого-то другого. Если выключен - то включить и подождать следующую аномалию.

bff7755a
2. Почему набор ID в запросе и Index Cond разный (ID специально в плане оставил)?

Поясните? При проверке методом ctrl+f в браузере - одинаковые данные. Только у вас похоже pager с горизонтальной прокруткой включен и о наличии хвоста справа сигнализирует символом >
...
Рейтинг: 0 / 0
Медленный DELETE по индексированному полю
    #40062695
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже, это действительно локи, спасибо. Просто я почему-то в pg_stat_activity ничего не увидел когда запускал запрос.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Медленный DELETE по индексированному полю
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]