はじめに
先日、パソコンショップに立ち寄った際、メモリが安くなっていることに非常に驚きました。とは言え、ハードディスクと比べるとまだまだ高価な買い物です。 データにアクセスするシステムの場合、データをすべてメモリに置くことができれば、良いレスポンスのシステムを構築できますが、予算やOSの制約から、それができないのが現実です。データベースでは、実装メモリを上手に使うチューニングを施すことによって、データのアクセス性能を向上させることができるのは皆さんもご存知だと思います。
PowerGres Plusでも、セットアップを行うときに最適な使用メモリ量を設定します。通常のシステムでは、セットアップの設定で問題なく運用することができます。さらにシステムのメモリ使用状況に合わせてチューニングすることで、データベースの性能を向上させることができます。
今回は、このポイントについて紹介します。
PowerGres Plusが使用するメモリは、セットアップを行う際にシステムに合わせ自動的に設定します。自動設定の値は、実装メモリの半分の値が設定されます。
設定する項目は、Setup、Administratorにあるデータベースバッファです。
1ギガバイトのメモリを実装しているサーバで、自動設定として512メガバイトの値が設定されていたので、100メガバイト加えて612メガバイトにしてみました。(図1) 100ギガバイトのデータベースを使用し、pgbenchで計測したところ、約1.3倍の性能アップをしました。(図2)
図1: データベースバッファの設定
図2: メモリチューニングの効果
PowerGres Plusは、データベースバッファという専用のメモリ領域を確保することで、以下の2つの特長を実現しています。
高度なキャッシュ処理による高い性能
大量のトランザクションでも安定した動作
(2)-1高度なキャッシュ処理による高い性能
PowerGres Plusは、インデックスのデータを優先してデータベースバッファに置くなど、データベースに対するアクセスの特徴を活かし、OSの持つキャッシュ制御よりも高度なキャッシュ制御を行います。
(2)-2大量のトランザクションでも安定した動作
PowerGres Plusは、ディスクへの書き込みを自動的に最適なタイミングで行います。このため、トランザクションの量が増加しても、安定したレスポンスを提供することができます。
PowerGres Plusでは、Setupのときに自動設定した使用メモリ領域をAdministratorでシステム全体として最適な量に変えることができます。
図3: PowerGres Plus のアーキテクチャ
メモリチューニングのポイントは、システム全体のバランスを考慮して、適切なサイズのデータベースバッファを確保することです。
データベースバッファを大きくすることで処理の効率が高まり、性能が向上します。ただし、大きくしすぎると同時に動作しているプログラムでメモリが不足し、ハードディスクへのスワップアウトが発生します。
メモリチューニングを行うにはまず、実際のメモリがどのように使用されているかを見る必要があります。それには以下の2つのポイントがあります。
topコマンドや、freeコマンドの実行結果確認し、システムのメモリ使用状況を確認します。topコマンドや、freeコマンドは標準でインストールされています。
ただし、ここで注意が必要なのは、フリーメモリが100メガバイトと表示されたからといって、必ずしも100メガバイト増やせないということです。
OSに対して、512メガバイトの領域の確保を要求しても、実際に使用している量しか表示されないため、本当に増やしてよいかはまだわかりません。
ポイント1の情報に加え”ps”コマンドを使用して、PowerGres Plusが確保したメモリをどれだけ使用しているかを確認します。
これもポイント1と同様に実際に使用しているメモリしか表示されませんので注意が必要です。
“ps” コマンドでプロセスのサイズを表示するには以下のように入力します。
ps -xl –sort -vsize
これで表示される”edmf_base2″というプロセスが実際にメモリを使用するプロセスです。
実際の例を見ながらメモリチューニングの効果を紹介します。
図4は、チューニング前の環境(データベースバッファの値は512メガバイト)で、pgbenchを使って性能を測定し、使用メモリの状態を表示した画面です。画面は”top”コマンドで表示しています。
図4: チューニング前のメモリ使用状況
psコマンドで、状況を表示すると”edmf_base2″では、ほぼ512メガバイトのメモリを使用している場合がありました。そこで、512メガバイトから使用メモリを少しずつ増やして測定したところ、640メガバイトで一番良い結果が得られました。
図5: データベースバッファのサイズと性能の関係
測定の結果、データベースバッファを640メガバイトに設定した時、最も高い性能を検出しました。
これはチューニング前と比べると、約1.3倍強の性能向上となります。
今回は、新たにメモリを購入することなく、PowerGres Plusのメモリ設定を変更するだけで、性能が向上した例を紹介しました。
PowerGres Plusは、GUIのメニューから簡単にデータベースのセットアップを行うことができ、初期設定のままでも十分な性能を発揮するように設計されています。さらに、きめ細かい設定を行うことでシステムの能力を最大限に引き出すことが可能です。
余談ですが、誤って使用メモリを実装メモリと同じ、1ギガバイトに設定したところ、他のアプリケーションや、OSが使用するメモリとのバランスがとれず、システム全体のバランスが悪くなってしまいました。
次回は、データベースを高速に生成するPowerGres Plus独自の「高速コピー」について紹介します。
参考
OS RedHat Enterprise Linux ES(V3.0 for x86)
CPU Pentium Xeon 1.8GHz×1個
メモリ 1GB
PowerGres Plus V2.0
データベーススペースサイズ 10GB
スケーリングファクタ : 40(400万件)
クライアント数 : 1、2、4、8、16、32
トランザクション数 : 100