Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
「今そこにある危機」を捉える “pg_stat_statements revisited”        アップタイム・テクノロジーズ                        永安 悟史  Copyright (c) 2013 Uptim...
アジェンダ• 「pg_stat_statements」とは• 機能と仕様(8.4~9.2)• Normalize(正規化)とは• どのような時に使えるのか• どのような時に「使えない」のか• 「今そこにある危機」を捉える            ...
「pg_stat_statements」とは• PostgreSQL 8.4で導入されたビュー  – より正確には、ビューを実現する拡張モジュール  – インストール、設定が必要• ユーザ、データベース、クエリの種類別に集計される  –   何...
「pg_stat_statements」とは Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved.   4
機能と仕様• PostgreSQL用の共有ライブラリとして提供  – サーバ起動前にpostgresql.confで設定する必要がある  – shared_preload_librariesパラメータ• クエリ種別、実行回数、総実行時間等を収集...
機能と仕様 cont’d                                                                        8.4                                   ...
Normalize(正規化)とは                                                  Normalizeなし(9.1)                                        ...
どのような時に使えるのか• どのクエリがたくさん実行されているのかを知りたい• どのクエリの実行に時間がかかっているのかを知りたい• どのクエリがリソースを食っているのかを知りたい• サーバログにSQLを大量に出力されても困る        C...
どのような時に「使えない」のか• モジュールをロードしていない – shared_preload_librariesの設定をしていない• バージョンが9.1までで、かつ、プリペアードクエリを使ってい  ない – バインド変数を使っていると、同じ...
「今そこにある危機」を捉える• 今現在、目の前のPostgreSQLサーバの負荷が高い、重い。• 何が問題なのかを知りたい。SQLに問題があるなら、その  SQLを抽出したい。• サーバに負荷を掛けたくない、設定をいじりたくない。• 累積値では...
「今そこにある危機」を捉える cont’d• 今から10秒間の間に実行されたSQL文を抽出する• 抽出された各SQL文の実行回数と総実行時間を把握する – 総実行時間 = 平均実行時間 × 実行回数• 各SQL文ごとのアクセス状況を把握する –...
デモ• snap_rank_statement_by_totaltime.sql              Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved.   12
snap_rank_statement_by_totaltime.sql• やってくれること – 10秒間に実行されたSQL文を抽出 – 総実行時間でランキングを作成、上位20件を表示• 内部でやっていること –   pg_stat_state...
Q&ACopyright (c) 2013 Uptime Technologies, LLC. All rights reserved.   14
【お問い合わせ先】アップタイム・テクノロジーズ合同会社担当:永安E-mail: snaga@uptime.jpWeb: http://www.uptime.jp/               Copyright (c) 2013 Uptime ...
Upcoming SlideShare
Loading in …5
×

「今そこにある危機」を捉える ~ pg_stat_statements revisited

6,453 views

Published on

2013年2月16日に開催された「PostgreSQLアンカンファレンス」でのセッション「“今そこにある危機”を捉える ~ pg_stat_statements revisited」の講演資料です。

PostgreSQLアンカンファレンス@東京(2/16)
http://atnd.org/events/35310

Published in: Technology

「今そこにある危機」を捉える ~ pg_stat_statements revisited

  1. 1. 「今そこにある危機」を捉える “pg_stat_statements revisited” アップタイム・テクノロジーズ 永安 悟史 Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 1
  2. 2. アジェンダ• 「pg_stat_statements」とは• 機能と仕様(8.4~9.2)• Normalize(正規化)とは• どのような時に使えるのか• どのような時に「使えない」のか• 「今そこにある危機」を捉える Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 2
  3. 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
  4. 4. 「pg_stat_statements」とは Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 4
  5. 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. 6. 機能と仕様 cont’d 8.4 9.2 9.0 9.2 9.2 http://www.postgresql.jp/document/9.2/html/pgstatstatements.htmlCopyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 6
  7. 7. Normalize(正規化)とは Normalizeなし(9.1) Normalizeあり(9.2)Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 7
  8. 8. どのような時に使えるのか• どのクエリがたくさん実行されているのかを知りたい• どのクエリの実行に時間がかかっているのかを知りたい• どのクエリがリソースを食っているのかを知りたい• サーバログにSQLを大量に出力されても困る Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 8
  9. 9. どのような時に「使えない」のか• モジュールをロードしていない – shared_preload_librariesの設定をしていない• バージョンが9.1までで、かつ、プリペアードクエリを使ってい ない – バインド変数を使っていると、同じクエリとして集計される Normalizeなし(9.1)、プリペアードクエリ使用 Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 9
  10. 10. 「今そこにある危機」を捉える• 今現在、目の前のPostgreSQLサーバの負荷が高い、重い。• 何が問題なのかを知りたい。SQLに問題があるなら、その SQLを抽出したい。• サーバに負荷を掛けたくない、設定をいじりたくない。• 累積値ではなく、今の値が知りたい。統計情報は無闇にリ セットしたくない。• 他にもやらなければならないことはたくさんある。手間をかけ たくない。 Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 10
  11. 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
  12. 12. デモ• snap_rank_statement_by_totaltime.sql Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 12
  13. 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
  14. 14. Q&ACopyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 14
  15. 15. 【お問い合わせ先】アップタイム・テクノロジーズ合同会社担当:永安E-mail: snaga@uptime.jpWeb: http://www.uptime.jp/ Copyright (c) 2013 Uptime Technologies, LLC. All rights reserved. 15

×