powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как отловить неправильный запрос?
4 сообщений из 4, страница 1 из 1
как отловить неправильный запрос?
    #39199168
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрел статистику использования кэша shared_buffers запросом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT
 c . relname ,
 pg_size_pretty ( count ( * ) * 8192) as buffered ,
 round ( 100.0 * count ( * ) /
 (SELECT setting FROM pg_settings WHERE name='shared_buffers')::integer , 1 )
 AS buffers_percent ,
 round ( 100.0 * count ( * ) * 8192 / pg_table_size ( c . oid ) , 1 )
 AS percent_of_relation
 FROM pg_class c
 INNER JOIN pg_buffercache b
 ON b.relfilenode=c.relfilenode
 INNER JOIN pg_database d
 ON (b.reldatabase = d.oid AND d . datname = current_database
( ) )
 GROUP BY c . oid , c . relname
 ORDER BY 3 DESC
 LIMIT 200 ;  


и увидел, что многие таблицы полностью в нёго загружены.
насколько я понял, такая ситуация возникает если делать запрос который сканирует всю таблицу
т.е. не правильно настроены индексы или их совсем нет.
запросов в системе куча, и как найти тот самый запрос который сканирует всю таблицу не пойму...
подскажите плиз....
...
Рейтинг: 0 / 0
как отловить неправильный запрос?
    #39199177
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kkv79,

Не факт. Таблицы-то большие, может вывод приведёте?

Если у вас много аналитики, то ей свойственно читать таблицы целиком.
Так же, SeqScan выделяет “кольцо” из ограниченного кол-ва буферов (32) и использует только его. Т.е. если вы будете делать:
Код: sql
1.
EXPLAIN (analyze, buffers) SELECT * FROM cold_table;

несколько раз подряд, то вы увидите, что таблица в кэш вся не попадает.

Так что наличие полностью горячих таблиц не говорит, что что-то неправильно.
Правда, может быть, что таки неправильно :)
...
Рейтинг: 0 / 0
как отловить неправильный запрос?
    #39199189
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
--Статистика seq scan / index scan
SELECT 
      relname, 
      seq_scan, 
      idx_scan, 
      CASE 
        WHEN idx_scan = 0 THEN 100 
        ELSE seq_scan / idx_scan::numeric 
      END AS ratio 
    FROM 
      pg_stat_user_tables 
    ORDER BY 
       ratio desc, seq_scan desc;  


видно, что к этой таблице было несколько обращений без индекса
relname seq_scan idx_scan"orders"384976592
...
Рейтинг: 0 / 0
как отловить неправильный запрос?
    #39199192
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kkv79,

1. Замерьте общее время исполнения запроса:
Код: sql
1.
EXPLAIN (analyze,buffers) SELECT * FROM orders;


Допустим, это 100мс.

2. Если рабочих баз несколько, то меняете настройки для искомой базы:
Код: sql
1.
ALTER DATABASE db SET log_min_duration_statement = 100;


Или же правите `postgresql.conf` для всего экземпляра и перечитываете конфиги.
Также желательно поднастроить прочие параметры логгирования.

3. Ждёте — час, день, неделю… И разбираетесь, что за запросы, каким пользователем и от какого клиента.
Можно воспользоваться `pgbadger` для анализа отдельных баз и/или таблиц.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как отловить неправильный запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]