powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Почему селект выполняется быстро а delete долго?
9 сообщений из 9, страница 1 из 1
Почему селект выполняется быстро а delete долго?
    #39698010
sstatistic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть запрос:



Код: sql
1.
SELECT datebegin FROM my_table WHERE datebegin <=  '2018-04-18'



план у него EXPLAIN показывает вот такой:

Код: sql
1.
2.
"Index Only Scan using my_table_datebegin_idx on my_table  (cost=0.56..209024.87 rows=235499 width=4)"
"  Index Cond: (datebegin <= '2018-04-18'::date)"





При этом, удаление по такому же условию идет оооочень долго (несколько суток).

Код: sql
1.
EXPLAIN DELETE FROM my_table WHERE datebegin <=  '2018-04-18'



План:

Код: sql
1.
2.
3.
4.
5.
"Delete on my_table  (cost=8485.68..486992.61 rows=235499 width=6)"
"  ->  Bitmap Heap Scan on my_table  (cost=8485.68..486992.61 rows=235499 width=6)"
"        Recheck Cond: (datebegin <= '2018-04-18'::date)"
"        ->  Bitmap Index Scan on my_table_datebegin_idx  (cost=0.00..8426.81 rows=235499 width=0)"
"              Index Cond: (datebegin <= '2018-04-18'::date)"







Я так понимаю что постгрес всю таблицу просматривает на этапе Recheck Cond.

Скажите, можно ли как-то ускорить удаление?
...
Рейтинг: 0 / 0
Почему селект выполняется быстро а delete долго?
    #39698019
jan2ary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sstatistic,

Предлагаю начать с подумать над причинами Index Only Scan в селекте.
...
Рейтинг: 0 / 0
Почему селект выполняется быстро а delete долго?
    #39698024
sstatistic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jan2arysstatistic,

Предлагаю начать с подумать над причинами Index Only Scan в селекте.


Ну там-то все понятно.

Он усё берет из индекса.



А почему удаление так долго идет?
...
Рейтинг: 0 / 0
Почему селект выполняется быстро а delete долго?
    #39698050
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sstatistic,

выберите какую-нибудь одну запись и посмотрите на её удаление с explain (analyze,buffers) delete ...
Полагаю у вас там какие-нибудь триггера или FK время тратят
...
Рейтинг: 0 / 0
Почему селект выполняется быстро а delete долго?
    #39698053
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про PostgreSQL не знаю, но на Oracle слова

Bitmap Index

и удаление/изменения данных меня бы испугали. Bitmap индексы не предназначены для активных операций изменения
...
Рейтинг: 0 / 0
Почему селект выполняется быстро а delete долго?
    #39698339
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонид,

В PostgreSQL нет bitmap индексов. Но сканирование по индексу может выполняться с предварительным построением битовой карты, чтобы на первом проходе (bitmap index scan) построить список страниц, где есть интересующие строки, а второй проход (bitmap heap scan) делать уже только по этим страницам с перепроверкой условия (recheck condition).

2TC,

Оба приведенных плана вроде разумные.
Поэтому что-то не так идет при удалении, см. пост от Melkij.
Еще может блокировка какая висит сутками. В общем нужно искать.
...
Рейтинг: 0 / 0
Почему селект выполняется быстро а delete долго?
    #39698644
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще удаление и выборка совершенно разные операции. Даже при одинаковых планах.
прочитай про MVCC в постргресе - что он делает при делите или апдейте, там много всего.
p.s. не говоря уже о FK и тригерах да
...
Рейтинг: 0 / 0
Почему селект выполняется быстро а delete долго?
    #39698740
jan2ary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sstatistic,

А сколько строк удаляется, и сколько должно остаться? Может проще перенести нужные данные в новую таблицу, а старую просто дропнуть?
...
Рейтинг: 0 / 0
Почему селект выполняется быстро а delete долго?
    #39699228
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как бы логично что удаление идет дольше.
Select просто данные читает, они могут быть и закешированы.
А delete делает изменения, т.е. нужно какие-то страницы обновить, а это уже медленная операция.

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


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