主な取得可能情報を以下に示します。
・pg_statsinfo-1.0 (8.3対応ver)
---------------------------------------- DB Activity Information ---------------------------------------- Database Size : 52440684 Connection Average Number : 1 Database Frozen Xid(Age) : 5233 Commit Number : 5049 Rollback Number : 0 Block Read : 921 Block Hit : 106000 Cache Hit Ratio : 99.14 Return Tuples : 197067 Fetched Tuples : 18468 INSERT Tuples : 5006 UPDATE Tuples : 15007 DELETE Tuples : 0 Total User Table Number : 4 --------------------------------------------------------------------- Instance Disk Usage Information --------------------------------------------------------------------- Space_name Device_ID Device_name Location USED AVAIL TOTAL RATIO --------------------------------------------------------------------------------------------------------------------------------- pg_default 2080 /dev/sdc /array1/data 112 GB 474 GB 586 GB 19.16 pg_global 2080 /dev/sdc /array1/data 112 GB 474 GB 586 GB 19.16 2097 /dev/sdd1 /var/lib/pgsql/archive_dir/ 32 MB 952 MB 984 MB 3.25 2051 /dev/root /array1/data/pg_xlog 27 GB 38 GB 64 GB 41.82 --------------------------------------- Fragmented Table worst 10 --------------------------------------- Table name dead record live record dead record ratio ----------------------------------------------------------------------------- accounts 4476 300000 1.49 pg_statistic 7 361 1.94 pg_amop 0 347 0.00 pg_type 0 289 0.00 pg_proc 0 2164 0.00 pg_class 0 239 0.00 pg_shdepend 0 1 0.00 pg_cast 0 191 0.00 pg_namespace 0 6 0.00 pg_index 0 93 0.00 --------------------------------------- Much Access Table Top 10 --------------------------------------- Table name seq scanread records records per scan -------------------------------------------------------------------------------- tellers 5462 150000 27.46 branches 8088 15003 1.85 pg_class 23 5497 239.00 pg_attribute 2 3696 1848.00 pg_index 5 465 93.00 pg_database 10 41 4.10 pg_am 8 8 1.00 pg_tablespace 2 4 2.00 accounts 0 0 0.00 pg_authid 1 0 0.00
-- 確認例 -- $ rpm -qa | grep Text-Template perl-Text-Template-1.44-1.2.el5.rf $ rpm -qa | grep DBD perl-DBD-Pg-1.49-1.fc6 $ rpm -qa | grep DBI perl-DBI-1.52-1.fc6もしなければ、それぞれのモジュールを取得しインストールします。下記はRPMパッケージの入手先とインストール例です。 (pg_statsinfoをRPMでインストールする場合は、それぞれのモジュールをRPMでインストールして下さい)
# rpm -i perl-Text-Template-1.44-1.2.el5.rf.noarch.rpm # rpm -i perl-DBD-Pg-1.49-1.fc6.x86_64.rpm # rpm -i perl-DBI-1.52-1.fc6.x86_64.rpm
psql -d <スナップショット管理DB> ALTER USER user_name SET search_path = statsinfo, "$user", public;また、監視対象DBにも接続用のユーザを作成しておきます。スナップショット取得時に、スナップショット管理DBから監視対象DBへアクセスするためです。スーパーユーザ権限が必要です。
$ psql -d <監視対象DB> CREATE ROLE some_user SUPERUSER;
t_dbconn の各カラムの説明 Column | Type | description --------------------+---------+------------------- dbid | bigint | DBのIDです。シーケンスになっており、INSERT時は'default'を指定して下さい。 dbname | text | 監視対象のDB名です。 hostname | text | ホスト名です。IPかホスト名を指定します。 port | integer | DBクラスタのポート番号です。通常は5432です。 username | text | 監視対象DBへ接続するユーザ名です。スーパーユーザ権限が必要です。 password | text | 監視対象DBへの接続パスワードです。暗号化されて格納されます。 is_snapshot_target | boolean | 一括スナップショット取得の対象にするかのフラグです。詳細は後述。以下は、"localhost"の ポート"5432"のDBクラスタの"target"データベースへ、"postgres"ユーザで"passwd"というパスワードで接続するための設定方法です。
INSERT INTO statsinfo.t_dbconn VALUES (default, 'target', 'localhost', 5432, 'postgres', 'passwd', 't'); INSERT 1 0
$ psql stats =# SELECT statsinfo.get_stats(); get_stats ----------- t (1 row) =# SELECT statsinfo.get_stats(1); get_stats ----------- t (1 row)成功すれば't'が返ります。なお、DBIDは以下のSQLで確認できます。
=# SELECT dbid, dbname, hostname, port, username FROM statsinfo.t_dbconn; dbid | dbname | hostname | port | username ------+--------+--------------+------+---------- 1 | target | localhost | 5432 | postgres 2 | user1 | 172.20.16.99 | 5433 | admin
=# SELECT * FROM statsinfo.snapshot_history ; snapshot_id | snapshot_date | hostname | dbname | port | level | description -------------+------------------------+-----------+--------+------+-------+------------- 1 | 2009-03-04 15:20:02+09 | localhost | target | 5432 | 0 | 2 | 2009-03-04 15:20:32+09 | localhost | target | 5432 | 0 | 3 | 2009-03-04 15:20:33+09 | localhost | target | 5432 | 0 |
# id指定 pg_make_report.pl --host=localhost --dbname=stats --port=5432 --user=postgres --output-prefix=/tmp/report.log \ --startid=1 --endid=10 --template=$REPORT/pg_statsreport.tmpl # 時間指定 pg_make_report.pl --host=localhost --dbname=stats --port=5432 --user=postgres --output-prefix=/tmp/report.log \ --startdate='2009-03-01 10:00:00' --enddate='2009-03-02 10:00:00' --template=$REPORT/pg_statsreport.tmpl # 時間指定とDBID指定 pg_make_report.pl --host=localhost --dbname=stats --port=5432 --user=postgres --output-prefix=/tmp/report.log \ --startdate='2009-03-01 10:00:00' --enddate='2009-03-02 10:00:00' --targetdbid=1 --template=$REPORT/pg_statsreport.tmpl # 時間指定とホスト、ポート番号、DB名指定 pg_make_report.pl --host=localhost --dbname=stats --port=5432 --user=postgres --output-prefix=/tmp/report.log \ --startdate='2009-03-01 10:00:00' --enddate='2009-03-02 10:00:00' --targetstring=localhost:5432/target_db --template=$REPORT/pg_statsreport.tmplレポートの見方については、こちらでサマリ情報の見方を解説しています。
=# SELECT statsinfo.delete_stats(11); delete_stats -------------- t (1 row)ある期間のものをまとめて削除したい時は、snapshot_history ビューと組み合わせて下さい。
# ある日時(下記の例では '2009-03-04 15:21:00')より古いスナップショットを消したい時。 =# SELECT * FROM statsinfo.snapshot_history ; snapshot_id | snapshot_date | hostname | dbname | port | level | description -------------+------------------------+-----------+--------+------+-------+------------- 1 | 2009-03-04 15:20:02+09 | localhost | target | 5432 | 0 | 2 | 2009-03-04 15:20:32+09 | localhost | target | 5432 | 0 | 3 | 2009-03-04 15:20:33+09 | localhost | target | 5432 | 0 | 4 | 2009-03-04 15:20:40+09 | localhost | target | 5432 | 0 | 5 | 2009-03-04 15:21:35+09 | localhost | target | 5432 | 0 | (5 rows) =# SELECT statsinfo.delete_stats(snapshot_id) FROM statsinfo.snapshot_history WHERE snapshot_date <='2009-03-04 15:21:00'; delete_stats -------------- t t t t (4 rows) =# SELECT * FROM statsinfo.snapshot_history ; snapshot_id | snapshot_date | hostname | dbname | port | level | description -------------+------------------------+-----------+--------+------+-------+------------- 5 | 2009-03-04 15:21:35+09 | localhost | target | 5432 | 0 | (1 row)
## RPMでインストールした場合 $ psql -f /usr/share/pgsql/contrib/pgstatsinfo/uninstall_stats_info.sql -d stats $ psql -f /usr/share/pgsql/contrib/pgstatsinfo/uninstall_target_db.sql -d targetログフィルターを使用している場合は、PostgreSQLを一度停止させ、ログフィルター無しの状態でPostgreSQLを起動させます。 RPMで導入している場合は、rpm -e コマンドでRPMをアンインストールします。 以上でアンインストール作業は終了です。