Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
загнать запрос по другой план
|
|||
|---|---|---|---|
|
#18+
Доброго дня. Подскажите как лучше изменить запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Получается такой план: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Видно, что оптимизатор ошибся при оценке записей (не принципиально, я думаю, можно выбрать и менее селективную строчку - план останется таким же). После Код: plaintext 1. План такой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Видно, что с tdok_main отработал чуть дольше, но Nested Loop быстрее. Как можно загнать под второй план? всего строк в tdok_main 51000. в настоящее время random_page_cost = 2.0 при уменьшении до 0.93 будет выбираться втрой план, Но это тоже не выход же.. Линтер ВС (postgresql 7.4.1) спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 16:16 |
|
||
|
загнать запрос по другой план
|
|||
|---|---|---|---|
|
#18+
Gold_Sort (actual rows=4087)для чего запрос возвращает несколько тысяч строк? после этого человек читает их? может быть сделать постраничную выдачу? Gold_-> Seq Scan on tdok_main dmain (rows=17) (actual rows=49240) Видно, что оптимизатор ошибся при оценке записейпричем сильно ошибся, на три порядка. из-за этого постгрес может выбирать далеко не оптимальный план. может быть попробовать понять причину такой неправильной оценки. Gold_Видно, что с tdok_main отработал чуть дольше, но Nested Loop быстрее.не понятно, почему так произошло. два плана отличаются только secscan-ом по tdok_main против безусловного (отсутствует Index Cond) indexscan-а с одинаковыми фильтрами. безусловный indexscan должен быть медленнее (что наблюдается), и как следствие весь запрос должен быть медленнее (а тут наоборот). вы оба explain analyze делали на втором запросе, чтобы данные закэшировались с диска? Gold_Как можно загнать под второй план?кажется, что второй план должен быть заведомо медленнее первого, поэтому тюнить под него не нужно. Gold_Подскажите как лучше изменить запроссколько строк из таблицы tdok_reg удовлетворяют условию ((data_reg_dok >= '2007-04-21'::date) AND ((pr_dok_reg = 1) OR (pr_dok_reg = 3) OR (pr_dok_reg = 5) OR (pr_dok_reg = 7) OR (pr_dok_reg = 18)))? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 17:17 |
|
||
|
загнать запрос по другой план
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Gold_Sort (actual rows=4087)для чего запрос возвращает несколько тысяч строк? после этого человек читает их? может быть сделать постраничную выдачу? это часть запроса, далее будет агрегация, сортировка попала случайно. LeXa NalBat Gold_-> Seq Scan on tdok_main dmain (rows=17) (actual rows=49240) Видно, что оптимизатор ошибся при оценке записейпричем сильно ошибся, на три порядка. из-за этого постгрес может выбирать далеко не оптимальный план. может быть попробовать понять причину такой неправильной оценки. А как он принципе мог оценить?? Количество записей оцененное в таком запросе зависит от длины строчки (в моей версии так, кажись) LeXa NalBat Gold_Видно, что с tdok_main отработал чуть дольше, но Nested Loop быстрее.не понятно, почему так произошло. два плана отличаются только secscan-ом по tdok_main против безусловного (отсутствует Index Cond) indexscan-а с одинаковыми фильтрами. безусловный indexscan должен быть медленнее (что наблюдается), и как следствие весь запрос должен быть медленнее (а тут наоборот). вот это и удивило.. решил, что в дальнейшем для Nested Loop более "удобные данные", теперь в этом сомневаюсь. LeXa NalBat вы оба explain analyze делали на втором запросе, чтобы данные закэшировались с диска? Да LeXa NalBat Gold_Как можно загнать под второй план?кажется, что второй план должен быть заведомо медленнее первого, поэтому тюнить под него не нужно. Наверное, не нужно. Только почему он быстрее отрабатывает. пробовал не один раз, хотя на меньшем количестве записей план с Seq Scan чуть быстрее отрабатывает LeXa NalBat Gold_Подскажите как лучше изменить запроссколько строк из таблицы tdok_reg удовлетворяют условию ((data_reg_dok >= '2007-04-21'::date) AND ((pr_dok_reg = 1) OR (pr_dok_reg = 3) OR (pr_dok_reg = 5) OR (pr_dok_reg = 7) OR (pr_dok_reg = 18)))? 10522 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2008, 10:15 |
|
||
|
загнать запрос по другой план
|
|||
|---|---|---|---|
|
#18+
Gold_ LeXa NalBatсколько строк из таблицы tdok_reg удовлетворяют условию ((data_reg_dok >= '2007-04-21'::date) AND ((pr_dok_reg = 1) OR (pr_dok_reg = 3) OR (pr_dok_reg = 5) OR (pr_dok_reg = 7) OR (pr_dok_reg = 18)))?10522при наличии индексов по tdok_reg (data_reg_dok) и tdok_main (kod_dok) попытаться добиться плана Код: plaintext 1. 2. 3. 4. 5. 6. или переформулировать запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. и при наличии индексов по tdok_reg (pr_dok_reg,data_reg_dok) и tdok_main (kod_dok) попытаться добиться плана Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2008, 10:41 |
|
||
|
загнать запрос по другой план
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat.. Код: plaintext 1. 2. 3. 4. 5. 6. Под такой сразу пытался... не получилось... как можно извернутся? (получалось только при использовании подзапросов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2008, 15:37 |
|
||
|
загнать запрос по другой план
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Gold_Под такой сразу пытался... не получилось...сколько строк в tdok_reg удовлетворяет условию data_reg_dok>='2007-04-21'? установите enable_seqscan в 'off', удалите индекс tdok_main_pkey, и покажите explain analyze. Gold_(получалось только при использовании подзапросов)покажите плиз запрос и explain analyze ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2008, 16:30 |
|
||
|
загнать запрос по другой план
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat Код: plaintext 1. 2. 3. 4. 5. 6. Gold_Под такой сразу пытался... не получилось...сколько строк в tdok_reg удовлетворяет условию data_reg_dok>='2007-04-21'? 10476 LeXa NalBat установите enable_seqscan в 'off', удалите индекс tdok_main_pkey, и покажите explain analyze. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. LeXa NalBat Gold_(получалось только при использовании подзапросов)покажите плиз запрос и explain analyze [/quot] кажись обманул.. делал следующее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. при формировании такого запроса решил, что будут сложности при других параметрах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2008, 14:37 |
|
||
|
загнать запрос по другой план
|
|||
|---|---|---|---|
|
#18+
Gold_делал следующее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2008, 16:22 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=270&tid=2004378]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 360ms |

| 0 / 0 |
