SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所

新しくなったpg_monzでPostgreSQLのクラスタを監視する

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所 第20回

  • X ポスト
  • このエントリーをはてなブックマークに追加

pg_monzを使ってみる

 複数のPostgreSQLサーバから構成されるクラスタの監視対象には、以下のようなものが挙げられます。

  • 個々のPostgeSQLサーバの稼働状況
  • PostgreSQLサーバ内に作成されたデータベース、テーブル単位の稼働状況
  • PostgreSQLサーバ間のストリーミングレプリケーションの稼働状況
  • PostgreSQLサーバへの負荷分散を行うpgpool-IIの稼働状況
  • クラスタ全体としてのサービス提供状況

 以降では、上記の監視対象に対してpg_monzでどのような監視が行えるのかを、実例を交えて紹介します。

PostgreSQLサーバ

 PostgreSQLサーバに接続しているコネクション数の遷移を以下のようなグラフで表示できます。コネクションの総数(Connections)だけではなく、SQL実行中のコネクション(Active connections)、アイドル状態(Idle connections)、ロック待ち状態(Lock waiting connections)といった状態別の内訳を併せて表示でき、無駄なコネクションが専有していないかを確認することができます。

図3 PostgreSQLサーバに接続するコネクション数を表すグラフ
図3 PostgreSQLサーバに接続するコネクション数を表すグラフ

 また、PostgreSQLサーバが処理したトランザクションのコミット、ロールバック回数は1秒あたりの平均件数(Transactions Per Second:TPS)を収集して以下のようなグラフで表示できます。このグラフからはPostgeSQLサーバに高負荷がかかった時間帯を読み取ることができ、PostgrSQLサーバの性能チューニングに役立てることができるでしょう。

図4 PostgreSQLサーバが処理したコミット、ロールバックの秒間件数を表すグラフ
図4 PostgreSQLサーバが処理したコミット、ロールバックの秒間件数を表すグラフ

 pg_monzでは、この他にもPostgreSQLサーバから以下のような情報を収集できます。詳細はpg_monzのマニュアルサイトにある監視アイテム一覧を参照してください。

  • PostgreSQLサーバの死活状態
  • サーバログへのエラーメッセージ出力有無
  • チェックポイントの実行回数

データベース

 PostgreSQLは1つのサーバ(データベースクラスタ)内にデータベースを複数作成できます。pg_monzはサーバ内のデータベースを自動検知し、各データベース単位で情報を収集する監視項目を自動設定します。

 デフォルトのpostgresデータベース以外に「testdb」という名前のデータベースをあらかじめ作成すると、testdbデータベースの容量は以下のようなグラフで表示でき、容量の推移を時系列に把握できます。また、データベースの不要領域の割合(Estimate DB Garage ratio)も併せて表示され、不要領域の増加によるデータベースの肥大化状態を確認することができます。不要領域が大きい場合はVACUUM処理で不要領域がうまく回収されていないことが考えられますので、VACUUM関連の設定チューニングを検討するとよいでしょう。

図5 データベースの容量を表示するグラフ
図5 データベースの容量を表示するグラフ

 また、データベース容量に対してはトリガーが設定されており、閾値(デフォルト1GB)を超えるとイベントとして通知されます。閾値はテンプレートのマクロ{$PGDBSIZE_THRESHOLD}で定義されていますので、実環境でPostgreSQLデータベースを配置するディスク容量に合わせた値をテンプレートもしくは対象ホストのマクロに設定してください。

図6 データベースの容量が閾値を超過した際に発生したイベント
図6 データベースの容量が閾値を超過した際に発生したイベント

 pg_monzでは、この他にもPostgreSQLサーバのデータベースから以下のような情報を収集できます。

  • 対象データベースのキャッシュヒット率
  • 対象データベースの取得/更新行数
  • 対象データベースにおいて一時ファイルに書き出されたデータ量

テーブル

 pg_monzはデータベース内のテーブルも自動検知し、各テーブル単位で以下のような情報を収集する監視項目を自動設定できます。

  • 対象テーブルへのシーケンシャルスキャン/インデックススキャンの回数
  • 対象テーブルの不要領域の割合
  • 対象テーブルへのVACUUM/ANALYZE実行回数
  • 対象テーブルへの挿入/更新/HOT更新/削除行数
  • 対象テーブルの容量

 テーブル単位で情報を収集することで、性能チューニングをよりピンポイントに実施することができますが、テーブル数が多くなるほど監視自体の負荷が高騰する懸念があるため、デフォルトでは無効化されています。使用する場合はテンプレートTemplate App PostgreSQLのアイテム(キー:pgsql.get.pg.stat_table)を有効にしてください。

次のページ
ストリーミングレプリケーション

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
近未来の技術トレンドを先取り! 「Tech-Sketch」出張所連載記事一覧

もっと読む

この記事の著者

中西 剛紀(TIS株式会社)(ナカニシ ヨシノリ)

TIS株式会社 IT基盤技術本部 OSS推進室所属。 OSS推奨ミドルウェアスタック「ISHIGAKI Template」の開発とともに、OSSのプロダクトサポートや技術支援を提供するサービスに従事している。過去の業務で様々なDBMSと苦楽を共にした後、現在はPostgreSQLに心酔。日本Pos...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8885 2015/08/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング