レベル: 中級 Takashi Yamamura (TKSY@jp.ibm.com), IT Specialist, 日本アイ・ビー・エム システムズ・エンジニアリング株式会社
2009年 01月 23日 この記事では、DB2のオートノミック・コンピューティング機能の一つであるセルフチューニング・メモリーについて説明します。この記事は、DB2 V9.5 for Linux, Unix, Windowsを前提としています。
はじめに
データベース・システムのパフォーマンスを最適化するためには、バッファープールやその他のメモリ・サイズをチューニングすることが必要です。チューニングは、パフォーマンスを測定し、よりよい資源の配分に関する予測を立て、構成を変更し、その効果を判定するためにさらにパフォーマンスを測定する手間のかかる作業です。思う結果が得られなければ、さらに構成を変更し、効果を測定することの繰り返しとなります。チューニング作業は、このようにスキルと手間のかかる作業です。さらに、データやトランザクションの増加に応じて最適な状態を保つためにはパフォーマンスを常時監視し、それに随時対応していくことが必要となります。よくチューニングされたシステムであっても、手作業では急激なワークロードの変化に応じて、その都度構成を変更することは困難です。
DB2のセルフチューニング・メモリー(Self Tuning Memory: STMM)機能は、メモリ・チューニング作業を自動的に行う機能です。これにより、データベース管理者はチューニング作業から解放され、スキルの高いデータベース管理者がいなくても、良好なパフォーマンスを維持できるようになります。システム負荷の変動に対しても、動的にこれに対応し、パフォーマンスを最適化してくれます。
この記事では、STMMの機能について解説します。
なお、STMMはDB2 V9.1から提供されている機能ですが、この記事はV9.5に基づいています。
DB2のメモリ・モデル
STMMは、DB2の自動メモリ・チューニング機能です。
STMMの詳細を見る前に、まず、DB2のメモリ構成を説明します。
DB2 9.5のメモリ・モデルは、図1のようになっています。メモリの領域は、インスタンス単位に割り振られるデータベース・マネジーャー共用メモリと、データベース単位に割り振られ、データベースの作業域となるデータベース・グローバル・メモリ(データベース共用メモリ)、同じくデータベース単位に割り振られアプリケーションが使用するアプリケーション・グローバル・メモリで成り立っています。
一つのデータベース共用メモリに割り振られるメモリの総量は、DATABASE_MEMORY DB構成パラメータ、アプリケーション・グローバル・メモリの最大量はAPPL_MEMORY DB構成パラメータによって決定されています。一つのデータベース・パーティションに割り振ることのできるメモリの最大量は、INSTANCE_MEMORY DBM構成パラメータで決定されます。
図1 DB2メモリ・モデル
データベース共用メモリの内部は、図2の構成になっています。
図2 データベース共用メモリ
四角で表されたものがメモリ領域、括弧内に書かれているのは、その領域のサイズを決定するDB構成パラメータです。(四角の大きさは、メモリ・サイズとは関係ありません。)
STMMの概要
STMMを使用すると、ワークロードに応じて、ソート・ヒープ、ロック・リスト、パッケージ・キャッシュの構成パラメータの値およびバッファープールのサイズを調整します。図3のように、必要に応じてOSからメモリを獲得したり、反対にメモリ領域を縮小してOSにメモリを返却したりします。また、データベース共用メモリ内の領域間でメモリの交換を行なってメモリ・サイズを調整します。
図3 STMMを使用した場合のメモリの動き
STMMによるメモリ・サイズの調節は、あるインターバルごとに行われます。
図4、図5は、インターバルごとのSTMMによるメモリ増減の動きを示したものです。
STMMは、スリープ状態から起動すると、ヒープやバッファープールなどのメモリ領域がメモリを必要としているかどうか判断します。メモリが不足している場合、OSからメモリを獲得可能かどうかチェックし、可能であれば、メモリを獲得して不足している領域に割り当てます。OSからのメモリ獲得が不可能と判断された場合には、他のメモリ領域でメモリ解放可能なものがあるかどうかチェックし、解放可能な領域があれば、そこからメモリを獲得して、不足している領域に割り当てます。
逆にメモリが余っていると判断された場合には、メモリをOSに返却可能であれば返却します。STMMは、最適化する必要のあるメモリ領域がなくなるまでこれを繰り返し、最後にチューニング・インターバルを決定し、スリープします。
図4 STMMによるメモリ増加
図5 STMMによるメモリの減少
インターバルは、ワークロードの変動に応じてDB2が判断し、30秒から10分の間で決定されます。
STMMの設定
それでは、STMMを使用するための設定方法を説明します。
STMMを有効にする構成パラメータ/SQL
STMMを有効にするDB構成パラメータおよびSQLは表1のとおりです。
STMMの全体は、SELF_TUNING_MEM DB構成パラメータによって起動/停止されます。SELF_TUNING_MEM=ON(デフォルト)で、STMMは起動状態となります。
STMMが有効に稼働するためには、STMMが制御できるメモリ領域が二つ以上あることが必要です。各領域がSTMMの制御対象になるかどうかは、領域毎の構成パラメータで決定されます。たとえば、パッケージ・キャッシュであれば、PCKCACHE DB構成パラメータがAUTOMATOCとすると、STMMで制御されるようになります。
バッファープール・サイズをSTMMで制御するためには、create bufferpoolまたはalterbufferpool SQLステートメントで、SIZE nnn AUTOMATICを指定します。create bufferpoolでnnnを指定した場合は、nnnサイズでバッファープールを作成してSTMMで制御し、省略した場合はデフォルトサイズ(1000ページ)で作成してSTMMで制御します。
表1 STMMに関連するDB構成パラメータおよびSQL
| 対象 | 構成パラメータ/SQL | STMMを有効にする値 | 考慮点 |
|---|
| STMM全体 | SELF_TUNING_MEM | ON | STMMが稼働するには、SELF_TUNING_MEM=ONかつ、STMMが制御する以下のメモリ領域の2つ以上必要。
OFFにすると、STMMは停止。 |
|---|
| データベース共用メモリ | DATABASE_MEMORY | AUTOMATIC 数値 | AUTOMATICの場合は、DATABASE_MEMORYサイズが増減の対象。
SELF_TUNING_MEM=ONで、DATABASE_MEMORYに数値が設定されていると、数値の範囲内でチューニングされる。 |
|---|
| ロック・リスト | LOCKLIST
MAXLOCKS | AUTOMATIC | STMMのチューニング対象とするためには、LOCKLISTとMAXLOCKSを両方ONにする。
数値を設定すると、サイズが固定される。 |
|---|
| パッケージ・キャッシュ | PCKCACHESZ | AUTOMATIC | 数値を設定すると、サイズが固定される。 |
|---|
| ソート・ヒープ | SORTHEAP
SHEAPTHRES_SHR | AUTOMATIC
(SORTHEAPについては数値も可) | これに加え、SHEAPTHRES=0の設定が必要。
SHEAPTHRES_SHRをAUTOMATIC、SORTHEAPに数値を設定した場合は、SORTHEAPのみ自動チューニング。 |
|---|
| バッファープール | CREATE BUFFERPOOL
ALTER BUFFERPOOL | AUTOMATIC | create bufferpool BPNAME size n automaticにより、サイズnからチューニング開始。
nは省略可能。 |
|---|
構成パラメータについては、省略時にすべてSTMMが有効になるよう設定されています。
表1以外にSTMMに関連するパラメータとして、次の二つがあげられます。
- INSTANCE_MEMORY
DB2 9.5において、AIX, Windows環境では、DATABASE_MEMORYに加えて、INSTANCE_MEMORY DBM構成パラメータもAUTOMATICに設定しておくことができます。INSTANCE_MEMORY=AUTOMATICの場合、STMMはOSの空きメモリをモニターしながら稼働し、ページングが発生しないようにします。INSTANCE_MEMORYに数値が設定されている場合は、DATABASE_MEMORYはINSTANCE_MEMORY内で制御されます。
- DB_MEM_THRES
DATABASE_MEMORYとして確保されているメモリのうち、未使用のものをどれだけ保持しておくかを決定します。デフォルトは10(%)です。このとき、DATABASE_MEMORYの 10% を超える量が未使用のとき, 未使用メモリを解放します。この値が0であれば、DATABASE_MEMORY内で、空きのメモリが発生した場合は、即時に解放します。この値を100にすると、DATABASE_MEMORYに空きがあっても、まったく解放しません。
STMMの設定手順
STMMを稼働させるためには、表1にあるSTMMを有効にする構成パラメータ/SQLを設定します。(DB2 9.5では、省略時にSTMMは起動しています。)
図6 構成変更手順例
STMM稼働状況の確認
STMMの稼働状況は、構成パラメータや、ログ、コマンドを使用して確認できます。
まず、現在の設定状況については、構成パラメータを確認します。
get db cfgコマンドshow detailオプションを使用すると、設定値のON/OFF, AUTOMATICかどうかだけでなく、AUTOMATICに設定されている構成パラメータの現在の値を知ることができます。
図7 構成パラメータの確認例
図7の例では、横幅の関係で遅延値は省略しています。
バッファープールのサイズは、snapshotや、db2pdコマンドでも確認できますが、SYSIBMADM.SNAPBP_PART管理ビューを使用するのが便利です。
図8 SNAPBP_PART管理ビューによるバッファープール・サイズの確認例
STMMによるメモリ調整の情報は、db2diag.logに記録されます。
メモリ調整が行われた時刻、対象パラメータ、変更前後の値などは、db2diag.logで知ることができます。下の図は、db2diag.logの出力例です。
図9 db2diag.logのSTMM活動出力例
さらに、詳しい情報はSTMMログに書かれています。STMMログは、以下のパスにあります。(xはログの番号)
Unix: インスタンス・ホーム・ディレクトリ/sqllib/db2dump/stmmlog/stmm.x.log
Windows: DB2INSTPROFディレクトリ\stmmlog\stmm.x.log
STMMログおよび、その解析についてもっと知りたい場合は、参考文献の「DB2セルフチューニング・メモリー・マネージャー (STMM) のログ・パーサー」を参照してください。
STMMでのメモリ調整例
STMMを使用して実際にどのようにメモリが調整されるかの例をご紹介します。
以下の例は、社内テスト環境で、オンライントランザクション型のワークロードを発生させ、メモリ使用量の推移を測定したものです。負荷に応じてバッファープールを拡大する様子が見られます。また、OSのフリーメモリが逼迫した状態では、DATABASE_MEMORY内でメモリを交換し、DATABASE_MEMORY全体の拡大を抑えています。
図10 STMMによるメモリ調整例
おわりに
この記事では、DB2のチューニングを自動化するSTMMについてご紹介しました。STMMは、DB2のメモリを自動的にチューニングすることにより、データベース管理者の負担を軽減します。DB2 V9.1以降であれば、是非使用して効果を確認してください。詳しくは、以下の参考文献をご覧ください。
参考文献
著者について  | |  | Takashi Yamamura, IT Specialist, 日本アイ・ビー・エム システムズ・エンジニアリング株式会社 |
記事の評価
|