|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
Есть таблица со множеством полей типа: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Есть общий индекс btree на is_active и source_id. Запрос во вновь созданной таблице на 7 млн. сгенерированных записей Код: plsql 1.
отрабатывает вполне себе шустро, а вот с боевого накатываю 7 млн.записей -- выполняется более получаса и не дает результатов. При этом в логе этот запрос показывается и EXPLAIN-ы (без выполнения) на обоих наборах данных почти одинаковые. В чем может быть причина? Или как можно диагностировать проблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2017, 15:31 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
pixxxel, Так и покажи explain (analyze, buffers) проблемного запроса ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2017, 15:38 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
pixxxel, а новые записи вы "накатываете" через COPY? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2017, 15:56 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
pixxxel, индекс видимо надо подходящий. скорей всего что-то вроде (source_id, id) или (source_id, id) where is_active. надо смотреть что за данные там. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2017, 16:33 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
Lonepsycho, pg_dump одна таблица, потом psql < file ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 11:31 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
Alex__kK, Вроде немного проясняется. Всё дело в том, что есть 2 таблицы. Одна с рабочими данными, а другая тестовая для опытов. Рабочая: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
и та на которой я всё тестирую, заполненная примерно таким же количеством данных: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Так вот. Один и тот же запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
и Код: sql 1.
даёт разные результаты - в одном индекс используется, в другом - нет: Код: sql 1. 2. 3.
Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 11:34 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
pixxxel, индексы используются в обоих запросах. Но первый решил, что дешевле читать сортировку по pk, попутно накладывая фильтр в расчёте, что limit 1 быстро найдётся по краю индекса, а второй - что дешевле фильтр получить по индексу, а сортировать в памяти. И фильтр и сортировку по индексу можно получить с индексом Код: sql 1. 2.
И просто для интереса, с какой целью вы для частичного индекса с условием is_active включаете в индекс этот самый is_active? Чтобы просто увеличить размер индекса хранением бесполезных данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 12:15 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
Melkij, спасибо огромное за подробное разъяснение! "...с какой целью вы..." - очевидно потому, что еще очень плохо разбираюсь с тем как работают индексы ))) Еще раз спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 12:26 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
Melkij И просто для интереса, с какой целью вы для частичного индекса с условием is_active включаете в индекс этот самый is_active? Чтобы просто увеличить размер индекса хранением бесполезных данных? IOS , если в запросе к нему формально обращаться. иначе г-н пж планирует IS -- т.е. будет запись фетчить. такие дела. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 15:56 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
qwwqMelkijИ просто для интереса, с какой целью вы для частичного индекса с условием is_active включаете в индекс этот самый is_active? Чтобы просто увеличить размер индекса хранением бесполезных данных? IOS , если в запросе к нему формально обращаться. иначе г-н пж планирует IS -- т.е. будет запись фетчить. такие дела. Ага, при том что сам is_active не выбирается. А если бы выбирался - select true as is_active даст тот же самый результат запроса и желанный IOS. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 16:38 |
|
Критически долго выполняется запрос
|
|||
---|---|---|---|
#18+
Melkijqwwqпропущено... IOS , если в запросе к нему формально обращаться. иначе г-н пж планирует IS -- т.е. будет запись фетчить. такие дела. Ага, при том что сам is_active не выбирается. А если бы выбирался - select true as is_active даст тот же самый результат запроса и желанный IOS. и что теперь , они типа рыбу заворачивали, а я в положение входи. запросы переписывай. ага. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
пусть планер пашет -- он железный. лучше сразу например расстрелять виновника необходимости 2--х практицки одинаковых индексов на текстовые поля . вот уж где перерасход, так перерасход. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 17:09 |
|
|
start [/forum/topic.php?fid=53&msg=39514400&tid=1996248]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 152ms |
0 / 0 |