pg_dbms_statsの紹介

19
Copyright © 2014 NTT DATA Corporation 2014年9月6日 NTTデータ基盤システム事業本部 石井愛弓 pg_dbms_stats紹介 PostgreSQLアンカンファレンス2014@東京

description

pg_dbms_statsの紹介

Transcript of pg_dbms_statsの紹介

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により変化する

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

3

Copyright © 2014 NTT DATA Corporation

統計情報のロック解除

オリジナル

プラン

PostgreSQL

SQL

オリジナルのみを入力にプラン選択

固定

Copyright © 2014 NTT DATA Corporation 1

4

デモ

1

5

Copyright © 2014 NTT DATA Corporation

デモの流れ

○ケース1:統計情報固定化を利用しない

インデックススキャン

→データ挿入

→ビットマップインデックススキャン(不適なプランが選ばれ性能劣化)

○ケース2:統計情報を固定化する

インデックススキャン

→統計情報固定化

→データ挿入

→インデックススキャン(性能安定)

統計情報固定化で性能劣化を防止

Copyright © 2014 NTT DATA Corporation 1

6

最後に

1

7

Copyright © 2014 NTT DATA Corporation

統計情報固定化の問題

DBAが、真の問題を解決する代わりに、統計情報の固定化に頼り切ってしまう。この悪い癖を統計情報の固定化は助長する

固定化した統計情報はデータサイズに対してスケールしない。テーブルが小さいときに正しかった統計情報は、大きくなったときに間違ってしまう

PostgreSQLのプランナの改善を邪魔する。統計情報の固定化の利用者は、クエリの問題をコミュニティに報告しなくなる

運用が複雑になる。統計情報の固定化を意識した運用が必要。

1

8

Copyright © 2014 NTT DATA Corporation

まとめ

統計情報の固定化は使い方次第で

魔法の杖にも

トラブルの元凶にもなります。

効果とリスクを正しく理解し、

pg_dbms_statsで

PostgreSQLの一歩進んだ使い方を!

Copyright © 2011 NTT DATA Corporation

Copyright © 2014 NTT DATA Corporation