Copyright © 2014 NTT DATA Corporation 
2014年9月6日 
NTTデータ基盤システム事業本部 
石井愛弓 
pg_dbms_stats紹介 
PostgreSQLアンカンファレンス2014@東京
2 
Copyright © 2014 NTT DATA Corporation 
目次 
自己紹介 
pg_dbms_statsの紹介 
デモ
3 
Copyright © 2014 NTT DATA Corporation 
自己紹介 
石井愛弓 (いしい あゆみ) 
NTTデータ 基盤システム事業本部(2014年入社) 
•学生時代は、webアプリ開発など 
•現在、PostgreSQL勉強中
Copyright © 2014 NTT DATA Corporation 
4 
pg_dbms_statsの紹介
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により変 化する
10 
Copyright © 2014 NTT DATA Corporation 
統計情報のロック 
固定 
オリジ ナル 
プラン 
PostgreSQL 
SQL 
マージ 
ANALYZEが更新す るのはオリジナル統 計情報のみ 
オリジナル統計情報のスナップ ショットを固定統計情報とする 
固定統計情報の内容は変化し ない 
オリジナルと固定 のマージ結果を入 力にプラン選択
11 
Copyright © 2014 NTT DATA Corporation 
統計情報のマージ 
固定 
オリジ ナル 
オリジ ナル一 部 
固定 
プラン 
SQL 
PostgreSQL 
固定統計情報を 常に優先 
統計情報が固定化されてい ないテーブルとカラムについ ては、オリジナル統計情報を 使用
12 
Copyright © 2014 NTT DATA Corporation 
統計情報のロック 
固定 
オリジ ナル 
プラン 
PostgreSQL 
SQL 
マージ 
オリジナルと固定のマージ結果の スナップショットを固定統計情報 として保存する
13 
Copyright © 2014 NTT DATA Corporation 
統計情報のロック解除 
オリジ ナル 
プラン 
PostgreSQL 
SQL 
オリジナルのみを 入力にプラン選 択 
固定
Copyright © 2014 NTT DATA Corporation 
14 
デモ
15 
Copyright © 2014 NTT DATA Corporation 
デモの流れ 
○ケース1:統計情報固定化を利用しない 
インデックススキャン 
→データ挿入 
→ビットマップインデックススキャン(不適なプランが選ばれ性能劣化) 
○ケース2:統計情報を固定化する 
インデックススキャン 
→統計情報固定化 
→データ挿入 
→インデックススキャン(性能安定) 
統計情報固定化で性能劣化を防止
Copyright © 2014 NTT DATA Corporation 
16 
最後に
17 
Copyright © 2014 NTT DATA Corporation 
統計情報固定化の問題 
DBAが、真の問題を解決する代わりに、統計情報の固定化に頼 り切ってしまう。この悪い癖を統計情報の固定化は助長する 
固定化した統計情報はデータサイズに対してスケールしない。 テーブルが小さいときに正しかった統計情報は、大きくなったとき に間違ってしまう 
PostgreSQLのプランナの改善を邪魔する。統計情報の固定化の 利用者は、クエリの問題をコミュニティに報告しなくなる 
運用が複雑になる。統計情報の固定化を意識した運用が必要。
18 
Copyright © 2014 NTT DATA Corporation 
まとめ 
統計情報の固定化は使い方次第で 
魔法の杖にも 
トラブルの元凶にもなります。 
効果とリスクを正しく理解し、 
pg_dbms_statsで 
PostgreSQLの一歩進んだ使い方を!
Copyright © 2011 NTT DATA Corporation 
Copyright © 2014 NTT DATA Corporation

pg_dbms_statsの紹介

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