Db2のセルフチューニングメモリー機能の設定方法について調べてみた

#セルフチューニングメモリー機能(STMM)とは？
DBMSのパフォーマンスを維持するにあたり、メモリー管理は重要です。
メモリーの使用量を監視し、問題があればチューニングを実施するの繰り返しであるメモリー管理は非常に手間もかかる上に、
高度なデータベース管理者のノウハウも必要になる場合もあります。
そんなメモリー管理を自動で行う機能が多くのDBMSで提供されており、
Db2で提供されている自動メモリー管理機能ををセルフチューニングメモリー機能（STMM機能）と言います。
以下からセルフチューニングメモリー機能はSTMMと記載します。

#STMM機能の管理対象メモリーについて
Db2のSTMM機能では以下のメモリーのチューニングを自動で行うことが可能です。
・データベースメモリー
・ロックリスト
・パッケージキャッシュ
・ソートヒープ
・バッファープール


#設定方法
###1.STMM機能をONにする
STMM機能を使用するデータベースにアクセスします
>db2 connect to DB名

データベース構成パラメーター self_tuning_memの値を確認します。
>db2 get db cfg

またはパイプを使用しgrepすることで出力を絞ることも可能です
>db2 get db cfg | grep SELF_TUNING_MEM 

```ruby:self_tuning_memの値確認
[db2inst1@db2-2 ~]$ db2 get db cfg | grep SELF_TUNING_MEM
 Self tuning memory                    (SELF_TUNING_MEM) = ON
```


OFFに設定されている場合はONに設定を変更します。
デフォルトではONに設定されています。
>db2 update db cfg using  SELF_TUNING_MEM ON

```ruby:self_tuning_memの値変更
[db2inst1@db2-2 ~]$ db2 update db cfg using  SELF_TUNING_MEM ON
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
```

[self_tuning_mem- セルフチューニング・メモリー構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0021626.html)

###2.各メモリーのサイズ設定値をAUTOMATICに設定
バッファープール以外のメモリーに関しては、STMMで管理するメモリー領域のデータベース構成パラメーターの値をAUTOMATICに変更します。
以下に各メモリー領域のSTMM管理を有効にするパラメーターを記載します。

**・データベースメモリー(DATABASE_MEMORY)**
>db2 update db cfg using DATABASE_MEMORY AUTOMATIC

```ruby:DATABASE_MEMORYの変更
[db2inst1@db2-2 ~]$ db2 update db cfg using DATABASE_MEMORY AUTOMATIC
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
```

[database_memory - データベース共有メモリー・サイズ構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0006017.html)

**・ロックリスト(LOCKLISTとMAXLOCKS 両方の設定が必要)**
>db2 update db cfg using LOCKLIST AUTOMATIC
>db2 update db cfg using MAXLOCKS AUTOMATIC

```ruby:ロックリストの変更
[db2inst1@db2-2 ~]$ db2 update db cfg using LOCKLIST AUTOMATIC
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
[db2inst1@db2-2 ~]$ db2 update db cfg using MAXLOCKS AUTOMATIC
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
```

[locklist - ロック・リスト用最大ストレージ構成パラメーター]
(https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0000267.html)
[maxlocks - エスカレーション前のロック・リストの最大パーセント構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0000268.html)

**・パッケージキャッシュ**
>db2 update db cfg using PCKCACHESZ AUTOMATIC


```ruby:パッケージキャッシュの変更
[db2inst1@db2-2 ~]$ db2 update db cfg using PCKCACHESZ AUTOMATIC
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
```

[pckcachesz - パッケージ・キャッシュ・サイズ構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0000266.html)

**・ソートヒープ**
>db2 update db cfg using SORTHEAP AUTOMATIC
>db2 update db cfg using SHEAPTHRES_SHR AUTOMATIC

```ruby:ソートヒープの変更
[db2inst1@db2-2 ~]$ db2 update db cfg using SORTHEAP AUTOMATIC
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
[db2inst1@db2-2 ~]$ db2 update db cfg using SHEAPTHRES_SHR AUTOMATIC
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
```

[sortheap - ソート・ヒープ・サイズ構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0000259.html)
[sheapthres_shr - 共有ソートのソート・ヒープのしきい値構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0006014.html)

**・バッファープール**
STMM機能でバッファープールを管理する場合は、データベースパラメーターを変更するのではなくcreate bufferpoolコマンドまたはalter bufferpoolコマンドにて、特定のバッファープール名を指定し、SIZEオプションにてAUTOMATICを設定します。
>db2 CREATE BUFFERPOOL バッファープール名 SIZE 2000 AUTOMATIC
>db2 ALTER BUFFERPOOL バッファープール名 SIZE 1500 AUTOMATIC

(上)新規作成時　2000は初期値　省略可(省略時は1000)
(下)既存バッファープールの変更時 1500は初期値　省略可(省略時は1000)

```ruby:バッファープールの作成
[db2inst1@db2-2 ~]$ db2 CREATE BUFFERPOOL bufferpool1 SIZE 2000 AUTOMATIC
DB20000I  The SQL command completed successfully.
[db2inst1@db2-2 ~]$ db2 ALTER BUFFERPOOL IBMDEFAULTBP SIZE 1500 AUTOMATIC
DB20000I  The SQL command completed successfully.
```
[CREATE BUFFERPOOL ステートメント]
(https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000912.html)
[ALTER BUFFERPOOL ステートメント]
(https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000885.html)



#STMM機能を設定する上での注意事項
STMMが有効に稼働するためには、STMMが制御できるメモリ領域が二つ以上あることが必要です。
STMM機能がONに設定されている場合でも、１つのメモリー領域のみAUTOMATIC設定がされている場合はSTMM機能は有効化されません。


#参考リンク
[第4回 セルフチューニング・メモリー]
(https://www.ibm.com/developerworks/jp/data/library/dataserver/j-d_db2maintenance04/index.html)