Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
тормоза непонятно из за чего
|
|||
|---|---|---|---|
|
#18+
Привет всем! Скриптом автоматически генерируется страшный запрос, который выполняется слишком долго. Вопрос: это нормальный показатель или можно что-то улучшить? Ниже приведен запрос, определения таблиц и explain запроса. Может, кому-нибудь не лень будет посмотреть, возможно по explain сразу видно будет слабые места (например какой-нибудь индекс нужно еще создать или буфера там какие-нибудь увеличить...). Заранее благодарю за ответ. Время выполнения запроса: ~75 мин. Дисковая активность в это время: ~0.7 Mb/s Индексы созданы для всех полей. PgSQL версии 7.4.5 Машина: 2x Pentium-2 266 МГц, 128 RAM, HDD SCSI 10K 20G, ОС FreeBSD 5.3 Число записей в таблицах на данный момент: flows - 620861 flows_counter - 659848 Запрос: Код: 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. Таблица flows Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Таблица flows_counter Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. EXPLAIN ANALYZE .... Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2005, 16:33 |
|
||
|
тормоза непонятно из за чего
|
|||
|---|---|---|---|
|
#18+
Дружище, тебе не кажется, что сам запрос непонятный? Если я правильно понимаю, то этот запрос эквивалентен твоему: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2005, 17:15 |
|
||
|
тормоза непонятно из за чего
|
|||
|---|---|---|---|
|
#18+
Далее. Строка -> Index Scan using flows_pkey on flows (cost=0.00..210044.17 rows=208876 width=20) (actual time=305.284..36690.208 rows=5365 loops=1) Filter: ((flow_kind = 1) AND (dest_peer_address <<= '172.16.48.241'::inet)) наводит на мысль об создании индекса flows(flow_index, flow_ruleset, start_time, flow_kind, dest_peer_address) ----------------------- А строка -> Index Scan using flows_counter_end_time_idx on flows_counter (cost=0.00..5.13 rows=1 width=8) (actual time=376.655..377.942 rows=0 loops=5706) Index Cond: ((end_time >= '2005-06-01 00:00:00'::timestamp without time zone) AND (end_time <= '2005-07-01 00:00:00'::timestamp without time zone)) Filter: ((flow_index = $0) AND (start_time = $1) AND (flow_ruleset = $2)) на индекс flows_counter(flow_index, start_time, flow_ruleset, end_time) ----------------------- При этом подзапрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2005, 17:27 |
|
||
|
тормоза непонятно из за чего
|
|||
|---|---|---|---|
|
#18+
user1 Код: plaintext 1. 2. 3. 4. join ( select flow_index, start_time, flow_ruleset, max(end_time) as max_end_time from flows_counter where end_time >= ('2005-6-1') and end_time <= (timestamp '2005-6-30' + interval '1 day') group by flow_index, start_time, flow_ruleset ) as a using ( flow_index, start_time, flow_ruleset ) where end_time=max_end_time ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 10:55 |
|
||
|
тормоза непонятно из за чего
|
|||
|---|---|---|---|
|
#18+
mwolfДалее. Строка -> Index Scan using flows_pkey on flows (cost=0.00..210044.17 rows=208876 width=20) (actual time=305.284..36690.208 rows=5365 loops=1) Filter: ((flow_kind = 1) AND (dest_peer_address <<= '172.16.48.241'::inet)) наводит на мысль об создании индекса flows(flow_index, flow_ruleset, start_time, flow_kind, dest_peer_address) ----------------------- А строка -> Index Scan using flows_counter_end_time_idx on flows_counter (cost=0.00..5.13 rows=1 width=8) (actual time=376.655..377.942 rows=0 loops=5706) Index Cond: ((end_time >= '2005-06-01 00:00:00'::timestamp without time zone) AND (end_time <= '2005-07-01 00:00:00'::timestamp without time zone)) Filter: ((flow_index = $0) AND (start_time = $1) AND (flow_ruleset = $2)) на индекс flows_counter(flow_index, start_time, flow_ruleset, end_time) Создал - он их не пытается юзать почему-то. А вот если заменить операцию <<= на = - начинает юзать индекс flows_dest_peer_address_idx. mwolf ----------------------- При этом подзапрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Заменил - теперь выполняется примерно за 4 мин. А вот если еще заменить <<= на = то вообще за 20 сек. Хотя хотелось бы все-таки <<= ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2005, 15:12 |
|
||
|
|

start [/forum/topic.php?fid=53&tid=2007141]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
135ms |
get topic data: |
10ms |
get forum data: |
4ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 476ms |

| 0 / 0 |
