SQL-команда, при помощи которой можно получить информацию о количестве созданных временных файлов, а также о их суммарном общем размере.
select sum(temp_files) as temp_files, pg_size_pretty(sum(temp_bytes)) as temp_size from pg_stat_database;
В результате можем получить что-то подобное:
Мы используем встроенное системное представление «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 BY
, DISTINCT
и соединений слиянием. Поэтому для частых сортировок в больших количествах нужно увеличивать количество памяти для этого параметра.
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org