Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
Есть запрос Код: plaintext 1. 2. 3. 4. 5. 6. табличка sq_logfile более 10 млн записей, остальные - не большие, seq scan на них выполняется мгновенно, поэтому их в расчет не берем. В таблице sq_logfile есть индексы по полям tstime, username Так вот, когда интервал выборки не больше пары дней, то EXPLAIN пишет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Используется индекс idx_sq_logfile1 ("idx_sq_logfile1" btree (tstime)), запрос выполняется быстро (1-2 сек), но когда интервал увеличить (например, выборка за неделю), то оптимизатор почему-то включает Seq Scan Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. В результате запрос выполняется секунд 70. Если делать set enable_seqscan to off перед выполнением запроса - то выборка длится всего 3 секунды. Как грамотно построить запрос, дабы использовался индекс? P.S. VACUUM, VACUUM ANALYZE делается каждую ночь, VACUUM FULL - каждую неделю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 19:23 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
Приведите пожалуйста результаты EXPLAIN ANALYZE для этих двух запросов, и для третьего, который за неделю с enable_seqscan=off. И какая версия постгреса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 20:01 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. А теперь этот же запрос, но с set enable_seqscan to off; Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 78 секунд на запрос без индекса, и 10 секунд на тот же запрос, но с использованием индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 10:20 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
"Акелла промахнулся! Акелла промахнулся!" (С) Шакал из мультика про Маугли. Однако случай интересный. Мне вот эти строки понравились: Код: plaintext 1. 2. 3. 4. У вас часом рейдов каких-нить не стоит? Потому как похоже, что диски работают быстрее, чем об этом думает оптимизатор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 12:30 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
Диски для базы - 120 Гиг IDE, 2 штуки, собраны в зеркало (аппаратный RAID 1) Уменьшил значение random_page_cost с 4 до 3, эффекта не дало. Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 13:26 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
авторВ таблице sq_logfile есть индексы по полям tstime, username индексы составные? или по отдельным полям? сдаецца, чта составной индекс типа (username,tstime) или (tstime,username) может ускорить данную конкретную выборку. Впрочем, не очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 14:31 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
Код: 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. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 15:03 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
а порядок в "idx_sq_logfile5" btree (tstime, url, username_id) взят из каких соображений (нет ли возможности поменять на (tstime, username_id, l) , не портя работу других выборок?) и все таки проверьте скорости таких запрсов c индексом вида (tstime, username_id) (можно на тестовой табличке) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 15:10 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
Ничего, кроме как покрутить константы "оценщика", посоветовать не могу. :( Мы остановились на таких значениях. effective_cache_size = 8192 # typically 8KB each random_page_cost = 2 # units are one sequential page fetch cost #cpu_tuple_cost = 0.01 # (same) #cpu_index_tuple_cost = 0.001 # (same) #cpu_operator_cost = 0.0025 # (same) assaсдаецца, чта составной индекс типа (username,tstime) или (tstime,username) может ускорить данную конкретную выборку. Впрочем, не очевидно.С помощью индекса (tstime,username) вроде бы можно избавиться от сортировки на последнем этапе выполнения этого запроса, но серьезного выигрыша это не даст, так как сортировка 90 строк, судя по выводу EXPLAIN FNFLYZE работает ~1ms. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 15:19 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatНичего, кроме как покрутить константы "оценщика", посоветовать не могу. :( Мы остановились на таких значениях. effective_cache_size = 8192 # typically 8KB each random_page_cost = 2 # units are one sequential page fetch cost #cpu_tuple_cost = 0.01 # (same) #cpu_index_tuple_cost = 0.001 # (same) #cpu_operator_cost = 0.0025 # (same) Ну, я ставил effective_cache_size = 32000 random_page_cost = 2 Ситуация не меняется :( Переливаю вот в постгрес 8, мож там чего поменяли. А то workaround'ы типа выключение seq scan, запрос, включение не особо радуют :-/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 16:26 |
|
||
|
Чудеса оптимизатора.
|
|||
|---|---|---|---|
|
#18+
assaа порядок в "idx_sq_logfile5" btree (tstime, url, username_id) взят из каких соображений (нет ли возможности поменять на (tstime, username_id, l) , не портя работу других выборок?) и все таки проверьте скорости таких запрсов c индексом вида (tstime, username_id) (можно на тестовой табличке) Этот индекс специально для другого запроса сделан был, там более детальная выборка производится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 16:29 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=2007482]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 270ms |
| total: | 447ms |

| 0 / 0 |
