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

148

Глава 5. Область общей памяти и ввод-вывод

LOG: temporary file: path "base/pgsql_tmp/pgsql_tmp51374.0", size 60497920

STATEMENT: SELECT a.*, b.* FROM pg_class a, pg_class b ORDER BY random();

Следите за журналом

Напрактикепроизошелследующийслучай.Отсистемымониторингапришлоуведомление о нехватке свободного места на диске. Довольно быстро выяснилось, что причина — в журналах сообщений: они стали занимать много места. При этом избыточный размер имели только журналы за последние два дня, размеры журналов за предыдущие дни были в десятки раз меньше. Анализ содержимого журналов показал, что в рабочей нагрузке появилосьбольшое количество запросов с временными файлами.Но проблема была не в файлах, а втекстах запросов.Запрос содержал длинный IN-список,который автоматически генерировался приложением и не ограничивался по длине.В результате список содержал десятки тысяч UUID-значений, а текст запроса достигал нескольких мегабайт. При вставке записи об использовании временного файл дополнительно вставляется запись стекстом огромного запроса,что в результате и привело к увеличению объема журнала.

Отслеживание активных временных файлов

Недостаток отслеживания временных файлов с помощью представлений pg_stat_database и pg_stat_statements обусловлен тем, что статистика учитывается только после окончания запроса,который использовал временные файлы,а сами временные файлы ктому моменту уже удалены. Это нормально, если запросы выполняются быстро, однако в случае длительных запросов,работающихминутами,такоеповедениеможетстатьнеприемлемым.Вхудшемслучае количество и размер требуемых выполняющемуся запросу временных файлов могут увеличиваться до тех пор, пока не закончится все свободное место на диске, что может привести к аварийной остановке СУБД. Заметно будет только то, что заканчивается место, но по какой причине оно заканчивается, будет неочевидно. Размеры баз данных, таблиц и индексов при этом будут неизменны,а информация о временных файлах появится только после успешного завершения запроса.

Для эффективного отслеживания нужен способ обнаружения активных временных файлов, скоторымиосуществляетсяработавданныймомент.Дляэтогонампотребуютсяфункциидля работы с файловой системой и некоторое знание об устройстве файловой иерархии каталога данных СУБД.

Начнем с устройства файловой системы. Для размещения временных файлов1 СУБД руководствуется параметром temp_tablespaces, в котором указывается список табличных пространств: одно из них выбирается из этого списка случайным образом, и временный файл создается

1 postgrespro.ru/docs/postgresql/current/storage-file-layout

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