|
|
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Добрый день, прошу совета по ускорению запроса. 1) Версия ос, PG, железо: PG 9.3 на MacOS 10.9.5 (8GB ram) 2) Настройки PG -- postgresql.conf Autovacuum on Postgresql.conf: default_statistics_target = 50 maintenance_work_mem = 448MB constraint_exclusion = on checkpoint_completion_target = 0.9 effective_cache_size = 5632MB work_mem = 44MB wal_buffers = 8MB checkpoint_segments = 16 shared_buffers = 1792MB max_connections = 80 -- SELECT name,setting FROM pg_settings WHERE source NOT IN ('default','override'); "effective_cache_size";"720896" "maintenance_work_mem";"458752" "max_connections";"80" "max_stack_depth";"2048" "search_path";""$user", public, topology" "shared_buffers";"229376" "wal_buffers";"1024" "work_mem";"45056" 3) Структура базы для данного запроса (остальные таблицы убрал для понятности) 5) Описания цели запроса Я храню данные об организациях. У организации есть город в котором она расположена и могут быть теги. Запросом я хочу найти теги, которые находятся в городах, ближайших к городу организации. Например: Организация "Кока Коала" расположена в г. Москва и к ней привязаны теги "макароны" и "упаковка". А рядом с Москвой есть город Иваново и Петрово. В Иваново есть компания "X1" с тегом "макароны", а в Петрово есть компания "Y2" с тегом "упаковка". В результате запроса в выборку попадут "макароны Иваново" и "упаковка Петрово" . 6) Запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. -- [!] В подзапросе указан такой большой лимит (5500) из-за того что далеко не у всех компаний есть похожий тег и ближайшая компания может оказаться достаточно далеко от города по которому мы ищем. 7) Explain analyze Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 15:31:43 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
vlad_gg, вы explain привели а не explain analyze ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 21:52:59 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, исправляюсь Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2014, 22:52:37 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
vlad_gg, 1.а есть ли в наличии индексы по organization(id) tag_organization(tag_id) 2. запрос с distinct on () без order by некорректен в принципе (почитайте документацию) 3.попробуйте вместе с AND "tag_organization"."tag_id" IN (41020, 175458) заодно добавить AND "tag"."id" IN (41020, 175458) PS: времена (actual time=107.242..456.439 rows=21 loops=1) и (actual time=60.893..60.897 rows=1 loops=21) намекают на или проблемы с диском или неправильные индексы. PPS: если запрос выполнить раза 3 последовательно (explain analyze) Он быстрее не становится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 11:50:09 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
vlad_gg<>PG 9.3<> Код: 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. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 15:59:00 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
а так Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2014, 16:02:12 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukvlad_gg, 1.а есть ли в наличии индексы по organization(id) tag_organization(tag_id) 2. запрос с distinct on () без order by некорректен в принципе (почитайте документацию) 3.попробуйте вместе с AND "tag_organization"."tag_id" IN (41020, 175458) заодно добавить AND "tag"."id" IN (41020, 175458) PS: времена (actual time=107.242..456.439 rows=21 loops=1) и (actual time=60.893..60.897 rows=1 loops=21) намекают на или проблемы с диском или неправильные индексы. PPS: если запрос выполнить раза 3 последовательно (explain analyze) Он быстрее не становится? 1. Да, есть оба 2. Ок 3. Попробовал, выполняется быстрее. было "Limit (cost=1.56..1040.97 rows=10 width=42)" стало "Limit (cost=653.51..653.52 rows=1 width=42)" re: pps - становится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 00:42:49 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
а такvlad_gg<>PG 9.3<> Код: 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. ? Спасибо большое, запрос летает. EXPLAIN ANALYSE: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Что касается id записаным как строка, то это конечно-же моя ошибка. Но я не увидел разницу в производительности если писать id без кавычек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 00:48:01 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Хочу еще раз поблагодарить неизвестного пользователя и Maxim Boguk за помощь. У вас крутое Postgres кунг-фу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 10:44:23 |
|
||
|
Оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
vlad_gg, У вас перестал использоваться гист-индекс по геометриям -- скорее всего у вас мало введено организаций, мало тегов и совпадений по тегам, и , наоборот, много городов, не заполненных еще организациями. т.ч. радоваться вам рано. если ситуация будет такой почти всегда -- то это хорошо но если в каждом городе будут 100-ни или 1000 организаций с 100-ни раз перекрывающимися тегами -- надо посмотреть, как себя поведёт планировщик (перейдет ли он на nested loop по гист-индексу, с фильтрацией по ключам, и что это даст). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2014, 12:51:23 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=119&tid=1998331]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 378ms |

| 0 / 0 |
