すべてのステートメントをログに記録するようにPostgreSQLを設定することによるパフォーマンスへの影響


8

Windows 7 64ビット上のPostgreSQL 9.2.2。

ファイルの設定log_statementでは、postgresql.confログに記録するステートメントを指定します(なし、DDL、データ変更、またはすべて)。設定はどの程度log_statement = 'all'パフォーマンスを低下させますか?これによりパフォーマンスが大幅に低下することを読みましたが、これらの主張は古い記事に由来するものlog_statement = 'none'です。

回答:


12

他のほとんどすべてと同様に、ハードウェア、構成、およびワークロードによって異なります。

高価なステートメントをいくつか実行している場合は、ほとんど違いがありません。小さな単純なステートメントをたくさん実行している場合は、さらに違いが出ます。

ログがデータベースと同じファイルシステムまたは同じディスクにある場合、ログが別のディスクに保存される場合よりもログに大きな違いがあります。ログは明示的に指定されておらずfsync()、順次書き込まれますが、I / OのメインDBと競合しています。

さらに重要なのは、一部のファイルシステム(特にext3)は、ファイルが'd' されるとすべてのデータをフラッシュするfsync()ため、ログの書き込みがシーケンシャルI / OよりランダムI / Oに近くなり、コミットごとに速度が低下します。IIRCこれはext4またはxfsでは問題ではありません。

また、ステートメントタイミングが有効になっているかどうか、使用しているロギング方法などにも依存します。

最良のオプションは、実際のワークロードのシミュレーションでそれをベンチマークして確認することです。


同じディスク上のプレーンテキストファイルとしてstderrにロギングします。ステートメントのタイミングは無効です。ログ収集機能が有効になっています。サーバーは、頻繁に、適度に複雑なクエリを受けることがあります。
bwDraco

@DragonLord:ステートメントのタイミングは大きな違いを生みます。CPU負荷のため。
Erwin Brandstetter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.