|
|
|
как отловить неправильный запрос?
|
|||
|---|---|---|---|
|
#18+
посмотрел статистику использования кэша shared_buffers запросом Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. и увидел, что многие таблицы полностью в нёго загружены. насколько я понял, такая ситуация возникает если делать запрос который сканирует всю таблицу т.е. не правильно настроены индексы или их совсем нет. запросов в системе куча, и как найти тот самый запрос который сканирует всю таблицу не пойму... подскажите плиз.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 23:15 |
|
||
|
как отловить неправильный запрос?
|
|||
|---|---|---|---|
|
#18+
kkv79, Не факт. Таблицы-то большие, может вывод приведёте? Если у вас много аналитики, то ей свойственно читать таблицы целиком. Так же, SeqScan выделяет “кольцо” из ограниченного кол-ва буферов (32) и использует только его. Т.е. если вы будете делать: Код: sql 1. несколько раз подряд, то вы увидите, что таблица в кэш вся не попадает. Так что наличие полностью горячих таблиц не говорит, что что-то неправильно. Правда, может быть, что таки неправильно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 23:35 |
|
||
|
как отловить неправильный запрос?
|
|||
|---|---|---|---|
|
#18+
relname buffered buffers_percent percent_of_relation"orders""2207 MB"10.897.2"avail_stat""830 MB"4.1100.0"avail_stat_pkey""258 MB"1.399.7 особенно беспокоит таблица orders это таблица с заказами, в которой хранятся заказы трёхлетней давности.... после service postgresql restart эта таблица в буфере лежит не полностью, как сейчас, а попадает туда позже, после какого то пользовательского запроса, скорее всего какого то отчёта. свои запросы связанные с orders я уже вылечил, но систему разрабатывают несколько человек, и кто из них косячит, я и хочу выяснить.... из запроса Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. видно, что к этой таблице было несколько обращений без индекса relname seq_scan idx_scan"orders"384976592 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2016, 00:41 |
|
||
|
как отловить неправильный запрос?
|
|||
|---|---|---|---|
|
#18+
kkv79, 1. Замерьте общее время исполнения запроса: Код: sql 1. Допустим, это 100мс. 2. Если рабочих баз несколько, то меняете настройки для искомой базы: Код: sql 1. Или же правите `postgresql.conf` для всего экземпляра и перечитываете конфиги. Также желательно поднастроить прочие параметры логгирования. 3. Ждёте — час, день, неделю… И разбираетесь, что за запросы, каким пользователем и от какого клиента. Можно воспользоваться `pgbadger` для анализа отдельных баз и/или таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2016, 00:52 |
|
||
|
|

start [/forum/topic.php?fid=53&tid=1997335]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
256ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 213ms |
| total: | 569ms |

| 0 / 0 |
