TOP設計・移行・活用> チェックポイントの頻度と性能




今すぐできるPostgreSQLチューニング
今すぐできるPostgreSQLチューニング

第5回:基本的項目のチェックポイントセグメント数
著者:日本PostgreSQLユーザ会  片岡 裕生   2005/8/17
前のページ  1  2   3  次のページ
チェックポイントの頻度と性能

   チェックポイントの頻度は性能に大きく影響します。どのように影響するのか考えてみます。

   あるデータが1分間に1回更新されると仮定します。そしてチェックポイントは5分に1回実行されるとします。データの更新は共有バッファ上のみで行われ、すぐにはハードディスクへ書き込まれません。その後のチェックポイント実行時に書き込まれることになります。すると5回のデータ更新に対して、ハードディスクへの書き込み回数は1回で済んだことになります。

   ではチェックポイントの頻度を10分に1回に下げたらどうなるでしょうか。10回のデータ更新に対して1回の書き込みで済むことになります。

   つまりチェックポイントの頻度を下げると、ハードディスクへの書き込み回数が節約できるため、結果的に性能の向上が期待できます。

   またトランザクションログのサイズという観点からも性能に影響します。

   トランザクションログにはデータベースに対して行った更新内容が書き込まれています。例えば1レコードを更新したのであれば、トランザクションログにも1レコード分のデータが書き込まれます。

   ただし例外があります。PostgreSQLはページ(8Kバイト)単位でデータベースを管理していますから、例えば1レコードを更新する場合でも、そのレコードが格納されているページに対して更新が行われます。もしもそのページがチェックポイントを実行して以来はじめて更新されるページであれば、そのときのトランザクションログには更新される(1レコード分だけではなく)ページ全体が書き出されるのです。

   つまりチェックポイントが頻繁に行われると、トランザクションログにページ全体が書き出される機会が増えることになり、結果としてトランザクションログのサイズが大きくなってしまいます。

   逆にチェックポイントの頻度が少ないと、トランザクションログにページ全体が書き出される機会が減り、結果としてトランザクションログのサイズが小さくなります。トランザクションログのサイズが小さくなれば、それだけハードディスクへのI/O量が減るため、性能も向上します。

   以上のように、チェックポイントの実行頻度は少ないほど性能が良いわけですが、トランザクションログが大量に溜まる可能性がありますから、ハードディスクの容量には十分な余裕が必要になります。また大量のトランザクションログが溜まる可能性があるということは、障害後のリカバリ処理に長時間を要する可能性もあるということで、注意が必要です。


チェックポイントセグメント数の大きさ

   チェックポイントセグメント数の大きさはデフォルトで3セグメントです。

   セグメントとは、トランザクションログがハードディスクに保管される最小単位(トランザクションログセグメント)のことで、1セグメントは16Mバイトです。3セグメントということは48Mバイトですから、デフォルトではトランザクションログが48Mバイト溜まるとチェックポイントが実行されることになります。

   なお実際に必要となるハードディスク容量には気をつける必要があります。というのも、チェックポイント処理によって不要となった古いトランザクションログセグメントは削除されますが、正確には1回前のチェックポイントよりもさらに古いセグメントが削除対象となるからです。

   ですから、ハードディスクには最大でチェックポイント2回分のトランザクションログセグメントが保管される可能性があるわけです。それだけではありません。チェックポイント処理中でも次々とトランザクションログは生成されますから、さらにもう1セグメント程度は余計に存在する可能性があります。

   トランザクションログのために必要なハードディスク容量を式にまとめると下記の通りです。

(チェックポイントセグメント数×2+1)×16Mバイト

   デフォルト設定では3セグメントですから、これをハードディスク容量に換算すると112Mバイトとなります。


チェックポイントセグメント数の調整

   もしもハードディスクの容量に余裕があるなら、チェックポイントの実行頻度を下げて性能を向上させましょう。

   デフォルトは3セグメントでしたから、これよりも大きくすれば性能は向上します。ただし意外とハードディスクの容量を必要としますので、むやみに大きくすることはできません。ハードディスクにどれくらいの余裕があるかを調べた上で、きちんと計算して決めましょう。

   また大きくしすぎるとリカバリに時間がかかるようになりますから、そのことが後々問題になりそうなら控えめに設定した方がいいでしょう。

   例えばハードディスクに1Gバイトの余裕があり、これをすべてトランザクションログのために使うとすると、先ほどの式を逆算すれば、トランザクションセグメント数の設定値は31セグメントと導けます。

前のページ  1  2   3  次のページ


日本PostgreSQLユーザ会 片岡 裕生
著者プロフィール
日本PostgreSQLユーザ会  片岡 裕生
1995年よりインターウィズという屋号で個人事業を営む。普段はPostgreSQLを用いたウェブアプリケーション開発などを行う。各コンピュータ情報誌にてPostgreSQL関連記事や連載を執筆。日本PostgreSQLユーザ会の創立メンバーの1人で、同会の技術担当理事、PostgreSQLのしくみ分科会座長を経て、2004年度からは理事長を勤める。


INDEX
第5回:基本的項目のチェックポイントセグメント数
  今回のチューニング
チェックポイントの頻度と性能
  テスト用サーバマシンをチューニング