pg_dbms_statsの紹介
-
Upload
ntt-data-oss-professional-services -
Category
Software
-
view
896 -
download
3
description
Transcript of pg_dbms_statsの紹介
Copyright © 2014 NTT DATA Corporation
2014年9月6日 NTTデータ基盤システム事業本部
石井愛弓
pg_dbms_stats紹介
PostgreSQLアンカンファレンス2014@東京
3 Copyright © 2014 NTT DATA Corporation
自己紹介
石井愛弓 (いしい あゆみ)
NTTデータ 基盤システム事業本部(2014年入社)
• 学生時代は、webアプリ開発など
• 現在、PostgreSQL勉強中
5 Copyright © 2014 NTT DATA Corporation
pg_dbms_statsとは?
PostgreSQLの統計情報を固定化できる外部モジュール
開発元 NTT OSSセンタ
公開日 2012年12月
ライセンス BSD
対応バージョン PostgreSQL9.1、9.2、9.3
公開先 http://en.sourceforge.jp/projects/pgdbmsstats/
pg_dbms_stats
6 Copyright © 2014 NTT DATA Corporation
統計情報
統計情報とは?
各テーブルの行数や各カラムのデータ分布などを見積もった情報
ANALYZEやautovacuumによりDBの最新状況を随時反映
プラン選択時の入力情報の1つ
統計情報以外に、設定パラメータ(enable_seqscanなど)やHINT句(pg_hint_plan利用時)が入力となる
SQL
テーブル プラン
ANALYZEやautovacuum により統計情報は最新化
PostgreSQLは、SQLと統計情報を入力に最適なプランを選択(出力)
統計情報の内容から、どのプランを選択するか決まる!
7 Copyright © 2014 NTT DATA Corporation
統計情報とプラン選択の課題
DBの状況変化に伴い、統計情報が変化し、選択されるプランも変化
突然不適切なプランが選ばれて性能劣化
性能の安定性を重要視する基幹系システムでは、プランの変化は許容できない
統計情報の固定化により、選択されるプランも固定化
商用DBは統計情報を固定化する機能を提供
PostgreSQLではpg_dbms_statsを利用することで統計情報を固定化できる
統計情報
SQL
テーブル プラン
ANALYZEやautovacuum は固定化された統計情報を更新できない PostgreSQLは、固定
化された統計情報を入力に最適なプランを選択
8 Copyright © 2014 NTT DATA Corporation
pg_dbms_statsが提供する機能
機能 説明
ロック 統計情報を固定化する機能
ロック解除 統計情報の固定化を解除する機能
バックアップ 統計情報をDB内にバックアップする機能
リストア 統計情報をバックアップからリストアし、固定化する機能
パージ 統計情報のバックアップを削除する機能
エクスポート 統計情報を外部ファイルにエクスポートする機能
インポート 外部ファイルから統計情報をインポートし、固定化する機能
商用DBの統計情報固定化機能に似た機能を提供
9 Copyright © 2014 NTT DATA Corporation
従来のプラン選択
統計 情報
プラン
PostgreSQL
SQL
統計情報を入力にプラン選択
統計情報の内容はANALYZEにより変化する
1
0
Copyright © 2014 NTT DATA Corporation
統計情報のロック
固定
オリジナル
プラン
PostgreSQL
SQL マージ
ANALYZEが更新するのはオリジナル統計情報のみ
オリジナル統計情報のスナップショットを固定統計情報とする 固定統計情報の内容は変化しない
オリジナルと固定のマージ結果を入力にプラン選択
1
1
Copyright © 2014 NTT DATA Corporation
統計情報のマージ
固定
オリジナル
オリジナル一部
固定
プラン
SQL
PostgreSQL
固定統計情報を常に優先
統計情報が固定化されていないテーブルとカラムについては、オリジナル統計情報を使用
1
2
Copyright © 2014 NTT DATA Corporation
統計情報のロック
固定
オリジナル
プラン
PostgreSQL
SQL マージ
オリジナルと固定のマージ結果のスナップショットを固定統計情報として保存する
1
5
Copyright © 2014 NTT DATA Corporation
デモの流れ
○ケース1:統計情報固定化を利用しない
インデックススキャン
→データ挿入
→ビットマップインデックススキャン(不適なプランが選ばれ性能劣化)
○ケース2:統計情報を固定化する
インデックススキャン
→統計情報固定化
→データ挿入
→インデックススキャン(性能安定)
統計情報固定化で性能劣化を防止
1
7
Copyright © 2014 NTT DATA Corporation
統計情報固定化の問題
DBAが、真の問題を解決する代わりに、統計情報の固定化に頼り切ってしまう。この悪い癖を統計情報の固定化は助長する
固定化した統計情報はデータサイズに対してスケールしない。テーブルが小さいときに正しかった統計情報は、大きくなったときに間違ってしまう
PostgreSQLのプランナの改善を邪魔する。統計情報の固定化の利用者は、クエリの問題をコミュニティに報告しなくなる
運用が複雑になる。統計情報の固定化を意識した運用が必要。
1
8
Copyright © 2014 NTT DATA Corporation
まとめ
統計情報の固定化は使い方次第で
魔法の杖にも
トラブルの元凶にもなります。
効果とリスクを正しく理解し、
pg_dbms_statsで
PostgreSQLの一歩進んだ使い方を!