ページの先頭行へ戻る
Enterprise Postgres 12 アプリケーション開発ガイド
FUJITSU Software

11.1.2 統計情報の固定化

統計情報の固定化(pg_dbms_stats)の基本的な機能内容を説明します。

pg_dbms_statsの詳細情報については、オープンソース・ソフトウェアのWebページを参照してください。

機能概要

統計情報を固定します。

本番を想定した業務負荷テストなどで得られた性能に対して、本機能により統計情報を固定することで、運用開始後の問い合わせ計画の変化による性能劣化を抑止できます。

また、エクスポート機能およびインポート機能を利用することで、テスト環境で確認した統計情報を本番環境で再現することも可能です。

機能一覧

本機能で指定できる主な機能は以下となります。

[機能]

機能

詳細

機能概要

統計情報の固定・解除

ロック

現在選択されている問い合わせ計画が選択され続けるように、統計情報を固定する。

ロック解除

統計情報の固定を解除する。

統計情報の退避・復元

バックアップ

現在の統計情報をバックアップする。

リストア

バックアップ時点の統計情報を復元し、統計情報を固定する。

パージ

不要となったバックアップを削除する。

外部ファイルを利用した統計情報の退避・復元

エクスポート

現在の統計情報を外部ファイルに出力する(バイナリ形式)。

インポート

エクスポート機能で作成した外部ファイルから統計情報を読み込み、統計情報を固定する。


[対象オブジェクト]

対象資源

機能範囲

データベース

データベース内

スキーマ

スキーマ内

テーブル

テーブル内

特定列

使用方法

本機能の使用方法を説明します。


本機能の指定方法

SQL関数として指定します。

以下に主な機能の指定方法を示します。

機能

オブジェクト

関数の指定

ロック

データベース

dbms_stats.lock_database_stats()

スキーマ

dbms_stats.lock_schema_stats('スキーマ名')

テーブル

dbms_stats.lock_table_stats('スキーマ名.テーブル名')

ロック解除

データベース

dbms_stats.unlock_database_stats()

スキーマ

dbms_stats.unlock_schema_stats('スキーマ名')

テーブル

dbms_stats.unlock_table_stats('スキーマ名.テーブル名')

インポート

データベース

dbms_stats.import_database_stats('エクスポートファイルの絶対パス')

バックアップ

データベース

dbms_stats.backup_database_stats('識別用のコメント')

リストア

データベース

【形式1】
dbms_stats.restore_database_stats('タイムスタンプ')

[タイムスタンプ]
backup_historyテーブルのtime列の形式で指定する。指定時間より前のバックアップがリストアされる。

【形式2】
dbms_stats.restore_stats(バックアップID)

[バックアップID]
backup_historyテーブルのid列の値を指定する。指定されたバックアップがリストアされる。

パージ

バックアップ

dbms_stats.purge_stats(バックアップID,削除用のフラグ)

[バックアップID]
backup_historyテーブルのid列の値を指定する。

[削除用のフラグ]
true: 対象のバックアップを強制的に削除する。
false: 対象のバックアップ以外にデータベース全体のバックアップが存在する場合のみ削除する。

備考1: エクスポート機能については、SQL関数ではなくCOPY文で実施します。


例1: データベース全体の統計情報をロックする

userdb=# SELECT dbms_stats.lock_database_stats();
  lock_database_stats  
-----------------------
  tbl1 
  tbl1_pkey

また、ロックされている情報は以下のように参照することができます。

userdb=# select relname from dbms_stats.relation_stats_locked;
  relname
-----------------------
  tbl1 
  tbl1_pkey

例2: データベース全体の統計情報のロックを解除する

userdb=# SELECT dbms_stats.unlock_database_stats();
  unlock_database_stats  
-----------------------
  tbl1 
  tbl1_pkey

例3: データベース全体の統計情報をバックアップする

userdb=# SELECT dbms_stats.backup_database_stats(‘backup1’);
  backup_database_stats 
-----------------------
                     1

また、バックアップした統計情報は以下のように参照することができます。

userdb=# select id,comment,time,unit from dbms_stats.backup_history;
  id | comment  |             time              | unit
 ----+----------+-------------------------------+------
   1 | backup1  | 2014-03-04 11:08:40.315948+09 | d

バックアップID:1のバックアップ“backup1”が『2014-03-04 11:08:40.315948+09』に、データベース単位で取得されています。
[unitの意味] d:データベース s:スキーマ t:テーブル c:列


例4: データベース全体の統計情報をエクスポートする

$ psql -d userdb -f export.sql
BEGIN
COMMIT

export.sqlはCOPY文を記載したファイルです。
COPY文の内容については、“export_effective_stats-<x>.sql_sample”を参考にしてください。“<x>”は製品のバージョンを示します。

“export_effective_stats-<x>.sql_sample”は、以下に格納されています。
<FUJITSU Enterprise Postgresのインストールディレクトリ>/share/doc/extension


例5: データベース全体の統計情報をインポートする

$ psql -d userdb -c  “SELECT dbms_stats.import_database_stats ('$PWD/export_stats.dmp')” 
 import_database_stats 
-----------------------
 
(1 row)

使用上の注意