powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Очень долгий Delete
5 сообщений из 5, страница 1 из 1
Очень долгий Delete
    #39991699
_WeSTMan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Имеется таблица с свыше 600 млн строчек, удаляю около 200 млн через DELETE FROM table WHERE id IN (SELECT lala). Выборка SELECT занимает где-то до 10 мин. Все остальное - по идее должен быть DELETE.

В итоге уже сутки выполняется запрос и почему-то не нагружает систему. Запрос потребляет 5-15% ЦП и диска до 15 МБ/с. Хотя скорость диска свыше 1 ГБ/с (LUN выделен). Кто может подсказать - почему так?
...
Рейтинг: 0 / 0
Очень долгий Delete
    #39991720
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_WeSTMan_,

Что в pg_stat_activity для этого процесса?
...
Рейтинг: 0 / 0
Очень долгий Delete
    #39991738
_WeSTMan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

Не вижу ничего особенного,
state = active
backend_xid = 198995119
backend_xmin = 198995119
query = "DELETE FROM act_hi_detail WHERE id_ IN (SELECT act_hi_detail.id_ FROM act_hi_detail INNER JOIN temp_bids ON act_hi_detail.proc_inst_id_ = temp_bids.processinstanceid);"

id_ = первичный ключ
processinstanceid - индекс есть
proc_inst_id_ - индекс есть

Связей с другими таблицами нет.

Вижу, что запрос построен немного некорректно, может попробовать запустить так:

DELETE FROM act_hi_detail WHERE proc_inst_id_ IN (SELECT processinstanceid FROM temp_bids)

??
...
Рейтинг: 0 / 0
Очень долгий Delete
    #39991740
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_WeSTMan_,

1) 5-15% процессора от 1го ядра или от всего сервера... в общем 100% оно в 1 ядра берет или нет по top

2)"скорость диска свыше 1 ГБ/с (LUN выделен)" - не важно сколько скорость на линейном чтении важно сколько IOPS дисковая выдает в секунду на случайных операциях и с какой latency (не менее важно чем iops)
что показывает iostat -xmd 10 4-5 отсчетов?

3)сделайте explain (analyze, costs, buffers, timing) delete вашего с лимитом ну скажем в 100 строк и посмотрите на что уходит время
(если понятнее не станет то в 10000 строк)
так же сделайте explain (без analyze) вашего полного delete

4)большие операции лучше бить на батчи разумного размера которые выполняются не более минуты (и точно не более часа)

5)у вас на эту таблицу на 600м строк ниоткуда foreign keys не ведут случайно?

в общем вариантов я могу придумать много (я отстортировал по снижению вероятности с моей точки зрения)
1)дисковая на случайном чтении тормозит (200m удалений легко может дать миллиард-другой случайных чтений с диска операций)
2)дисковая тормозит на записи wal большого объема
3)есть непроиндексированные fk на таблицу из которой удаляют
4)есть before/after delete триггера тормозные там же
5)какая то блокировка (кто то держит в открытой транзакции строку которую пытаются удалить)
6)кривой план запроса почему то база построила

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Очень долгий Delete
    #39991751
_WeSTMan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Перестроил запрос, как написал выше. Отработал за 30 мин. Всем спасибо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Очень долгий Delete
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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