ページの先頭行へ戻る
Symfoware Server V12.1.0 アプリケーション開発ガイド
FUJITSU Software

11.1.2 統計情報の固定化

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

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

機能概要

統計情報を固定します。

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

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

機能一覧

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

[機能]

機能

詳細

機能概要

統計情報の固定・解除

ロック

統計情報を固定する。

ロック解除

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

統計情報の退避・復元

バックアップ

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

リストア

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

パージ

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

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

エクスポート

統計情報をエクスポートする(バイナリ形式)。

インポート

統計情報をインポートし、統計情報を固定する。


[対象オブジェクト]

対象資源

機能範囲

データベース

データベース内

スキーマ

スキーマ内

テーブル

テーブル内

特定列

使用方法

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


準備

本機能を使用するためには、以下の準備が必要となります。

  1. 本機能を利用するデータベースに対して、CREATE EXTENSION を実施します。
    ここでは、対象のデータベースを“postgres”として説明します。
    psqlコマンドを利用して、データベース“postgres”に接続します。

    Postgres=# CREATE EXTENSION pg_dbms_stats;
    CREATE EXTENSION

    参考

    今後、新しいデータベースを作成する場合に、デフォルトで本機能が利用できるように、データベース“template1”に対しても同様に本準備作業を実施することを推奨します。

  2. postgresql.confファイルのパラメータを設定します。
    パラメータ“shared_preload_libraries”に『pg_dbms_stats』を追加します。

  3. Symfoware Serverを再起動します。


本機能の指定方法

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

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

機能

オブジェクト

関数の指定

ロック

データベース

dbms_stats.lock_database_stats()

スキーマ

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

テーブル

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

ロック解除

データベース

dbms_stats.unlock_database_stats()

スキーマ

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

テーブル

dbms_stats.unlock_schema_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-9.2.sql_sample”を参考にしてください。

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


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

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

使用上の注意