本作品はCC-BYライセンスによって許諾されています。 ライセンスの内容を知りたい方は こちら でご確認ください。 文書の内容、表記に関する誤り、ご要望、感想等につきましては、PGEConsのサイト を通じてお寄せいただきますようお願いいたします。
PostgreSQLエンタープライズコンソーシアム(略称 PGECons)は、PostgreSQL本体および各種ツールの情報収集と提供、整備などの活動を通じて、ミッションクリティカル性の高いエンタープライズ領域へのPostgreSQLの普及を推進することを目的として設立された団体です。
PGECons 技術部会ではPostgreSQLの普及に資する課題を活動テーマとし、3つのワーキンググループで具体的な活動を行っています。
これら3つのワーキンググループのうち、WG1、WG3については 2015 年度まではそれぞれ、「性能ワーキンググループ」、「設計運用ワーキンググループ」という名称で活動してきました。2016年度は、従来の活動領域を広げる意図のもとでそれらを再定義し、上記のような名称に改めました。
これに伴い、WG3ではPostgreSQLの設計運用を中心としたさまざまな課題の解決のための調査検証を行い、PostgreSQLが広く活用される事を推進していくこととしました。
2017年度、Windows上でのPostgreSQLに関して実際にWindows環境での検証と机上調査を通して情報を整備しました。 その中で、特に周辺ツールについてはWindowsに対応していないツールが多いことが明らかになりました。
これを受け、2018年度はWindowsにおけるPostgreSQLについて、 特に運用面(リソース監視、バックアップ)にフォーカスして調査・検証し、結果をまとめました。
本資料では、以下の内容をご紹介しています。
これにより、Windows上でのPostgreSQLの運用設計の際の参考として役立てていただくことを狙いとしています。
本資料の読者は以下のような知識を有していることを想定しています。
本章では、Windows環境でリソースを監視する方法について調査した結果を記載します。
本章では、以下の調査結果を記載します。
検証には以下の環境を用意しました。
項目 | バージョン |
---|---|
OS | Windows Server 2016 DataCenter |
CPU | Intel Xeon CPU E5-2684 v4 @ 2.30GHz |
Memory | 16.0GB |
Prometheus | 2.7.1 |
global:
scrape_interval: 5s
scrape_timeout: 5s
scrape_configs:
- job_name: node
static_configs:
- targets:
# wmi_exporter
- localhost:9182
# postgres_exporter
- localhost:9187
C:\Users\Administrator>cd "C:\Program Files\exporter"
C:\Program Files\exporter>dir
Volume in drive C has no label.
Volume Serial Number is 7C6C-45DB
Directory of C:\Program Files\exporter
02/27/2019 05:15 AM <DIR> .
02/27/2019 05:15 AM <DIR> ..
02/27/2019 05:14 AM 13,268,992 postgres_exporter.exe
02/27/2019 05:14 AM 12,689,920 wmi_exporter-0.6.0-amd64.exe
2 File(s) 25,958,912 bytes
2 Dir(s) 10,447,429,632 bytes free
C:\Program Files\exporter>.\wmi_exporter-0.6.0-amd64.exe --collectors.enabled "cpu,cs,logical_disk,net,os,tcp,system"
$ curl example.com:9182/metrics -i
HTTP/1.1 200 OK
Content-Length: 20465
Content-Type: text/plain; version=0.0.4; charset=utf-8
Date: Fri, 01 Mar 2019 08:48:49 GMT
(略)
# HELP wmi_cpu_time_total Time that processor spent in different modes (idle, user, system, ...)
# TYPE wmi_cpu_time_total gauge
wmi_cpu_time_total{core="0",mode="dpc"} 4.90625
wmi_cpu_time_total{core="0",mode="idle"} 24476.2490999
wmi_cpu_time_total{core="0",mode="interrupt"} 10.15625
wmi_cpu_time_total{core="0",mode="privileged"} 140.5625
wmi_cpu_time_total{core="0",mode="user"} 187.28125
wmi_cpu_time_total{core="1",mode="dpc"} 0.859375
wmi_cpu_time_total{core="1",mode="idle"} 24620.4848363
wmi_cpu_time_total{core="1",mode="interrupt"} 1.640625
wmi_cpu_time_total{core="1",mode="privileged"} 126.21875
wmi_cpu_time_total{core="1",mode="user"} 180.8125
wmi_cpu_time_total{core="2",mode="dpc"} 0.765625
wmi_cpu_time_total{core="2",mode="idle"} 24621.9940862
wmi_cpu_time_total{core="2",mode="interrupt"} 1.578125
wmi_cpu_time_total{core="2",mode="privileged"} 121.90625
wmi_cpu_time_total{core="2",mode="user"} 173
wmi_cpu_time_total{core="3",mode="dpc"} 0.8125
wmi_cpu_time_total{core="3",mode="idle"} 24389.811079699997
wmi_cpu_time_total{core="3",mode="interrupt"} 1.921875
wmi_cpu_time_total{core="3",mode="privileged"} 256.71875
wmi_cpu_time_total{core="3",mode="user"} 282.03125
(略)
avg(
irate(
wmi_cpu_time_total{
instance="localhost:9182",
mode!="idle"
}[10s]
)
) without(core)
typeperfの-hを見ると以下が表示されます。
C:\Users\Administrator>typeperf -h
Microsoft ® TypePerf.exe (10.0.14393.0)
Typeperf writes performance data to the command window or to a log file. To stop Typeperf, press CTRL+C.
Usage:
typeperf { <counter [counter ...]> | -cf <filename> | -q [object] | -qx [object] } [options]
Parameters:
<counter [counter ...]> Performance counters to monitor.
Options:
-? Displays context sensitive help.
-f <CSV|TSV|BIN|SQL> Output file format. Default is CSV.
-cf <filename> File containing performance counters to monitor, one per line.
-si <[[hh:]mm:]ss> Time between samples. Default is 1 second.
-o <filename> Path of output file or SQL database. Default is STDOUT.
-q [object] List installed counters (no instances). To list counters for one object, include the
object name, such as Processor.
-qx [object] List installed counters with instances. To list counters for one object, include the
object name, such as Processor.
-sc <samples> Number of samples to collect. Default is to sample until CTRL+C.
-config <filename> Settings file containing command options.
-s <computer_name> Server to monitor if no server is specified in the counter path.
-y Answer yes to all questions without prompting.
Note:
Counter is the full name of a performance counter in
"\\<Computer>\<Object>(<Instance>)\<Counter>" format,
such as "\\Server1\Processor(0)\% User Time".
Examples:
typeperf "\Processor(_Total)\% Processor Time"
typeperf -cf counters.txt -si 5 -sc 50 -f TSV -o domain2.tsv
typeperf -qx PhysicalDisk -o counters.txt
PS C:\Users\Administrator> typeperf.exe -qx > .\typeperf_list.txt
PS C:\Users\Administrator> Get-Content list.txt
\Hyper-V VM Virtual Device Pipe IO(*)\Receive Message Quota Exceeded
\Hyper-V VM Virtual Device Pipe IO(*)\Receive QoS - Total Message Delay Time (100ns)
\Hyper-V VM Virtual Device Pipe IO(*)\Receive QoS - Exempt Messages/sec
\Hyper-V VM Virtual Device Pipe IO(*)\Receive QoS - Non-Conformant Messages/sec
\Hyper-V VM Virtual Device Pipe IO(*)\Receive QoS - Conformant Messages/sec
\Hyper-V Virtual Machine Health Summary\Health Critical
\Hyper-V Virtual Machine Health Summary\Health Ok
\Network Virtualization(Provider Routing Domain)\Unicast Replicated Packets out
\Network Virtualization(Provider Routing Domain)\Inbound Packets dropped
\Network Virtualization(Provider Routing Domain)\Outbound Packets dropped
(略)
実際にコマンドを発行すると以下の様な結果を取得できます。
# 上記リソース項目を5秒間隔で3回取得して、typep.csvにcsv形式で取得します。
PS C:\Users\Administrator\Documents> typeperf.exe -cf typeperf_list.txt -si 5 -sc 3 -o typep.csv
The command completed successfully.
本章では、Windows環境でのPostgreSQL層のリソース監視について調査した結果を記載します。
Prometheusのソースや利用方法などの情報は、公式ページ 配下より入手できます。 また、Windows環境の実行バイナリは、公式ページ内の「DOWNLOAD」 よりtar.gz形式で入手できます。
postgres_exporterのソースや利用方法などの情報は、プロジェクトのgithub 配下より入手できます。 また、Windows環境の実行バイナリは、Release よりzip形式、tar.gz形式で入手できます。
以下の環境を利用して、postgres_exporterの動作検証を実施しました。
ソフトウェアのバージョンは、以下の通りです。
また、検証のためPrometheusとPostgreSQLの環境は同一サーバとしました。
ダウンロードしてきたアーカイブを展開します。
postgres_exporterからのデータを収集するために、prometheus.ymlに以下を追記します。
- job_name: 'PostgreSQL'
static_configs:
- targets: ['localhost:9187']
# postgres_exporterが使用するデフォルトのポート番号が9187のため
pg_stat_activity、pg_stat_replicationの情報を一般ユーザから取得するために、ユーザの作成と権限付与、ビューの作成などを実施します。
CREATE USER postgres_exporter PASSWORD 'password';
ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog;
-- If deploying as non-superuser (for example in AWS RDS), uncomment the GRANT
-- line below and replace <MASTER_USER> with your root user.
-- GRANT postgres_exporter TO <MASTER_USER>
CREATE SCHEMA postgres_exporter AUTHORIZATION postgres_exporter;
CREATE VIEW postgres_exporter.pg_stat_activity
AS
SELECT * from pg_catalog.pg_stat_activity;
GRANT SELECT ON postgres_exporter.pg_stat_activity TO postgres_exporter;
CREATE VIEW postgres_exporter.pg_stat_replication AS
SELECT * from pg_catalog.pg_stat_replication;
GRANT SELECT ON postgres_exporter.pg_stat_replication TO postgres_exporter;
以下の環境変数を設定します。
$ set DATA_SOURCE_NAME=postgresql://postgres_exporter:password@localhost:5432/postgres?sslmode=disable
また、別途githubより入手したqueries.yamlを配置します。
> postgres_exporter.exe --extend.query-path="[queries.yamlの配置先パス]"
Windowsのセキュリティ警告画面が出ることがありますが、ここではプライベートネットワーク内での通信に閉じるため、 上のチェックボックスにチェックを入れて「アクセスを許可する」をクリックします。
Prometheus、PostgreSQLをインストールしたサーバの9090番ポートにhttpでアクセスします。
http://localhost:9090
以下の画面が表示されるので、Graph → 「-insert metrics at a Cursor-」のあるプルダウンをクリックし、PostgreSQLに関するメトリクスが表示されることを確認します。
以下の画面は、pgbenchをスケールファクタ100で1時間程度実施した際の例です。
実現ツール | メリット | デメリット |
---|---|---|
Prometheus | ・agnetを配置するだけで取得リソースを増やせる
・PostgreSQL層の情報もある程度取得できる
・GUI(Prometheus, Grafana)を利用することで簡単にグラフ化したリソースをリアルタイムで確認できる
・Prometheusの他の機能(アラートなど)を利用できる
・さらに詳細を取得したい場合はexporterを自作できる
|
・運用するミドルウェアが増える
|
typeperf | ・Windowsの標準機能のため、新規のミドルウェアを導入する必要がない
・wmi_exporterに比べると詳細な情報が取得できる
|
・GUIがないのでリアルタイムで値の確認がしづらい
|
2017年度のPGEConsの成果物「Windows環境調査編」では、 周辺ツールのうち、Windowsに対応しているPostgreSQLのバックアップツールがないことを記載しました。
本章では、以下の調査結果を記載します。
2017年度のPGEConsのWG3で調査したバックアップツール3つのうち、Googleでの検索結果、 Googleトレンドの結果を勘案し、利用頻度が高いと考えられるpg_rmanを選定しました。
また、調査方法としてはソースを見ながら内部ロジックを確認する机上調査を実施しました。
pg_manのソースや利用方法などの情報は、pg_rmanのgithub より入手できます。
pg_rmanでのコマンド例を基準にした、Windowsでの代替手段の調査結果は以下の通りです。
本検証では、pg_rmanとPostgreSQLのコマンドラインとの機能比較を実施しました。
(企業・団体名順)
版 | 所属企業・団体名 | 部署名 | 氏名 |
---|---|---|---|
第1.0版
(2018年度WG3)
|
NTTテクノクロス株式会社 | IoTイノベーション事業部 | 勝俣 智成 |
NTTテクノクロス株式会社 | IoTイノベーション事業部 | 山本 育 | |
富士通株式会社 | ミドルウェア事業本部 | 山本 貢嗣 |