|
|
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Добрый день, Есть две таблицы (billboards - 180 к, ~ 180 мб, prices - 3.3 мил, ~ 300 мб). Есть запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. План выполнения Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. На выводе генерирует ~120 строк. В таблице regions около 1000 записей. Можете подсказать способы ускорить запрос. На мой взгляд тут уже ничего не ускоришь, так как строк в самой billboards получается огромное количество (~133к) и в таблице prices (достаточно большое количество ~300к строк). Сейчас у нас все на Mysql живет. Но тормозит ужасно. Хотим перейти на Postgres. Сейчас оцениваем на сколько получим и получим ли вообще прирост. Сервер: 2 проца, xeon 5620(4 ядра в каждом) Оперативки 40 гигов, kvr1333d3d8r9s/4g массив 14 дисков raid 1+0 контроллер adaptec 5405 Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 16:59:29 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
создайте индексы 1) billboards(bb_id) или billboards(bb_type, bb_deleted, bb_id) и 2) prices(p_bb_id) или prices(p_year, p_month, p_bb_id) и можно смотреть explain (analyze, buffers) select ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 17:33:05 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, добавил индексы к существующим billboards(bb_id) и prices(p_bb_id) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Удалил billboards(bb_id) и prices(p_bb_id) и добавил billboards(bb_type, bb_deleted, bb_id) и prices(p_year, p_month, p_bb_id) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Время идентичное. Индексы последние оставил и сделал explain (analyze, buffers) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 19:01:33 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Можно попытаться убрать time=0.008..115 от Seq Scan on billboards. Может, что-то выйдет. http://www.postgresql.org/docs/9.1/static/indexes-expressional.html CREATE INDEX billboards_active_rows_index ON billboards((bb_deleted = 0) AND (bb_type = 0)); ANALYZE billboards; еще раз. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 20:16:05 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, создал индекс так Код: sql 1. Код: 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. Отмечу, что bb_deleted=1 всего 210 строк. Так что тут в любом случае проще скан таблицы делать. Может какие-нибудь настройки сервера изменить/показать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 20:44:48 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74 Код: sql 1. 2. 3. 4. 5. 6. 7. день добрый, можете пояснить суть запроса? может тогда чтото можно будет предложить, а то покачто уберите LEFT JOIN совсем и GROUP BY, и получите тот же результат но думается на много бстрее. как уже сказал, обясните суть вопроса, т.е. что вы пытаетесь действително получить (как уже знаем), и тогда может ктото предложит вам другой путь который будет более коротким, но будет вести туда куда вам надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 21:14:48 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, Этот запрос упрощенная часть другого запроса(даже группы запросов). Нужно получить список регионов и сколько в них щитов и сколько щитов с ценами. Код: sql 1. 2. 3. 4. 5. 6. 7. Тут я повторюсь. Интересует даже не сам этот запрос. А как будет себя вести Postgres при агрегировании больших данных когда из billboards выбирается 40к и к ней джойнится prices (как правило не один джойн,а несколько). И эти 40к из billboards никак не сократить, потому что это и есть все верные данные. Поэтому я привел наиболее упрощенную версию запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 21:58:55 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74, пересоздайте индех Код: sql 1. незабываем ANALYZE billboards; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 22:46:58 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, Добавил индекс Код: sql 1. Результат такой же Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2014, 08:27:44 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74, а можете представить DDL всех трёх таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2014, 11:12:27 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, Код: 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2014, 11:45:02 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, Сорри, случайно нажал опубликовать, а редактировать не нашел что-то? остальные две таблицы Код: 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. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2014, 11:50:44 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74Сейчас у нас все на Mysql живет. Но тормозит ужасно. Интересно посмотреть на циферки из Mysql между делом. Потом, 4 миллиона записей в prices, 0,5 секунды - это долго? Какой порядок циферок и зачем нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2014, 13:36:03 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, Запрос для MySQL Код: sql 1. 2. 3. 4. 5. 6. В MySQL на рабочей базе выполняется за 0.04-0.05 на горячем, но и на холодном цифры были почти такие же. Но некоторые другие запросы в Postgres быстрее. Может, конечно, Postgres у нас криво настроен. авторКакой порядок циферок и зачем нужен? Хотелось бы порядок хотя бы 0.2 для данного запроса в Postgres. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 09:22:15 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74, попробуйте изменить план запроса с hash join на nested loop. чтобы выбирать из таблиц billboards и prices не 130К и 330К, а только нужные 14К. но я не уверен, что такой план окажется быстрее. set enable_hashjoin to off; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 10:48:37 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, Эх... не помогает Код: 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. Получается что максимальная скорость уже теоретически достигнута. Так как планы до этого показывали по буфферу, что сравнение идет в памяти, я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 13:57:23 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74LeXa NalBat, Эх... не помогаетпопробуйте добиться плана через nested loop. а у вас получился merge join, отключите и его тоже set enable_mergejoin to off; vitalik74... планы до этого показывали по буфферу, что сравнение идет в памяти, я прав?вроде бы да, shared read с диска отсутствует, есть только shared hit из памяти. то есть чтение горячее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 14:38:27 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, vitalik74 пардон что вмешиваюсь)) сколько у вас work_mem? попробуйте увеличить. навеяно этим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 15:07:32 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74, Попробуйте запрос без explain analyze, у меня это быстрее. Ну и может быть еще create index prices_idx2 on prices(p_bb_id, p_year, p_month); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 15:16:01 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatvitalik74LeXa NalBat, Эх... не помогаетпопробуйте добиться плана через nested loop. а у вас получился merge join, отключите и его тоже set enable_mergejoin to off; vitalik74... планы до этого показывали по буфферу, что сравнение идет в памяти, я прав?вроде бы да, shared read с диска отсутствует, есть только shared hit из памяти. то есть чтение горячее. Есть!)) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Спасибо за советы) Вот только встречный вопрос получается подобные запросы надо как-то самому отлавливать и ставить такие настройки, раз оптимизатор не смог лучше сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 16:02:48 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
daevy, Стояло 4 mb. Я экспериментировал с Код: sql 1. стало в 2 раза медленнее. Ставил Код: sql 1. 2. Скорости такие же. В данном случае помогли Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 16:05:46 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74, попробуйте подкрутить автоаналайз на почаще и самое главное таргет по максимуму для статистики. ну и храните в одной таблице примерно "одинаково" распределенные по колонкам объекты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 16:06:31 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
Оптимизатор запросов, Думаю этот индекс не поможет, так как уже есть Код: sql 1. Единственное этот новый будет меньше весить при чтении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 16:07:07 |
|
||
|
Медленный запрос
|
|||
|---|---|---|---|
|
#18+
vitalik74Вот только встречный вопрос получается подобные запросы надо как-то самому отлавливать и ставить такие настройки, раз оптимизатор не смог лучше сделать?при выборе плана из нескольких возможных вариантов постгрес оценивает стоимость каждого из них - это цифра cost в выдаче explain. идеальное состояние, когда для всех вариантов cost прямо пропорционален реальному времени выполнения actual time. тогда постгрес выберет вариант с наименьшим cost, и у этого же варианта будет и наименьший actual time. в вашем случае постгрес выбрал неоптимальный план из-за того, что ошибся в десять раз: k(hashjoin) = 58679.30 / 417.771 = 140, k(nestedloop) = 140326.84 / 97.732 = 1435. сможет ли постгрес правильно оценить все варианты некоторого запроса? а если не только этого запроса, а вообще любого? а при разных условиях, холодный запуск vs горячий? можно попробовать потюнить глобальные константы планировщика в конфиге постгреса 18.7.2. Planner Cost Constants . я как-то давно пробовал это делать в ручном режиме методом научного тыка, в результате тогда мы изменили в конфиге значение одной из констант раза в два-три. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2014, 16:59:43 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38586536&tid=1998721]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
283ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 655ms |

| 0 / 0 |
