Влияние на производительность настройки PostgreSQL для регистрации всех операторов

8

PostgreSQL 9.2.2 на Windows 7 64-битная.

Параметр log_statementв postgresql.confфайле указывает, какие операторы регистрировать (нет, DDL, изменение данных или все). В какой степени настройки log_statement = 'all'ухудшают производительность? Я читал, что это значительно снижает производительность, но эти утверждения исходят из более старых статей, так сколько же следует ожидать потери производительности log_statement = 'none'?

bwDraco
источник

Ответы:

12

Как и почти все остальное, это зависит от вашего оборудования, конфигурации и рабочей нагрузки.

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

Если ваши журналы находятся в той же файловой системе или даже на том же диске, что и база данных, регистрация будет иметь большее значение, чем если журналы хранятся на отдельном диске. Несмотря на то, что журналы явно fsync()не записаны и записаны последовательно, они все равно конкурируют с основной БД за ввод / вывод.

Что еще более важно, некоторые файловые системы (в частности, ext3) сбрасывают все данные, когда любой файл находится в состоянии fsync()d, поэтому записи в журнале становятся ближе к случайному вводу / выводу, чем последовательный ввод / вывод, и замедляют каждую фиксацию. IIRC это не проблема для ext4 или xfs.

Это также будет зависеть от того, включена ли у вас синхронизация операторов, метод ведения журнала и многое другое.

Лучший вариант - сравнить его с моделированием реальной нагрузки и посмотреть.

Крейг Рингер
источник
Вход в stderr в виде простого текстового файла на том же диске. Сроки выписки отключены. Сборщик журналов включен. Сервер иногда подвергается частым, умеренно сложным запросам.
bwDraco
@DragonLord: время утверждения имеет большое значение. для загрузки процессора.
Эрвин Брандштеттер