統計情報の固定化(pg_dbms_stats)の基本的な機能内容を説明します。
pg_dbms_statsの詳細情報については、オープンソース・ソフトウェアのWebページを参照してください。
機能概要
統計情報を固定します。
本番を想定した業務負荷テストなどで得られた性能に対して、本機能により統計情報を固定することで、運用開始後の問い合わせ計画の変化による性能劣化を抑止できます。
また、エクスポート機能およびインポート機能を利用することで、テスト環境で確認した統計情報を本番環境で再現することも可能です。
機能一覧
本機能で指定できる主な機能は以下となります。
[機能]
機能 | 詳細 | 機能概要 |
---|---|---|
統計情報の固定・解除 | ロック | 統計情報を固定する。 |
ロック解除 | 統計情報の固定を解除する。 | |
統計情報の退避・復元 | バックアップ | 現在の統計情報をバックアップする。 |
リストア | バックアップ時点の統計情報を復元し、統計情報を固定する。 | |
パージ | 不要となったバックアップを削除する。 | |
外部ファイルを利用した統計情報の退避・復元 | エクスポート | 統計情報をエクスポートする(バイナリ形式)。 |
インポート | 統計情報をインポートし、統計情報を固定する。 |
[対象オブジェクト]
対象資源 | 機能範囲 |
---|---|
データベース | データベース内 |
スキーマ | スキーマ内 |
テーブル | テーブル内 |
列 | 特定列 |
使用方法
本機能の使用方法を説明します。
本機能を使用するためには、以下の準備が必要となります。
本機能を利用するデータベースに対して、CREATE EXTENSION を実施します。
ここでは、対象のデータベースを“postgres”として説明します。
psqlコマンドを利用して、データベース“postgres”に接続します。
例
Postgres=# CREATE EXTENSION pg_dbms_stats; CREATE EXTENSION
参考
今後、新しいデータベースを作成する場合に、デフォルトで本機能が利用できるように、データベース“template1”に対しても同様に本準備作業を実施することを推奨します。
postgresql.confファイルのパラメータを設定します。
パラメータ“shared_preload_libraries”に『pg_dbms_stats』を追加します。
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】 [タイムスタンプ] 【形式2】 [バックアップID] |
パージ | バックアップ | dbms_stats.purge_stats(バックアップID,削除用のフラグ) [バックアップID] [削除用のフラグ] |
備考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 行)
使用上の注意
本機能の対象となるテーブルに対して、必ず1回、ANALYZEコマンドを実施してください。ANALYZEコマンドを実施していない場合は、統計情報を固定することができません。
ANALYZEコマンドについては、“PostgreSQL文書”の“リファレンス”の“SQLコマンド”を参照してください。
本機能を利用して統計情報を固定化しているオブジェクトを削除する場合は、ロック解除機能を利用して、先にオブジェクトの固定化情報を削除してください。
本機能は統計情報の値を直接指定する機能ではなく、実際に発生した状態を再現する機能です。このため、エクスポート時のCOPY文にテキスト形式を指定すると、リストアすることができません。エクスポート時は必ずバイナリ形式で実施してください。