Weitere ähnliche Inhalte
Ähnlich wie 「今そこにある危機」を捉える ~ pg_stat_statements revisited
Ähnlich wie 「今そこにある危機」を捉える ~ pg_stat_statements revisited (20)
「今そこにある危機」を捉える ~ pg_stat_statements revisited
- 3. 「pg_stat_statements」とは
• PostgreSQL 8.4で導入されたビュー
– より正確には、ビューを実現する拡張モジュール
– インストール、設定が必要
• ユーザ、データベース、クエリの種類別に集計される
– 何回実行されたか
– どれだけ時間がかかったか
– 何レコード取り出したか
– 何ブロック読んだか、書いたか
– 等々・・・
http://www.postgresql.jp/document/9.2/html/pgstatstatements.html
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 3
- 5. 機能と仕様
• PostgreSQL用の共有ライブラリとして提供
– サーバ起動前にpostgresql.confで設定する必要がある
– shared_preload_librariesパラメータ
• クエリ種別、実行回数、総実行時間等を収集
– クエリの中の「値」が異なると、異なるクエリとして集計(9.1まで)
– 9.2以降は、Normalize(正規化)により値の異なるクエリも集約
• 集計値を保持するpg_stat_statementsビューを提供
– ビューを作成するSQL文を実行する必要がある(スーパーユーザ)
– 9.1以降であれば CREATE EXTENSION … を実行
• 集計値のリセットは専用のSQL関数を使う
– SELECT pg_stat_statements_reset()
http://www.postgresql.jp/document/9.2/html/pgstatstatements.html
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 5
- 6. 機能と仕様 cont’d
8.4
9.2
9.0
9.2
9.2
http://www.postgresql.jp/document/9.2/html/pgstatstatements.html
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 6
- 7. Normalize(正規化)とは
Normalizeなし(9.1)
Normalizeあり(9.2)
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 7
- 9. どのような時に「使えない」のか
• モジュールをロードしていない
– shared_preload_librariesの設定をしていない
• バージョンが9.1までで、かつ、プリペアードクエリを使ってい
ない
– バインド変数を使っていると、同じクエリとして集計される
Normalizeなし(9.1)、プリペアードクエリ使用
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 9
- 11. 「今そこにある危機」を捉える cont’d
• 今から10秒間の間に実行されたSQL文を抽出する
• 抽出された各SQL文の実行回数と総実行時間を把握する
– 総実行時間 = 平均実行時間 × 実行回数
• 各SQL文ごとのアクセス状況を把握する
– block hit(バッファ読み込み)、block read(ブロック読み込み)等
• その後、ヘビーなSQL文をなんとかする
– ブロックI/Oが多い? バッファヒットが多くてCPU使ってる?
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 11
- 13. snap_rank_statement_by_totaltime.sql
• やってくれること
– 10秒間に実行されたSQL文を抽出
– 総実行時間でランキングを作成、上位20件を表示
• 内部でやっていること
– pg_stat_statementsビューのスナップショットを作成
– 10秒待つ
– 再度、pg_stat_statementsビューのスナップショットを作成
– スナップショット間の差分を計算してランキング
• 入手先
– http://www.uptime.jp/go/pgperf
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 13