HOTの効果 (4)
【コラム】 ガベージの監視
DBT-1の測定でガベージ量の時間推移を見ていましたが、その方法を説明します。PostgreSQLは、取得できる稼働統計情報(DBの様々な処理の統計情報)がバージョンによって少し異なります。そのため、8.2.5と8.3.0で少々ガベージ量のチェック方法が異なります。
- 8.2.5の場合
- 8.2.5の測定では、PostgreSQLのシステムテーブルである「pg_stat_user_tables」の「n_tup_upd」と「n_tup_del」のカラムの数値をガベージ量としてしました。pg_stat_user_tablesは、DB内のユーザテーブルに関する様々な情報を記録しており。その中に、更新や削除されたタプル(レコードと同義)数を記録している数値があります。「n_tup_upd」は更新されたタプル数、「n_tup_del」は削除されたタプル数です。そこで更新または削除されたタプル数=ガベージ量として先述のグラフがプロットされています。具体的なSQL例は以下のようになります。relnameに調べたいテーブル名を指定します。
postgres=# SELECT * FROM pg_stat_user_tables WHERE relname='t'; -[ RECORD 1 ]----+------- relid | 16384 schemaname | public relname | t seq_scan | 1 seq_tup_read | 0 idx_scan | 1 idx_tup_fetch | 1 n_tup_ins | 2 n_tup_upd | 1 ★ n_tup_del | 0 ★ last_vacuum | last_autovacuum | last_analyze | last_autoanalyze |
なお、処理タプル数の統計情報を取得したい場合は、postgresql.conf(PostgreSQLの設定ファイル)の「stats_row_level」をonにしておきましょう。併せて、ブロックのリード数などの統計情報も取得できるようになる「stats_block_level」もonにしておくことをお奨めします。
- 8.3.0の場合
- 8.3.0の測定では、8.2.5と同様に「pg_stat_user_tables」を監視しましたが、「n_tup_upd」と「n_tup_del」に加え「n_tup_hot_upd」カラムの数値を使っています。n_tup_hot_updは8.3から追加された統計情報で、n_tup_updで示される更新タプル数の内、HOTが機能した更新タプル数を表します。そのため、ガベージとなったタプル数を「n_tup_upd」+ 「n_tup_del」-「n_tup_hot_upd」として算出してプロットしています。また、8.3から追加された統計情報として「n_dead_record」という情報もあります。これは、そのままガベージ数を表しています。どちらもほぼ同じ数値となりますが、今回の測定では、どれくらいHOTが有効に機能した更新処理が行われているかも確認するためn_tup_hot_updの数値を用いました。下記はSQLの参考例です。
test=# SELECT * FROM pg_stat_user_tables WHERE relname='t'; -[ RECORD 1 ]----+------------------------------ relid | 41989 schemaname | public relname | t seq_scan | 1 seq_tup_read | 0 idx_scan | 1 idx_tup_fetch | 1 n_tup_ins | 4 n_tup_upd | 1 ★ n_tup_del | 0 ★ n_tup_hot_upd | 1 ★ n_live_tup | 4 n_dead_tup | 0 ★ last_vacuum | last_autovacuum | last_analyze | last_autoanalyze |
8.3では、8.2におけるstats_row_levelとstats_block_levelが、「track_counts」というパラメータに統一され、デフォルトでonになっています。そのため、特に設定ファイルの変更をしなくとも、統計情報の取得が可能となっています。
まとめ
ベンチマークでHOTの効果を見てきましたが、いかがだったでしょうか?8.3を使用中の方は、体感的に「速くなった」と感じられていたかもしれませんが、改めて数値で見てみると、いかに劇的な改善がなされているかお分かりいただけたかと思います。このように、HOTは更新処理において大幅な性能向上を見せてくれます。また、参照メインのシステムであっても、ガベージの発生が特定のテーブルに集中しそれがボトルネックになるような場合には、HOTが活躍してくれることも分かりました。
でも、HOTはどのようにして更新処理コストの削減や、ガベージの発生量の抑制を行っているのでしょうか?これについては、次回の「HOTの仕組み」で詳しく解説していきます。ついでに、HOTの効果を確認する方法などもお話しする予定です。
(HOTシリーズ目次)
第1回 HOTの効果
第2回 HOTの仕組み
第3回 HOTの上手な使い方
(2009年1月23日公開)