|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
Добрый день. Есть запрос: Код: sql 1.
план у него EXPLAIN показывает вот такой: Код: sql 1. 2.
При этом, удаление по такому же условию идет оооочень долго (несколько суток). Код: sql 1.
План: Код: sql 1. 2. 3. 4. 5.
Я так понимаю что постгрес всю таблицу просматривает на этапе Recheck Cond. Скажите, можно ли как-то ускорить удаление? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 18:19 |
|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
sstatistic, Предлагаю начать с подумать над причинами Index Only Scan в селекте. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 18:22 |
|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
jan2arysstatistic, Предлагаю начать с подумать над причинами Index Only Scan в селекте. Ну там-то все понятно. Он усё берет из индекса. А почему удаление так долго идет? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 18:27 |
|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
sstatistic, выберите какую-нибудь одну запись и посмотрите на её удаление с explain (analyze,buffers) delete ... Полагаю у вас там какие-нибудь триггера или FK время тратят ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 19:09 |
|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
Про PostgreSQL не знаю, но на Oracle слова Bitmap Index и удаление/изменения данных меня бы испугали. Bitmap индексы не предназначены для активных операций изменения ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2018, 19:12 |
|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
Леонид, В PostgreSQL нет bitmap индексов. Но сканирование по индексу может выполняться с предварительным построением битовой карты, чтобы на первом проходе (bitmap index scan) построить список страниц, где есть интересующие строки, а второй проход (bitmap heap scan) делать уже только по этим страницам с перепроверкой условия (recheck condition). 2TC, Оба приведенных плана вроде разумные. Поэтому что-то не так идет при удалении, см. пост от Melkij. Еще может блокировка какая висит сутками. В общем нужно искать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 12:10 |
|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
вообще удаление и выборка совершенно разные операции. Даже при одинаковых планах. прочитай про MVCC в постргресе - что он делает при делите или апдейте, там много всего. p.s. не говоря уже о FK и тригерах да ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 16:56 |
|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
sstatistic, А сколько строк удаляется, и сколько должно остаться? Может проще перенести нужные данные в новую таблицу, а старую просто дропнуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 20:30 |
|
Почему селект выполняется быстро а delete долго?
|
|||
---|---|---|---|
#18+
Ну как бы логично что удаление идет дольше. Select просто данные читает, они могут быть и закешированы. А delete делает изменения, т.е. нужно какие-то страницы обновить, а это уже медленная операция. Рассмотрите еще вариант удаления по N записей за раз, это не будет быстрее, но каждая пачка будет удаляться быстро и не будет ничего блокировать на долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2018, 19:16 |
|
|
start [/forum/topic.php?fid=53&msg=39698339&tid=1995603]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 287ms |
total: | 421ms |
0 / 0 |