|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Есть две таблицы: Компании с 7599 записями Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Их активность с 22кк записей Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Есть запрос вида: Код: sql 1. 2. 3.
Время выполнения 6 секунд. Мне кажется время катастрофически большим. Как можно оптимизировать время выполнения? В основном будут с базы тянуться именно такие запросы. Буду благодарен за любой совет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 17:43 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
explain(analyze, buffers) покажите. Навскидку: индекс по company.name. индекс по id_company & date в day. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 18:04 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Melkij, вывод EXPLAIN(ANALYZE, BUFFERS) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 18:11 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
И ещё раз, но в с предложенными индексами. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 18:20 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Melkij, пожалуйста Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 18:38 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Это точно с индексом по id_company & date? Сделайте analyze, если индекс именно этот и ещё не делали. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 20:16 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
chipakunos, выбирай меньше с day, вот и время сократиться. Обычно данные за 27 лет нужны только для репортов, да и то обычно не за все года. Читай про мат вью. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 20:24 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Melkij, Да точно, ещё раз перепровел, результат тот же. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 21:26 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
chipakunos, Интересно ещё, что на другой базе под виндой со стандартными настройками запрос исполняется 90 msec и explain(analyze, buffers) выглядит следуещим образом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 21:46 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Вот этот nested loop я и пытался получить. Видно, что планировщик ошибся со статистикой и нехватка индекса по company.name, а в остальном то что нужно. Что вы там с настройками крутили? Что планировщик теперь решает не идти по явно селективному хотя бы даже префиксу индекса а ползти seqscan'ом. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2017, 22:57 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Melkij, вот настройки query tuning. Уже не помню, что менял. а что дефотное, ибо такая проблема была сразу (Postgresql 9.6) Код: sql 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. 48. 49.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 13:24 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
chipakunos, enable_nestloop = off ну, что-то такое и предполагал, да. Если бедному планировщику запретить выбирать идеальный для этого запроса nested loop, то планировщик и будет страдать какой-нибудь фигнёй. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 13:33 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Только что поставил Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
После чего получил такой explain Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Всем спасибо огромное! Думаю, тему можно закрывать. П.С. Буду благодарен за литературу по настройке и администрированию postgres. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 14:07 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
Melkij, я запрет nested loop нашёл на одном из форумов. Там говорилось, что эта функция сильно тормозит запрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 14:13 |
|
Оптимизация SQL-запроса.
|
|||
---|---|---|---|
#18+
chipakunos, Не всегда, как видите. Далеко не всегда. Поэтому не надо мешать оптимизатору работать и трогать глобально любые enable_*. А с конкретными случаями, когда планировщик выбирает nested loops, но это оказывается действительно контрпродуктивно - надо разбираться, почему планировщик решил сделать именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2017, 15:15 |
|
|
start [/forum/topic.php?fid=53&msg=39410333&tid=1996697]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 128ms |
0 / 0 |