はじめに
PostgreSQLを勉強するにあたって、構築や運用で必要そうな事を備忘として記事にしました。
本記事は、PostgreSQLを運用していくうえで必要なパフォーマンスチューニングの全体概要について見ていきます。
前提
PostgreSQL 13 を使用しています。
パフォーマンスチューニングについて
チューニング前に、なぜパフォーマンスが出ないか分析を行います。チューニングは次に分類し考えます。
- スケールアップ
- パラメータチューニング
- クエリチューニング
事象分析
情報の収集を行い、分析、原因の推測を行います。
①情報の収集
確認する部分は、「ログ」「リソース情報」「事象発生前後の操作・時系列」「設定ファイル」となります。具体的には、次のものが考えられます。
- PostgreSQLログ
- テーブル統計情報
- クエリ統計情報
- システムリソース情報
②事象の分析
問題発生時の前後のログメッセージを確認します。上記で取得した「統計情報」や「システムリソース情報」などと併せて解析します。ここで事象が絞り込めない場合、他に関連がありそうな情報を再度収集します。
③原因を絞り込む
「ソフトウェア」と「ハードウェア 」の両面で考えます。
ソフトウェア
問題となるSQLが複数あるか着目し、なければPostgreSQL側なのかハードウェア側の問題かを絞り込みます。
ハードウェア
特にディスクI/Oの負荷やスワップ発生の有無を重点的にチェックします。
④チューニングを実施・効果を測定
原則として1つずつパラメータを変更し、効果を確認していきます。自動バキュームなど複数のパラメータが連動して動くものは、同時に変えてみます。ポイントは、はじめは大きく変更して影響を見極め、後から微調整を行います。
⑤影響を評価する
チューニングを実施し問題が解決した後、他の問題が発生するかもしれません。例えば、インデックスを追加することによる統計情報取得時間の増加など。最終的にはシステム全体のバランスを見つつ調整をする必要があります。

図. コスト調整パラメータ
統計情報取得のためのパラメータ
表. 統計情報の精度に関するパラメータ
パラメータ | デフォルト値 | 説明 | 設定 |
---|---|---|---|
autovacuum | on | 統計情報を自動で収集するか。 自動で収取する場合は、「off」 | postgresql.conf CREATE TABLE ALTER TABLE |
autovacuum_vacuum_ threshold | 50 | 更新されたテーブルの行数が 指定値未満の場合、統計情報は自動で 更新されない | postgresql.conf CREATE TABLE ALTER TABLE |
autovacuum_analyze_ scale_factor | 0.1 | 更新されたテーブルの行数が指定割合未満 の場合、統計情報は自動で更新されない。 デフォルト値(0.1)は10%未満を意味する | postgresql.conf CREATE TABLE ALTER TABLE |
default_statistics _target | 100 | 統計情報のサンプリング数。 サンプリング対象は「設定値×300行」 | postgresql.conf ALTER TABLE |
関連記事一覧
PostgreSQL : 実行計画「最適な実行計画が選ばれないケース」
参考文献
1. 勝俣 智成, 佐伯 昌樹, 原田 登志 (2018)「[改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則」技術評論社
2. 河原 翔 (2014)「LPI-Japan OSS-DB Gold 認定教材 PostgreSQL 高度技術者育成テキスト」エヌ・ティ・ティ・ソフトウェア株式会社
3. OSS-DB道場