|
|
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Такое подозрение, что сами запросы выполняются быстро, а основное время идет на вывод 50000 записей на экран... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2013, 15:23 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Viacheslav_mihalichТакое подозрение, что сами запросы выполняются быстро, а основное время идет на вывод 50000 записей на экран... это как раз часть: б)прием ответа клиентов (прием ответа отрисовка и тд)... о которой я писал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2013, 00:42 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 10:25 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
pcadviser Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 10:26 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
pcadviserpcadviser Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 1)почему не в новой теме? 2)приведите результаты explain (analyze, costs, buffers, timing) ваш запрос; тогда и посмотрим. PS: NOT IN использовать с подзапросом идея плохая в 90% случаев. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 14:35 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
1. на сайте недавно, не знал - что нужно в новой теме, учту протестировал отдельно подзапрос с NOT IN - ми Код: sql 1. 2. 3. 4. 5. Result (cost=120.00..905453.17 rows=1102808 width=494) (actual time=0.025..5114.715 rows=8822060 loops=1) наверное можно переписать запрос через RIGHT OUTER JOIN ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 12:25 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukpcadviserпропущено... 1)почему не в новой теме? 2)приведите результаты explain (analyze, costs, buffers, timing) ваш запрос; тогда и посмотрим. PS: NOT IN использовать с подзапросом идея плохая в 90% случаев. --Maxim Boguk www.postgresql-consulting.ru 1. на сайте недавно, не знал - что нужно в новой теме, учту протестировал отдельно подзапрос с NOT IN - ми Код: sql 1. 2. 3. 4. 5. Result (cost=120.00..905453.17 rows=1102808 width=494) (actual time=0.025..5114.715 rows=8822060 loops=1) наверное можно переписать запрос через RIGHT OUTER JOIN ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 12:26 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
pcadviser, попробуйте Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 13:06 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
pcadviser, или так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 13:10 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
pcadviser, и да, Махим вас просил: Maxim Boguk 2)приведите результаты explain (analyze, costs, buffers, timing) ваш запрос; тогда и посмотрим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 13:12 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
там не суть важно, как это фильтровать по этому условию думаю, основная мякотка -- в наличии/отсутствии gist индексов по геометриям. (не тащат же они 8 лямов записей из запроса ) 2ТС: лениво раскрывать динамику -- приведите конечный текст запроса (а не строку сборки) в одном из вариантов параметров желательно -- нормально отформатированную. и вообще -- там у вас видится вызов динамики вложенный ['(''SELECT ...], что забавно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 13:49 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
qwwqтам не суть важно, как это фильтровать по этому условию думаю, основная мякотка -- в наличии/отсутствии gist индексов по геометриям. (не тащат же они 8 лямов записей из запроса ) 2ТС: лениво раскрывать динамику -- приведите конечный текст запроса (а не строку сборки) в одном из вариантов параметров желательно -- нормально отформатированную. и вообще -- там у вас видится вызов динамики вложенный ['(''SELECT ...], что забавно. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. результат : Sort (cost=15564684.21..15674965.05 rows=44112335 width=498) (actual time=26819.681..26820.040 rows=6663 loops=1) Sort Key: paths.seq Sort Method: quicksort Memory: 2678kB Buffers: shared hit=49986 read=728492, local hit=6671 -> Nested Loop (cost=0.00..12468.32 rows=44112335 width=498) (actual time=26790.620..26816.858 rows=6663 loops=1) Join Filter: (paths.id2 = road_addedges.id) Buffers: shared hit=49986 read=728492, local hit=6671 -> Function Scan on pgr_astar paths (cost=0.00..10.00 rows=1000 width=8) (actual time=26790.595..26791.357 rows=6664 loops=1) Buffers: shared hit=23267 read=728492, local hit=3 Buffers: shared hit=26719, local hit=6668 -> Index Scan using edges_gid_idx on road_addedges (cost=0.00..0.32 rows=1 width=152) (actual time=0.000..0.000 rows=0 loops=6664) Index Cond: (road_addedges.id = paths.id2) Buffers: local hit=6668 -> Index Scan using edges_gid_idx on edges (cost=0.00..12.12 rows=1 width=494) (actual time=0.003..0.003 rows=1 loops=6664) Index Cond: (road.edges.id = paths.id2) Buffers: shared hit=26719 Total runtime: 26820.381 ms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 14:58 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
qwwq, пропустил строчку Append (cost=0.00..12.43 rows=2 width=323) (actual time=0.003..0.003 rows=1 loops=6664) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 15:01 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, результаты выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 15:03 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
pcadviser, у вас все время ожидаемо уходит на вызов функции pgr_astar теперь берем все запросы внутри этой функции и поштучно анализируем что именно тормозит. PS: из того что я вижу скорее всего тормозит диск и базе надо больше памяти чтобы она нормально там размещалась. Включить track_io_timing и прогоните еще раз тот же explain analyze. PPS: когда я вижу куски SQL передаваемые параметрами в хранимку я уже могу предсказать что там все будет криво (так как так делать не надо никогда это исключительно кривой дизайн). --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 15:05 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukpcadviser, у вас все время ожидаемо уходит на вызов функции pgr_astar теперь берем все запросы внутри этой функции и поштучно анализируем что именно тормозит. PS: из того что я вижу скорее всего тормозит диск и базе надо больше памяти чтобы она нормально там размещалась. Включить track_io_timing и прогоните еще раз тот же explain analyze. PPS: когда я вижу куски SQL передаваемые параметрами в хранимку я уже могу предсказать что там все будет криво (так как так делать не надо никогда это исключительно кривой дизайн). --Maxim Boguk www.postgresql-consulting.ru Включить track_io_timing нет возможности, так как версия postgres - 9.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 15:18 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
PPS: когда я вижу куски SQL передаваемые параметрами в хранимку я уже могу предсказать что там все будет криво (так как так делать не надо никогда это исключительно кривой дизай хранимая процедура реализована на PL/SQL C++. набор данных передать в функцию иначе нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 15:22 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Lonepsychopcadviser, или так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. вот результат Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. результат - время возрасло Sort (cost=15564684.21..15674965.05 rows=44112335 width=498) (actual time=30923.256..30923.603 rows=6663 loops=1) Sort Key: paths.seq Sort Method: quicksort Memory: 2678kB Buffers: shared hit=50018 read=728460, local hit=6670 -> Nested Loop (cost=0.00..12468.32 rows=44112335 width=498) (actual time=30894.333..30920.352 rows=6663 loops=1) Join Filter: (paths.id2 = road_addedges.id) Buffers: shared hit=50018 read=728460, local hit=6670 -> Function Scan on pgr_astar paths (cost=0.00..10.00 rows=1000 width=8) (actual time=30894.308..30894.946 rows=6664 loops=1) Buffers: shared hit=23299 read=728460, local hit=2 -> Append (cost=0.00..12.43 rows=2 width=323) (actual time=0.003..0.003 rows=1 loops=6664) Buffers: shared hit=26719, local hit=6668 -> Index Scan using edges_gid_idx on road_addedges (cost=0.00..0.32 rows=1 width=152) (actual time=0.000..0.000 rows=0 loops=6664) Index Cond: (road_addedges.id = paths.id2) Buffers: local hit=6668 -> Index Scan using edges_gid_idx on edges (cost=0.00..12.12 rows=1 width=494) (actual time=0.003..0.003 rows=1 loops=6664) Index Cond: (road.edges.id = paths.id2) Buffers: shared hit=26719 Total runtime: 30923.946 ms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 15:28 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Lonepsychopcadviser, попробуйте Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. результат - время тоже увеличилось Sort (cost=15564684.21..15674965.05 rows=44112335 width=498) (actual time=31767.105..31767.519 rows=6663 loops=1) Sort Key: paths.seq Sort Method: quicksort Memory: 2678kB Buffers: shared hit=50103 read=728364, local hit=6670 -> Nested Loop (cost=0.00..12468.32 rows=44112335 width=498) (actual time=31736.068..31763.964 rows=6663 loops=1) Join Filter: (paths.id2 = road_addedges.id) Buffers: shared hit=50103 read=728364, local hit=6670 -> Function Scan on pgr_astar paths (cost=0.00..10.00 rows=1000 width=8) (actual time=31736.042..31736.635 rows=6664 loops=1) Buffers: shared hit=23384 read=728364, local hit=2 -> Append (cost=0.00..12.43 rows=2 width=323) (actual time=0.003..0.003 rows=1 loops=6664) Buffers: shared hit=26719, local hit=6668 -> Index Scan using edges_gid_idx on road_addedges (cost=0.00..0.32 rows=1 width=152) (actual time=0.000..0.000 rows=0 loops=6664) Index Cond: (road_addedges.id = paths.id2) Buffers: local hit=6668 -> Index Scan using edges_gid_idx on edges (cost=0.00..12.12 rows=1 width=494) (actual time=0.003..0.003 rows=1 loops=6664) Index Cond: (road.edges.id = paths.id2) Buffers: shared hit=26719 Total runtime: 31767.863 ms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 15:46 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
из общих соображений -- вы туда через sql передаёте его возврат т.е. оно там, унутре, исполняется "как есть" а потом над возвратом измывается сишным кодом. т.е. дайте план вот такого: Код: sql 1. 2. 3. 4. 5. 6. есть ли gist индексы по the_geom ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 15:54 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
qwwqиз общих соображений -- вы туда через sql передаёте его возврат т.е. оно там, унутре, исполняется "как есть" а потом над возвратом измывается сишным кодом. т.е. дайте план вот такого: Код: sql 1. 2. 3. 4. 5. 6. есть ли gist индексы по the_geom ? индексы есть и по the_geom, id, gid, source, target с применением NOT EXISTS, тоже пробывал результат - хуже результат - в теме, чуть выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 16:01 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
pcadviserqwwqиз общих соображений -- вы туда через sql передаёте его возврат т.е. оно там, унутре, исполняется "как есть" а потом над возвратом измывается сишным кодом. т.е. дайте план вот такого: Код: sql 1. 2. 3. 4. 5. 6. есть ли gist индексы по the_geom ? индексы есть и по the_geom, id, gid, source, target с применением NOT EXISTS, тоже пробывал результат - хуже результат - в теме, чуть выше гне надо пробЫвать, пробудете так всё на свете надо сделать что просят, если лень читать -- я вытащил наружу передаваемую в C динамику -- и прошу план по ней, а не по внешнему запросу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 16:08 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
да, и втащите WHERE руками в части UNION ALL-а -- оно конечно планер должен это уметь, но писать изначально верно -- не повредит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 16:10 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
2. как велик перечень ключей (source,target), по условиям Код: sql 1. 2. --исчислим ли этот набор (или его срезы) снаружи (т.е. охвачено ли всё fk-ями) ? -- если исчислим, и ожидаемо мал -- нельзя ли инвертировать NOT IN () в "=ANY(ARRAY(SELECT f_keys FROM blahblah EXCEPT ... FROM road_delnodes.))" ? -- если можно -- то нет ли возможности составной btree_gist индекс поюзать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 16:11 |
|
||
|
оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
qwwqpcadviserпропущено... индексы есть и по the_geom, id, gid, source, target с применением NOT EXISTS, тоже пробывал результат - хуже результат - в теме, чуть выше гне надо пробЫвать, пробудете так всё на свете надо сделать что просят, если лень читать -- я вытащил наружу передаваемую в C динамику -- и прошу план по ней, а не по внешнему запросу не понял Вашу мысль сразу, вот Код: sql 1. 2. 3. 4. 5. 6. 7. Nested Loop Anti Join (cost=64.00..3495310.19 rows=1 width=494) (actual time=0.016..13064.774 rows=8746687 loops=1) Join Filter: (rdn.gid = road_addedges.target) Buffers: shared hit=23563 read=728172, local hit=2 -> Nested Loop Anti Join (cost=64.00..3495271.57 rows=1 width=494) (actual time=0.015..9713.446 rows=8746687 loops=1) Join Filter: (rdn.gid = road_addedges.source) Buffers: shared hit=23563 read=728172, local hit=2 -> Hash Anti Join (cost=64.00..3495232.96 rows=1 width=494) (actual time=0.014..6385.614 rows=8746687 loops=1) Hash Cond: (road_addedges.id = rd.gid) Buffers: shared hit=23563 read=728172, local hit=2 -> Append (cost=0.00..3066717.59 rows=8788746 width=494) (actual time=0.006..4877.485 rows=8746689 loops=1) Buffers: shared hit=23563 read=728172, local hit=1 -> Seq Scan on road_addedges (cost=0.00..125.50 rows=440 width=152) (actual time=0.005..0.007 rows=6 loops=1) Filter: ((NOT (the_geom && '0103000020E610000001000000040000000000000000804A400000000000004A4000000000008049400000000000004C400000000000804B400000000000004C400000000000804A400000000000004A40'::geometry)) OR (NOT _st_intersects(the_geom, '0103000020E610000001000000040000000000000000804A400000000000004A4000000000008049400000000000004C400000000000804B400000000000004C400000000000804A400000000000004A40'::geometry))) Buffers: local hit=1 -> Seq Scan on edges (cost=0.00..3066592.09 rows=8788306 width=494) (actual time=0.004..4187.377 rows=8746683 loops=1) Filter: ((NOT (the_geom && '0103000020E610000001000000040000000000000000804A400000000000004A4000000000008049400000000000004C400000000000804B400000000000004C400000000000804A400000000000004A40'::geometry)) OR (NOT _st_intersects(the_geom, '0103000020E610000001000000040000000000000000804A400000000000004A4000000000008049400000000000004C400000000000804B400000000000004C400000000000804A400000000000004A40'::geometry))) Buffers: shared hit=23563 read=728172 -> Hash (cost=34.00..34.00 rows=2400 width=4) (actual time=0.003..0.003 rows=2 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 1kB Buffers: local hit=1 -> Seq Scan on road_deledges rd (cost=0.00..34.00 rows=2400 width=4) (actual time=0.001..0.001 rows=2 loops=1) Buffers: local hit=1 -> Seq Scan on road_delnodes rdn (cost=0.00..34.00 rows=2400 width=4) (actual time=0.000..0.000 rows=0 loops=8746687) -> Seq Scan on road_delnodes rdn (cost=0.00..34.00 rows=2400 width=4) (actual time=0.000..0.000 rows=0 loops=8746687) Total runtime: 13494.066 ms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2015, 16:35 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38933157&tid=1997574]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 476ms |

| 0 / 0 |
