Алексей Васильев - Работа с PostgreSQL: настройка и масштабирование стр 10.

Шрифт
Фон

Чтобы включить протоколирование в sysloglog_destination = 'syslog' redirect_stderr = off silent_mode = on

Для записи запросов, длящихся дольше n миллисекунд:log_min_duration_statement = n log_duration = off log_statement = 'none'

Для записи каждого обработанного запроса установите log_min_duration_statement на 0. Чтобы отключить запись запросов, установите этот параметр на -1.

pgFouine простой в использовании инструмент командной строки. Следующая команда создаёт HTML-отчёт со стандартными параметрами:

pgfouine.php -file your/log/file.log > your-report.html

С помощью этой строки можно отобразить текстовый отчёт с 10 запросами на каждый экран на стандартном выводе:

pgfouine.php -file your/log/file.log -top 10 -format text

Более подробно о возможностях, а также много полезных примеров, можно найти на официальном сайта проекта pgfouine.projects.pgfoundry.org.

pgBadger

pgBadger аналогичная утилита, что и pgFouine, но написанная на Perl. Еще одно большое преимущество проекта в том, что он более активно сейчас разрабатывается (на момент написания этого текста последний релиз pgFouine был в 24.02.2010, а последняя версия pgBadger 12.10.2012). Установка pgBadger проста:

$ tar xzf pgbadger-2.x.tar.gz $ cd pgbadger-2.x/ $ perl Makefile.PL $ make && sudo make install

Как и в случае с pgFouine нужно настроить PostgreSQL логи:

logging_collector = on log_min_messages = debug1 log_min_error_statement = debug1 log_min_duration_statement = 0 log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d ' log_checkpoints = on log_connections = on log_disconnections = on log_lock_waits = on log_temp_files = 0

Парсим логи PostgreSQL через pgBadger:

$ ./pgbadger ~/pgsql/master/pg_log/postgresql-2012-08-30_132* [========================>] Parsed 10485768 bytes of 10485768 (100.00%) [========================>] Parsed 10485828 bytes of 10485828 (100.00%) [========================>] Parsed 10485851 bytes of 10485851 (100.00%) [========================>] Parsed 10485848 bytes of 10485848 (100.00%) [========================>] Parsed 10485839 bytes of 10485839 (100.00%) [========================>] Parsed 982536 bytes of 982536 (100.00%)

В результате получится HTML файлы, которые содержат статистику по запросам к PostgreSQL. Более подробно о возможностях можно найти на официальном сайта проекта dalibo.github.com/pgbadger.

pg_stat_statements

pg_stat_statements расширение для сбора статистики выполнения запросов в рамках всего сервера. Преимущество данного расширения в том, что ему не требуется собирать и парсить логи PostgreSQL, как это делает pgFouine и pgBadger. Для начала установим и настроим его:

shared_preload_libraries = 'pg_stat_statements' custom_variable_classes = 'pg_stat_statements' # данная настройка нужна для PostgreSQL 9.1 и ниже pg_stat_statements.max = 10000 pg_stat_statements.track = all

После внесения этих параметров PostgreSQL потребуется перегрузить. Параметры конфигурации pg_stat_statements:

pg_stat_statements.max (integer)» максимальное количество sql запросов, которые будет хранится расширением (удаляются записи с наименьшим количеством вызовов);

pg_stat_statements.track (enum)» какие SQL запросы требуется записывать. Возможные параметры: top (только

запросы от приложения/клиента), all (все запросы, например в функциях) и none (отключить сбор статистики);

pg_stat_statements.save (boolean)» следует ли сохранять собранную статистику после остановки PostgreSQL. По умолчанию включено.

Далее активируем расширение:

# CREATE EXTENSION pg_stat_statements;

Пример собранной статистики:

# SELECT query, calls, total_time, rows, 100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; -[ RECORD 1 ]---------------------------------------------------------------------------- query | SELECT query, calls, total_time, rows, ? * shared_blks_hit / | nullif(shared_blks_hit + shared_blks_read, ?) AS hit_percent | FROM pg_stat_statements ORDER BY total_time DESC LIMIT ?; calls | 3 total_time | 0.994 rows | 7 hit_percent | 100.0000000000000000 -[ RECORD 2 ]---------------------------------------------------------------------------- query | insert into x (i) select generate_series(?,?); calls | 2 total_time | 0.591 rows | 110 hit_percent | 100.0000000000000000 -[ RECORD 3 ]---------------------------------------------------------------------------- query | select * from x where i = ?; calls | 2 total_time | 0.157 rows | 6 hit_percent | 100.0000000000000000 -[ RECORD 4 ]---------------------------------------------------------------------------- query | SELECT pg_stat_statements_reset(); calls | 1 total_time | 0.102 rows | 1 hit_percent |

Для сброса статистики есть команда pg_stat_statements_reset:

# SELECT pg_stat_statements_reset(); -[ RECORD 1 ]------------+- pg_stat_statements_reset | # SELECT query, calls, total_time, rows, 100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; -[ RECORD 1 ]----------------------------------- query | SELECT pg_stat_statements_reset(); calls | 1 total_time | 0.175 rows | 1 hit_percent |

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке