Добавил:
ИВТ (советую зайти в "Несортированное")rnПИН МАГА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Database 2024 / Books / Мониторинг PostgreSQL.pdf
Скачиваний:
26
Добавлен:
20.11.2024
Размер:
6.87 Mб
Скачать

 

 

 

 

 

 

6.2. Отслеживание активности в журнале

161

-rw-------

1

postgres postgres

16777216

Nov 18

06:19 000000010000004B000000FF

 

-rw-------

1

postgres postgres

16777216

Nov 18

06:18

000000010000004C00000000

 

drwx------

2

postgres postgres

4096

Nov 18

06:27

archive_status

 

Запись в журнал может осуществляться как клиентом, так и фоновым процессом walwriter. По умолчанию все изменения в журнал пишутся клиентским процессом. Это может происходить при подтверждении транзакции командой COMMIT или при заполнении WAL-буфера (см. wal_buffers).Такая запись называется синхронной,и, передтем как отправить следующую команду или запрос, клиент вынужден дождаться завершения записи в журнал. Настройки СУБД позволяют переопределить поведение и использовать асинхронное подтверждение транзакций (см. synchronous_commit). В таком режиме запись в журнал делегируется процессу walwriter, который работает в фоновом режиме. Перекладывая задачу записи в журнал на фоновый процесс, клиентские процессы могут не дожидаться завершения записи и сразу отправлять серверу следующую команду. Однако следует помнить, что в таком режиме в случае сбоев есть риск потери последних транзакций,которые еще не были записаны процессом walwriter.Настройкаподтверждениятранзакцийимеетещенесколькорежимов,действующих при использовании репликации. Более подробно с ними можно ознакомиться в документации1.Можно найти и исчерпывающую информацию о работе WAL-журнала2,3.

6.2. Отслеживание активности в журнале

Журнал упреждающей записи является важной частью СУБД, и администратору необходимо иметь представление об активности, связанной с ним. Запись в журнал влияет на продолжительность транзакций, поэтому для хорошей производительности СУБД важно, чтобы запись проходила быстро и без задержек. Может возникнуть и ряд других вопросов: каковы объемы записи в журнал? Сколько времени уходит на запись? Какой объем записи в журнал выполняютте или иные типы запросов?

Для отслеживания активности,связанной с журналом,имеется несколько инструментов:

pg_waldump и pg_walinspect — инструменты для детального анализа журнала, которые больше подходятдля отладки и поиска проблем или для образовательных целей;

pg_stat_wal—общая статистика связанной с журналом активности;

pg_stat_statements — это хорошо зарекомендовавшее себя расширение содержит также статистику,связанную с журналом,по отдельным типам запросов;

EXPLAIN ANALYZE — средство для вывода плана запроса, которое показывает дополнительную информацию о записи в журнал при указании параметра WAL.

1 postgrespro.ru/docs/postgresql/current/wal-async-commit

2 postgrespro.ru/docs/postgresql/current/wal-configuration

3 www.interdb.jp/pg/pgsql09.html

162Глава 6. Журнал упреждающей записи

С точки зрения регулярного мониторинга особенно интересны представления pg_stat_wal и pg_stat_statements,поэтому рассмотрим их более подробно.

Представление pg_stat_wal

Представление pg_stat_wal содержит всего одну строку:

# TABLE pg_stat_wal;

-[ RECORD 1 ]----

+------------------------------

wal_records

| 322508636

wal_fpi

| 46090986

wal_bytes

| 393680012729

wal_buffers_full

| 15545

wal_write

| 48958771

wal_sync

| 48846599

wal_write_time

| 5697276.907

wal_sync_time

| 486414839.104

stats_reset

| 2022-11-04 05:01:49.427562+00

Статистика носит накопительный характер и включает следующую информацию:

wal_records—общее количество записей,отправленных в журнал;

wal_fpi—общее количество записанных FPI-страниц (full page image);

wal_bytes—общий объем данных,записанный в журнал,в байтах;

wal_buffers_full — общее количество раз, когда данные в журнал были записаны из-за заполнения WAL-буфера;

wal_write—количество операций ввода-вывода для записи данных из WAL-буфера;

wal_sync — количество запросов на синхронизацию WAL-сегментов с основным хранилищем;

wal_write_time—время,затраченное на запись содержимого WAL-буфера в основное хранилище,в миллисекундах.Можетвключать в себя время,затраченное на синхронизацию, если параметр wal_sync_method установлен в open_datasync или open_sync;

wal_sync_time—время,затраченное на синхронизацию сегментов в основное хранилище, в миллисекундах;

stats_reset—отметка времени сброса статистики.

Статистика по времени отслеживается только при включенном параметре track_wal_io_timing. На основеданных представления можно отслеживатьактивность,связанную с журналом,объ- емыипродолжительностьзаписиифакты,указывающиенанехваткуместавWAL-буфере,что может послужить поводом к пересмотру настройки параметра wal_buffers.

На основе метрик по этой статистике можно построить графики общей WAL-активности на уровне экземпляра СУБД.

6.2. Отслеживание активности в журнале

163

На рис. 6.1 изображен график с количеством обычных записей и FPI-страниц, попадающих в журнал.Можно отметить,что объем записи в журнал стабильный,без значительных всплесков. Также можно отметить постоянный и пилообразный поток записи FPI-страниц. Продолжительность пиков укладывается в пятиминутный интервал, что соответствует значению checkpoint_timeout по умолчанию.Выполнение принудительных контрольныхточек визуально никак не сказывается на объеме записи FPI-страниц, и на графике это остается незаметным.

Рис. 6.1.Количество обычных записей и FPI-страниц в журнале

На рис. 6.2 изображен график объема записи в журнал в байтах, и здесь нагрузка также умеренно ровная. Но, если присмотреться, этот график, так же как и предыдущий, напоминает пилу с пятиминутными интервалами. Подобный график можно использовать для визуализации объема записи в журнал.

Рис. 6.2.Объем записи в журнал в байтах

164Глава 6. Журнал упреждающей записи

График на рис. 6.3 показывает количество операций записи данных из буфера в журнал

ипоследующих синхронизаций сегментов. В левой части графика количество операций записи совпадает с количеством синхронизаций. Это связано с тем, что запись и последующая синхронизация происходят при завершении каждой транзакции. Рядом показано количество подтвержденных транзакций (синяя линия commits), практически совпадающее с остальными метриками. Дальше, в правой части графика, при неизменном потоке транзакций количество синхронизаций сегментов сильно уменьшилось и затем через какое-то время вернулось на прежний уровень. Количество операций записи тоже уменьшилось, хотя

ине так сильно.В этот период был включен режим асинхронного подтверждения транзакций (synchronous_commit =off).В этом режиме задачи по записи в журнал и синхронизации сегментов перекладываются на процесс walwriter,который делает это согласно своим настройкам.

Важной информацией является и время,затраченное на запись и синхронизацию (рис. 6.4).

Рис. 6.3.Количество операций записи из WAL-буфера,синхронизаций сегментов и подтвержденных транзакций

Рис. 6.4.Время,затраченное на запись в журнал и синхронизацию сегментов

Соседние файлы в папке Books