Closed3

PostgresSQLパフォーマンス・チューニング

YoppyYoppy

パフォーマンス・チューニングで確認すること

  • 適切なインデックスが貼られていること
  • 適切な実行計画を選択されていること
    • 頻繁にデータの更新をしていると古いデータの実行計画で実行していることがある
  • 使われていないデータをスキャンしていないか?
  • bind_paramを使う

インデクス種類
https://www.postgresql.jp/document/15/html/indexes-types.html

YoppyYoppy

PostgreSQLのノード一覧

src/backend/commands/explain.c

*説明はChatGPTに書かせています。

スキャン系ノード

ノード名 タグ 説明
Seq Scan T_SeqScan *テーブル全体を順次スキャンする
Sample Scan T_SampleScan テーブルのサンプルをスキャンする
Index Scan T_IndexScan *テーブルに付与されたインデックスを用いて、そのインデックス順にテーブルをスキャンする
Index Only Scan T_IndexOnlyScan *テーブルに付与されたインデックスだけを用いてスキャンする
Bitmap Index Scan T_BitmapIndexScan *テーブルに付与されたインデックスからビットマップを作成して、テーブルをスキャンする
Bitmap Heap Scan T_BitmapHeapScan ビットマップヒープを使用してテーブルをスキャンする
Tid Scan T_TidScan TID(タプルID)を使用してテーブルをスキャンする
Tid Range Scan T_TidRangeScan 範囲内のTIDを使用してテーブルをスキャンする
Subquery Scan T_SubqueryScan サブクエリの結果をスキャンする
Function Scan T_FunctionScan *組み込み関数やユーザー定義関数を実行する
Table Function Scan T_TableFuncScan テーブル関数の結果をスキャンする
Values Scan T_ValuesScan VALUESリストをスキャンする
CTE Scan T_CteScan 共通テーブル式の結果をスキャンする
Named Tuplestore Scan T_NamedTuplestoreScan 名前付きタプルストアの結果をスキャンする
WorkTable Scan T_WorkTableScan 作業テーブルの結果をスキャンする
Foreign Scan T_ForeignScan *外部テーブルをスキャンする
Custom Scan T_CustomScan カスタムスキャンを実行するノード

結合系ノード

ノード名 タグ 説明
Nested Loop T_NestLoop *外部テーブル1行のデータに対して、内側テーブルをすべて評価する
Merge Join T_MergeJoin *内部テーブルのハッシュを作成し、ハッシュに基づいて外部テーブルを評価する
Hash Join T_HashJoin *内部テーブルのハッシュを作成し、ハッシュに基づいて外部テーブルを評価する
Append T_Append *スキャン結果に別のスキャン結果を追加する。また複数パーティションで実行された検索結果をマージする
Merge Append T_MergeAppend ソートされた入力をマージして単一の出力を作成する
Recursive Union T_RecursiveUnion 再帰的にクエリを実行する
BitmapAnd T_BitmapAnd *複数のビットマップスキャン結果の積(AND)を取得する
BitmapOr T_BitmapOr *複数のビットマップスキャン結果の和(OR)を取得する
SetOp T_SetOp 集合演算(UNION、INTERSECT、EXCEPTなど)を行う
HashSetOp T_SetOp ハッシュを使用して集合演算を行う

加工系ノード

ノード名 タグ 説明
Materialize T_Material *スキャン結果を一時的にファイルに書き出す
Memoize T_Memoize メモリにキャッシュして再利用する
Group T_Group 結果をグループ化する
Aggregate T_Agg *スキャン結果をsum()やavg()などの特定の演算で集約する
GroupAggregate T_Agg グループごとに集計操作を行う
HashAggregate T_Agg *スキャン結果からハッシュ結果を作成しその結果から集約する
MixedAggregate T_Agg 混合された集計操作を行う
WindowAgg T_WindowAgg ウィンドウ関数を使用して集計操作を行う
Unique T_Unique 重複を排除する
LockRows T_LockRows 行をロックする
Limit T_Limit 結果の行数を制限する
Hash T_Hash *スキャン結果からハッシュを作成する

ソート系ノード

ノード名 タグ 説明
Sort T_Sort *スキャン結果をソートする
Incremental Sort T_IncrementalSort *スキャン結果のソート時にインデックスを用いることでソートに用いる
メモリを縮小し、1件目の結果取得を高速化する

その他ノード

ノード名 タグ 説明
Merge T_ModifyTable ソースとターゲットをマージして行の挿入、更新、削除を行う
Insert T_ModifyTable テーブルに新しい行を挿入する
Update T_ModifyTable テーブルの既存の行を更新する
Delete T_ModifyTable テーブルから既存の行を削除する
Foreign Insert T_ForeignScan 外部テーブルに行を挿入する
Foreign Update T_ForeignScan 外部テーブルの行を更新する
Foreign Delete T_ForeignScan 外部テーブルの行を削除する
Gather T_Gather *並列に実行したスキャン結果を集約する
Gather Merge T_GatherMerge 並列ワーカーのソートされた結果をマージして収集する
このスクラップは2024/08/22にクローズされました