How To
Summary
Db2 LUW (DB2 for Linux, UNIX and Windows)を初めてご利用される方に、Db2運用の基本的な概念をご理解いただけるよう執筆された記事です。
ご利用のDb2バージョンに依存しない内容となっています。入門、初心者向けの読み物としてご活用いただければ幸いです。
こちらの記事ではDb2のチューニングを自動化するSTMMについて解説します。
Objective
はじめに
データベース・システムのパフォーマンスを最適化するためには、バッファープールやその他のメモリ・サイズをチューニングすることが必要です。チューニングは、パフォーマンスを測定し、よりよい資源の配分に関する予測を立て、構成を変更し、その効果を判定するためにさらにパフォーマンスを測定する手間のかかる作業です。思う結果が得られなければ、さらに構成を変更し、効果を測定することの繰り返しとなります。チューニング作業は、このようにスキルと手間のかかる作業です。さらに、データやトランザクションの増加に応じて最適な状態を保つためにはパフォーマンスを常時監視し、それに随時対応していくことが必要となります。よくチューニングされたシステムであっても、手作業では急激なワークロードの変化に応じて、その都度構成を変更することは困難です。
Db2のセルフチューニング・メモリー(Self Tuning Memory: STMM)機能は、メモリ・チューニング作業を自動的に行う機能です。これにより、データベース管理者はチューニング作業から解放され、スキルの高いデータベース管理者がいなくても、良好なパフォーマンスを維持できるようになります。システム負荷の変動に対しても、動的にこれに対応し、パフォーマンスを最適化してくれます。
この記事では、STMMの機能について解説します。
なお、STMMはDb2 V9.1から提供されている機能ですが、この記事はV9.5に基づいています。
Db2のメモリ・モデル
STMMは、Db2の自動メモリ・チューニング機能です。
STMMの詳細を見る前に、まず、Db2のメモリ構成を説明します。
Db2 9.5のメモリ・モデルは、図のようになっています。メモリの領域は、インスタンス単位に割り振られるデータベース・マネージャー共用メモリと、データ ベース単位に割り振られ、データベースの作業域となるデータベース・グローバル・メモリ(データベース共用メモリ)、同じくデータベース単位に割り振られ アプリケーションが使用するアプリケーション・グローバル・メモリで成り立っています。
一つのデータベース共用メモリに割り振られるメモリの総量は、DATABASE_MEMORY DB構成パラメータ、アプリケーション・グローバル・メモリの最大量はAPPL_MEMORY DB構成パラメータによって決定されています。一つのデータベース・パーティションに割り振ることのできるメモリの最大量は、 INSTANCE_MEMORY DBM構成パラメータで決定されます。
データベース共用メモリの内部は、下の図の構成になっています。
四角で表されたものがメモリ領域、括弧内に書かれているのは、その領域のサイズを決定するDB構成パラメータです。(四角の大きさは、メモリ・サイズとは関係ありません。)
STMMの概要
STMMを使用すると、ワークロードに応じて、ソート・ヒープ、ロック・リスト、パッケージ・キャッシュの構成パラメータの値およびバッファープールのサイズを調整します。図のように、必要に応じてOSからメモリを獲得したり、反対にメモリ領域を縮小してOSにメモリを返却したりします。また、データベース共用メモリ内の領域間でメモリの交換を行なってメモリ・サイズを調整します。
STMMによるメモリ・サイズの調節は、あるインターバルごとに行われます。
下の図は、インターバルごとのSTMMによるメモリ増減の動きを示したものです。
STMMは、スリープ状態から起動すると、ヒープやバッファープールなどのメモリ領域がメモリを必要としているかどうか判断します。メモリが不足している場合、OSからメモリを獲得可能かどうかチェックし、可能であれば、メモリを獲得して不足している領域に割り当てます。OSからのメモリ獲得が不可能と判断された場合には、他のメモリ領域でメモリ解放可能なものがあるかどうかチェックし、解放可能な領域があれば、そこからメモリを獲得して、不足している領域に割り当てます。
逆にメモリが余っていると判断された場合には、メモリをOSに返却可能であれば返却します。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構成パラメータがAUTOMATICとすると、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 | これに加え、SHEAPTHRES=0 の設定が必要。SHEAPTHRES_SHR が AUTOMATIC に更新されると、SORTHEAP パラメーターも AUTOMATIC 設定に更新されます。 |
バッファープール | CREATE BUFFERPOOL ALTER BUFFERPOOL |
AUTOMATIC | create bufferpool BPNAME size n automaticにより、サイズnからチューニング開始。nは省略可能。 |
構成パラメータについては、省略時にすべてSTMMが有効になるよう設定されています。
表1以外にSTMMに関連するパラメータとして、次の二つがあげられます。
INSTANCE_MEMORY
: INSTANCE_MEMORY=AUTOMATICの場合、STMMはOSの空きメモリをモニターしながら稼働し、ページングが発生しないようにします。INSTANCE_MEMORYに数値が設定されている場合は、 DATABASE_MEMORYはINSTANCE_MEMORY内で制御されます。DB_MEM_THRES
: DATABASE_MEMORYとして確保されているメモリのうち、未使用のものをどれだけ保持しておくかを決定します。Db2 9.5のデフォルトは10(%)です。このとき、DATABASE_MEMORYの 10% を超える量が未使用のとき, 未使用メモリを解放します。この値が0であれば、DATABASE_MEMORY内で、空きのメモリが発生した場合は、即時に解放します。この値を100 にすると、DATABASE_MEMORYに空きがあっても、まったく解放しません。
(補足:Db2 10.5以降のデフォルトは100で、一度確保したメモリーは即時に再利用可能になるよう保持しつづける構成となっています)
STMMの設定手順
STMMを稼働させるためには、表1にあるSTMMを有効にする構成パラメータ/SQLを設定します。(Db2 9.5では、省略時にSTMMは起動しています。)
STMM稼働状況の確認
STMMの稼働状況は、構成パラメータや、ログ、コマンドを使用して確認できます。
まず、現在の設定状況については、構成パラメータを確認します。
get db cfgコマンドshow detailオプションを使用すると、設定値のON/OFF, AUTOMATICかどうかだけでなく、AUTOMATICに設定されている構成パラメータの現在の値を知ることができます。
上の図の例では、横幅の関係で遅延値は省略しています。
バッファープールのサイズは、snapshotや、db2pdコマンドでも確認できますが、SYSIBMADM.SNAPBP_PART管理ビューを使用するのが便利です。
STMMによるメモリ調整の情報は、db2diag.logに記録されます。
メモリ調整が行われた時刻、対象パラメータ、変更前後の値などは、db2diag.logで知ることができます。下の図は、db2diag.logの出力例です。
さらに、詳しい情報はSTMMログに書かれています。STMMログは、以下のパスにあります。(xはログの番号)
- Unix:
インスタンス・ホーム・ディレクトリ/sqllib/db2dump/stmmlog/stmm.x.log
- Windows:
DB2INSTPROFディレクトリ\stmmlog\stmm.x.log
STMMでのメモリ調整例
STMMを使用して実際にどのようにメモリが調整されるかの例をご紹介します。
以下の例は、社内テスト環境で、オンライントランザクション型のワークロードを発生させ、メモリ使用量の推移を測定したものです。負荷に応じてバッファープールを拡大する様子が見られます。また、OSのフリーメモリが逼迫した状態では、DATABASE_MEMORY内でメモリを交換し、 DATABASE_MEMORY全体の拡大を抑えています。
おわりに
この記事では、Db2のチューニングを自動化するSTMMについてご紹介しました。STMMは、Db2のメモリを自動的にチューニングすることにより、データベース管理者の負担を軽減します。是非使用して効果を確認してください。
著者 Takashi Yamamura
シリーズ一覧
簡単! Db2の運用: セルフチューニング・メモリー
簡単! Db2の運用: ログと回復管理
お断り:
Document Location
Worldwide
Was this topic helpful?
Document Information
Modified date:
17 April 2024
UID
ibm17142171