PostgreSQL | Сколько временных файлов и какого общего размера было создано?

PostgreSQL | Сколько временных файлов и какого общего размера было создано?

SQL-команда, при помощи которой можно получить информацию о количестве созданных временных файлов, а также о их суммарном общем размере.

select sum(temp_files) as temp_files, pg_size_pretty(sum(temp_bytes)) as temp_size from pg_stat_database;

В результате можем получить что-то подобное:

Сколько временных файлов и какого общего размера было создано - PostgreSQL
Сколько временных файлов и какого общего размера было создано — PostgreSQL

 

Мы используем встроенное системное представление «pg_stat_database«. Оно содержит по одной строке со статистикой уровня базы данных для каждой базы кластера, и ещё одну для общих объектов.

Столбец «temp_files» отвечает за количество временных файлов, созданных запросами в этой базе данных. Подсчитываются все временные файлы независимо от причины их создания (например, для сортировки или для хеширования) и независимо от установленного значения log_temp_files.

Столбец «temp_bytes» отвечает за общий объём данных, записанных во временные файлы запросами в этой базе данных. Учитываются все временные файлы, вне зависимости от того, по какой причине они созданы и вне зависимости от значения log_temp_files.

 

Что нужно понимать глядя на числа в параметрах «temp_files» и «temp_bytes» в PostgreSQL в представлении «pg_stat_database«?

Во-первых, это накопленная статистика за всё время работы базы данных. Это не текущее значение. Это просто числа. Статистику можно сбросить. Если вы или кто-то сбрасывали статистику принудительно, то значения могут быть минимальными.

Во-вторых, это говорит нам о том, что у нас в каких-то запросах не хватает оперативной памяти, чтобы быстро обработать его (например, для сортировки или хеш-таблиц).

 

Какой параметр влияет на создание временных файлов в PostgreSQL?

В конфигурационном файле «postgresql.conf» есть параметр «work_mem«. Он задаёт базовый максимальный объём памяти, который будет использоваться во внутренних операциях при обработке запросов (например, для сортировки или хеш-таблиц), прежде чем будут задействованы временные файлы на диске. Файл конфига PostgreSQL находится в директории «/etc/postgresql/15/main» (15 — это версия СУБД, у вас может быть другая).

Значение по умолчанию — четыре мегабайта (4MB).

Операции сортировки используются для предложений ORDER BYDISTINCT и соединений слиянием. Поэтому для частых сортировок в больших количествах нужно увеличивать количество памяти для этого параметра.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org