PostgreSQL запрос миллион раз записывается в файл журнала при использовании временных файлов - PullRequest
0 голосов
/ 09 мая 2020

Когда запрос создает временные файлы, он записывает две записи для каждой в файл журнала. Первый содержит информацию о самом временном файле, второй - полный запрос SQL. Примерно так:

2020-05-08 11:02:32 EDT 2020-05-08 10:17:04 EDT 19297 60/837 0 LOG:  temporary file: path "base/pgsql_tmp/pgsql_tmp19297.3079949", size 297
2020-05-08 11:02:32 EDT 2020-05-08 10:17:04 EDT 19297 60/837 0 STATEMENT:      SELECT ...

Иногда запрос записывает миллионы маленьких временных файлов (по какой-то причине он не создает большой). Но тогда запрос SQL будет регистрироваться все эти миллионы раз в моем файле postgresql -10-main.log и заполнять файловую систему журналов.

Есть ли способ сообщить Postgres записывать выписку только при создании первого временного файла? Я не хочу полностью отключать это ведение журнала, так как оно очень полезно для выявления и обработки запросов, которые используют слишком много временного пространства.

Моя текущая конфигурация журнала выглядит следующим образом:

log_timezone = 'localtime'
log_statement = 'none'
log_duration = off
log_min_duration_statement = 5000
log_line_prefix = '%t %s %p %v %x '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
track_functions = all
log_temp_files = 0
log_autovacuum_min_duration = 0 

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2020

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

https://www.postgresql.org/docs/9.5/runtime-config-logging.html говорит

log_temp_files (целое число)

Управляет регистрацией имен и размеров временных файлов. Временные файлы могут быть созданы для сортировки, хэшей и временных результатов запросов. Если этот параметр включен, запись журнала создается для каждого временного файла при его удалении. Нулевое значение регистрирует всю информацию о временных файлах, а положительное значение регистрирует только файлы, размер которых больше или равен указанному количеству данных. Если это значение указано без единиц измерения, оно принимается в килобайтах. Значение по умолчанию - -1, что отключает ведение журнала. Только суперпользователи могут изменять этот параметр.

...