Fujitsu Enterprise Postgresでは、SQL文とデータベースの統計情報を基に、問い合わせ計画のコストを見積もり、最もコストの低い問い合わせ計画を選択します。しかし、他のDBMSと同様に、必ずしも最適な問い合わせ計画を選択するとは限りません。例えば、データの状況変化に伴い、突然、不適切な問い合わせ計画を選択してしまう可能性もあります。
統計情報が大きく変化しないことが分かっている場合は、pg_hint_planでどの問い合わせ計画を選ぶべきかを直接指定したり、pg_dbms_statsでプランナが参照する統計情報を固定化することで、同じ問い合わせ計画が選択されるように制御できます。
また、Fujitsu Enterprise Postgresのpg_dbms_statsは、OSSのpg_dbms_statsが考慮できていない統計情報(Btreeインデックスの高さ)を固定化できます。“9.11.1.1 Btreeインデックスの高さを固定化する”を参照してください。
参照
pg_hint_planおよびpg_dbms_statsのセットアップについては、“導入ガイド(サーバ編)”の“pg_hint_plan”および“pg_dbms_stats”を参照してください。
pg_hint_planおよびpg_dbms_statsの基本的な使用方法については、以下を参照してください。
pg_hint_planで実行計画を制御する
https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/pg-hint-plan/
pg_dbms_statsで統計情報を固定化して、実行計画を制御する
https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/pg-dbms-stats/
pg_hint_planおよびpg_dbms_statsの詳細情報については、OSSのWebページを参照してください。
PostgreSQLが問い合わせ計画を作成するときには、統計情報の一部として、使用するBtreeインデックスの高さも参照します。しかし、OSSのpg_dbms_statsは、固定化する統計情報にBtreeインデックスの高さは含まれていません。Fujitsu Enterprise Postgresのpg_dbms_statsでは、Btreeインデックスの高さも固定化の対象としています。
Btreeインデックスの高さの固定化は、Fujitsu Enterprise Postgres 16以降が対象となるため、以前のバージョンとの互換性を維持する場合は、以下のように指定してください。
PostgreSQL 9.2以前との互換性
pg_dbms_stats.use_tree_height = off
Fujitsu Enterprise Postgres 15 SP2以前との互換性
pg_dbms_stats.lock_tree_height = off
それぞれのパラメータの詳細は、以下の表を参照してください。すべてのセッションでパラメータ指定値を有効にしたい場合は、postgresql.confに指定後、リロードしてください。
パラメータ | 指定値 | デフォルト |
---|---|---|
pg_dbms_stats.use_tree_height | 統計情報を固定化した際に、Btreeインデックスの高さをコスト計算やプラン生成に含めるかどうかを指定します。 on: コスト計算やプラン生成にBtreeインデックスの高さを含めます。 off: コスト計算やプラン生成にBtreeインデックスの高さを含めません。 | on |
pg_dbms_stats.lock_tree_height | 統計情報を固定化した際に、Btreeインデックスの高さも固定化するかどうかを指定します。 on: Btreeインデックスの高さをロック時の高さで固定化します。 off: Btreeインデックスの高さは固定化されず、インデックスのデータ量に依存して高さが可変します。 | on |
従来の環境の統計情報をインポートしたい場合
本バージョンのpg_dbms_statsのインポート機能/エクスポート機能で扱うファイルのフォーマットは、OSSまたはFujitsu Enterprise Postgres 15SP2以前のpg_dbms_statsのフォーマットとは異なります。そのため、OSSまたはFujitsu Enterprise Postgres 15SP2以前のpg_dbms_statsからエクスポートした統計情報は、dbms_stats.import_<obj>_stats_no_tree_height関数を使用してインポートしてください。
dbms_stats.import_<obj>_stats_no_tree_height('エクスポートファイルの絶対パス')
<obj>は、データベース(現在接続中のもの)、スキーマ、テーブル、列のいずれかを示します。
OSSが提供しているdbms_stats.import_<obj>_stats関数を使用したインポートはできません。
誤ったインポート関数を利用した場合は、以下のHINTを含むエラーメッセージが出力されます。入力ファイルとインポート関数の種類の組み合わせを確認したうえ、正しいインポート関数を利用してください。
HINT: The import function may be incorrectly combined with the format of the exported data. Please check the documentation for the relationship between the import function and the available data.