powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с планом запроса
13 сообщений из 13, страница 1 из 1
Помогите разобраться с планом запроса
    #38510744
_Monah_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте
Есть запрос
DELETE FROM table WHERE id IN (SELECT id FROM table WHERE site_id = $1 ORDER BY id limit $2)
В таблице есть индекс по site_id. Обычный план это скан индекса с сортировкой, но иногда сваливается в то, что ниже(из лога) и запрос выполняется по нескольку часов.

LOG: duration: 10841702.434 ms plan:
Query Text: DELETE FROM table WHERE id IN (SELECT id FROM table WHERE site_id = $1 ORDER BY id limit $2)
Delete on table (cost=515570.30..521686.55 rows=34596386 width=38)
-> Nested Loop (cost=515570.30..521686.55 rows=34596386 width=38)
-> HashAggregate (cost=515570.30..515572.30 rows=200 width=40)
-> Subquery Scan on "ANY_subquery" (cost=0.00..515567.83 rows=988 width=40)
-> Limit (cost=0.00..515557.95 rows=988 width=8)
-> Index Scan using pk_table on table (cost=0.00..119150243.09 rows=228336 width=8)
Filter: (site_id = 16079::bigint)
-> Index Scan using pk_table on table (cost=0.00..30.56 rows=1 width=14)
Index Cond: (id = "ANY_subquery".id)

Помогите разобраться в причине такого поведения
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38510774
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам запрос не имеет смысла. Зачем LIMIT в DELETE?..

У вас удаляется 34 миллиона записей. Сколько всего записей в таблице?
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38510884
_Monah_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лимит в delete нужен, когда необходимо удалить лишнее.
в статистике 66992247 записей.
34 млн не может удалиться. Параметры запроса: $1 = '16079', $2 = '988'
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38510920
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создайте индексы по

(site_id, id) - для WHERE site_id = $1 ORDER BY id
(id) - для WHERE id IN
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38510956
_Monah_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatсоздайте индексы по

(site_id, id) - для WHERE site_id = $1 ORDER BY id
(id) - для WHERE id IN
есть такой индекс. (id) для ORDER BY id, чтобы убрать сортировку, но оптимизатор его не использует. Точнее он его не использует на этой бд(есть еще 4 сервера, там этот индекс работает)
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38510978
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Monah_LeXa NalBatсоздайте индексы по

(site_id, id) - для WHERE site_id = $1 ORDER BY id
(id) - для WHERE id IN
есть такой индекс. (id) для ORDER BY id, чтобы убрать сортировку, но оптимизатор его не использует. Точнее он его не использует на этой бд(есть еще 4 сервера, там этот индекс работает)

так какой индекс у вас есть "для WHERE site_id = $1 ORDER BY id" ?
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38511067
_Monah_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq_Monah_пропущено...

есть такой индекс. (id) для ORDER BY id, чтобы убрать сортировку, но оптимизатор его не использует. Точнее он его не использует на этой бд(есть еще 4 сервера, там этот индекс работает)

так какой индекс у вас есть "для WHERE site_id = $1 ORDER BY id" ?
есть 2 индекса на сегодняшний день (site_id) и (site_id,id). Сори, если запутал
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38511096
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Monah_есть 2 индекса на сегодняшний день (site_id) и (site_id,id) . Сори, если запутал
судя по плану, есть индекс по (id)

-> Index Scan using pk_table on table (cost=0.00..30.56 rows=1 width=14)
Index Cond: (id = "ANY_subquery".id)

посмотреть индексы можно в psql: \d table
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38511216
_Monah_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat,
по pk по id. Судя по плану невозможно увидеть все индексы, которые есть на таблице.
Вопрос как раз и состоит в том, почему оптимизатор выбирает такой план и как ему помочь выбрать нужный.

ЗЫ Версия постгреса 9.1.8
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38511236
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Monah_по плану невозможно увидеть все индексы, которые есть на таблице
так покажите \d table
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38511406
_Monah_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat,
Код: sql
1.
2.
3.
4.
    "pk_table" PRIMARY KEY, btree (id)
    "idx_table_project_id" btree (project_id)
    "idx_table_site_id" btree (site_id)
    "idx_table_site_id_id" btree (site_id, id) INVALID


Мда, плохо создался.
Попробую пересоздать
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38512474
_Monah_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индекс так и не создался, зато отработал вакуум и план вернулся на место.
Всем спасибо
...
Рейтинг: 0 / 0
Помогите разобраться с планом запроса
    #38517419
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Monah_Индекс так и не создался, зато отработал вакуум и план вернулся на место.
Всем спасибо
сразу было видно что статистика слетела, раз 34 млн после джоина.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с планом запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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