Устранение неполадок с высоким уровнем использования операций ввода-вывода в секунду для База данных Azure для PostgreSQL — гибкий сервер
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер
В этой статье показано, как быстро определить первопричину использования операций ввода-вывода (входных и выходных операций в секунду) и обеспечить исправление действий для управления использованием операций ввода-вывода при использовании гибкого сервера База данных Azure для PostgreSQL.
Вы узнаете, как выполнять следующие задачи:
- Сведения об устранении неполадок для выявления и получения рекомендаций по устранению основных причин.
- Используйте средства для определения высокого уровня использования входных и выходных данных (операций ввода-вывода), таких как метрики Azure, хранилище запросов и pg_stat_statements.
- Определите первопричины, такие как длительные запросы, время контрольных точек, разрушительный процесс управляющей программы автовакума и высокий уровень использования хранилища.
- Разрешение высокого уровня использования операций ввода-вывода с помощью средства анализа, настройки параметров сервера, связанных с контрольными точками, и настройки управляющей программы автовакума.
Руководства по устранению неполадок
С помощью руководств по устранению неполадок функций, доступных на гибком портале сервера База данных Azure для PostgreSQL возможные первопричины и рекомендации по устранению проблем с высоким уровнем использования операций ввода-вывода в секунду, можно найти. Как настроить руководства по устранению неполадок, чтобы использовать их, следуйте инструкциям по устранению неполадок установки.
Средства для выявления высокого уровня использования операций ввода-вывода
Рассмотрим следующие средства, чтобы определить высокий уровень использования операций ввода-вывода.
Метрики Azure
Метрики Azure — это хорошая отправная точка для проверки использования операций ввода-вывода для определенной даты и периода. Метрики предоставляют сведения о времени, в течение которого загрузка ввода-вывода высока. Сравните графики операций ввода-вывода в секунду, операций ввода-вывода чтения, пропускной способности чтения и пропускной способности записи, чтобы узнать время, когда рабочая нагрузка вызывает высокую загрузку операций ввода-вывода. Для упреждающего мониторинга настройте оповещения для метрик. Пошаговые инструкции см. в статье Метрики Azure.
Хранилище запросов
Функция хранилище запросов автоматически фиксирует журнал запросов и статистики среды выполнения и сохраняет их для проверки. Он срезает данные по времени, чтобы увидеть временные шаблоны использования. Данные для всех пользователей, баз данных и запросов хранятся в базе данных с именем azure_sys в гибком экземпляре сервера База данных Azure для PostgreSQL. Пошаговые инструкции см. в статье "Мониторинг производительности с помощью хранилище запросов".
Используйте следующую инструкцию для просмотра пяти первых инструкций SQL, использующих ввод-вывод:
select * from query_store.qs_view qv where is_system_query is FALSE
order by blk_read_time + blk_write_time desc limit 5;
Расширение pg_stat_statements
Расширение pg_stat_statements
помогает определить запросы, использующие ввод-вывод на сервере.
Используйте следующую инструкцию для просмотра пяти первых инструкций SQL, использующих ввод-вывод:
SELECT userid::regrole, dbid, query
FROM pg_stat_statements
ORDER BY blk_read_time + blk_write_time desc
LIMIT 5;
Примечание.
При использовании хранилища запросов или pg_stat_statements для заполнения столбцов blk_read_time и blk_write_time необходимо включить параметр track_io_timing
сервера. Дополнительные сведения о track_io_timing
параметрах сервера см. в разделе "Параметры сервера".
Определение первопричин
Если уровни потребления операций ввода-вывода в целом высоки, это могут быть первопричины:
Продолжительные транзакции
Длительные транзакции могут использовать операции ввода-вывода, что может привести к высокой загрузке операций ввода-вывода.
Следующий запрос помогает определить подключения, которые выполняются в течение длительного времени:
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
Время контрольной точки
Высокий уровень ввода-вывода также можно увидеть в сценариях, когда контрольная точка происходит слишком часто. Один из способов определить это заключается в проверке файла журнала гибкого сервера База данных Azure для PostgreSQL для следующего текста журнала: "LOG: контрольные точки происходят слишком часто".
Вы также можете исследовать с помощью подхода, в котором сохраняются периодические моментальные снимки pg_stat_bgwriter
с меткой времени. Используя сохраненные моментальные снимки, можно вычислить средний интервал контрольной точки, количество запрошенных контрольных точек и количество контрольных точек.
Нарушение процесса управляющей программы автовакума
Выполните следующий запрос, чтобы отслеживать автовакум:
SELECT schemaname, relname, n_dead_tup, n_live_tup, autovacuum_count, last_vacuum, last_autovacuum, last_autoanalyze, autovacuum_count, autoanalyze_count FROM pg_stat_all_tables WHERE n_live_tup > 0;
Запрос используется для проверки частоты очистки таблиц в базе данных.
last_autovacuum
: дата и время последнего автовакума, запущенного в таблице.autovacuum_count
: количество раз, когда таблица была вакуумирована.autoanalyze_count
: количество раз, когда таблица была проанализирована.
Устранение проблем с высоким уровнем использования операций ввода-вывода
Чтобы устранить высокий уровень использования операций ввода-вывода, можно использовать любой из следующих трех методов.
Команда EXPLAIN ANALYZE
После идентификации запроса, который потребляет высокий уровень ввода-вывода, используйте EXPLAIN ANALYZE
для дальнейшего изучения запроса и его настройки. Дополнительные сведения о команде EXPLAIN ANALYZE
см. в плане EXPLAIN.
Завершение длительных транзакций
Вы можете рассмотреть возможность убийства длительной транзакции в качестве варианта.
Чтобы завершить идентификатор процесса сеанса (PID), необходимо определить идентификатор PID с помощью следующего запроса:
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
Вы также можете фильтровать по другим свойствам, таким как usename
(имя пользователя) или datname
(имя базы данных).
После того как у вас есть piD сеанса, его можно завершить с помощью следующего запроса:
SELECT pg_terminate_backend(pid);
Настройка параметров сервера
Если вы видите, что контрольная точка происходит слишком часто, увеличьте max_wal_size
параметр сервера до тех пор, пока большинство контрольных точек не будут вызваны временем, а не запрашиваются. В конечном итоге 90 процентов или более должны быть основаны на времени, и интервал между двумя контрольными точками должен быть близок к checkpoint_timeout
значению, заданному на сервере.
max_wal_size
: пиковые рабочие часы являются хорошим временем, чтобы прибыть вmax_wal_size
значение. Чтобы прибыть к значению, сделайте следующее:Выполните следующий запрос, чтобы получить текущий WAL LSN, а затем запишите результат:
select pg_current_wal_lsn();
Подождите
checkpoint_timeout
несколько секунд. Выполните следующий запрос, чтобы получить текущий WAL LSN, а затем запишите результат:select pg_current_wal_lsn();
Выполните следующий запрос, который использует два результата, чтобы проверить разницу в гигабайтах (ГБ):
select round (pg_wal_lsn_diff ('LSN value when run second time', 'LSN value when run first time')/1024/1024/1024,2) WAL_CHANGE_GB;
checkpoint_completion_target
: рекомендуется задать значение 0,9. Например, значение 0,9 в течениеcheckpoint_timeout
5 минут указывает, что целевой объект для завершения контрольной точки составляет 270 секунд (0,9*300 секунд). Значение 0,9 обеспечивает достаточно согласованную нагрузку ввода-вывода. Агрессивное значениеcheckpoint_completion_target
может привести к увеличению нагрузки ввода-вывода на сервер.checkpoint_timeout
: можно увеличитьcheckpoint_timeout
значение из значения по умолчанию, заданного на сервере. При увеличении значения следует учитывать, что увеличение также увеличит время аварийного восстановления.
Настройка autovacuum для уменьшения сбоев
Дополнительные сведения о мониторинге и настройке в сценариях, когда автовакум слишком разрушительный, просмотрите настройку autovacuum.
Увеличьте размер хранилища
Увеличение хранилища помогает при добавлении дополнительных операций ввода-вывода в секунду на сервер. Дополнительные сведения о хранилище и связанных операций ввода-вывода в секунду см . в параметрах вычислений и хранилища.