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

参考文献:

パフォーマンス・チューニングで確認すること
- 適切なインデックスが貼られていること
- 適切な実行計画を選択されていること
- 頻繁にデータの更新をしていると古いデータの実行計画で実行していることがある
- 使われていないデータをスキャンしていないか?
- bind_paramを使う
インデクス種類

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にクローズされました