「今そこにある危機」を捉える ~ pg_stat_statements revisited
-
Upload
uptime-technologies-llc-jp -
Category
Technology
-
view
4.089 -
download
0
description
Transcript of 「今そこにある危機」を捉える ~ pg_stat_statements revisited
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 1
「今そこにある危機」を捉える
“pg_stat_statements revisited”
アップタイム・テクノロジーズ
永安 悟史
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 2
アジェンダ
• 「pg_stat_statements」とは
• 機能と仕様(8.4~9.2)
• Normalize(正規化)とは
• どのような時に使えるのか
• どのような時に「使えない」のか
• 「今そこにある危機」を捉える
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 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. 4
「pg_stat_statements」とは
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 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. 6
機能と仕様 cont’d
http://www.postgresql.jp/document/9.2/html/pgstatstatements.html
8.4
9.0
9.2
9.2
9.2
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 7
Normalize(正規化)とは
Normalizeあり(9.2)
Normalizeなし(9.1)
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 8
どのような時に使えるのか
• どのクエリがたくさん実行されているのかを知りたい
• どのクエリの実行に時間がかかっているのかを知りたい
• どのクエリがリソースを食っているのかを知りたい
• サーバログにSQLを大量に出力されても困る
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 9
どのような時に「使えない」のか
• モジュールをロードしていない– shared_preload_librariesの設定をしていない
• バージョンが9.1までで、かつ、プリペアードクエリを使ってい
ない– バインド変数を使っていると、同じクエリとして集計される
Normalizeなし(9.1)、プリペアードクエリ使用
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 10
「今そこにある危機」を捉える
• 今現在、目の前のPostgreSQLサーバの負荷が高い、重い。
• 何が問題なのかを知りたい。SQLに問題があるなら、そのSQLを抽出したい。
• サーバに負荷を掛けたくない、設定をいじりたくない。
• 累積値ではなく、今の値が知りたい。統計情報は無闇にリセットしたくない。
• 他にもやらなければならないことはたくさんある。手間をかけたくない。
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 11
「今そこにある危機」を捉える cont’d
• 今から10秒間の間に実行されたSQL文を抽出する
• 抽出された各SQL文の実行回数と総実行時間を把握する– 総実行時間 = 平均実行時間 × 実行回数
• 各SQL文ごとのアクセス状況を把握する– block hit(バッファ読み込み)、block read(ブロック読み込み)等
• その後、ヘビーなSQL文をなんとかする– ブロックI/Oが多い? バッファヒットが多くてCPU使ってる?
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 12
デモ
• snap_rank_statement_by_totaltime.sql
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 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. 14
Q&A
Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 15
【お問い合わせ先】アップタイム・テクノロジーズ合同会社担当:永安E-mail: [email protected]: http://www.uptime.jp/