2012年5月4日金曜日

DB2 V10.1 ストレージグループを使ってみる

DB2 V10.1の新機能 Multi-Temperature Storageなるものを使ってみたので、
ログを残しておく。
※朝4時ごろ半分寝ながらやったので、ディレクトリやテーブルの名前付けが
 適当すぎる。(´;ω;`)


今回の検証環境
SLES11 SP2 HDD4本、CPU2、メモリ5GB
HDDの構成は、以下。
 100MB/sの読み取り速度も持つHDD1本
 550MB/sの読み取り速度を持つHDDを3本でRAID0構成


100MB/sを/db2_1でext3設定し、550MB/sを/db2でext3設定した。





以下の手順はdb2インスタンスユーザで実施した。


まず、検証するDBを作成する。
CREATE DB時に自動Storageの指定で/db2_1を設定すると、デフォルトのStorage Groupとして、IBMSTOGROUPと言う名前で100MB/sのHDDが割り当てられている。


 CREATE DATABASE MYDB ON /db2_1


そこに、HIGHENDと言う名前でRAID0のDISKを追加する。


 CREATE STOGROUP HIGHEND ON '/db2' OVERHEAD 0.75 DEVICEREADRATE 550 
※OVERHEADは、コントローラー・オーバーヘッドとディスク・シークと待ち時間 (ミリ秒単位)、DEVICEREADRATEは、デバイスの読み取り転送速度 (メガバイト/秒単位) 


設定内容を確認する。
V10.1からdb2pdコマンドが拡張されて、storagegroupsオプションが付いている。


db2inst1@linux-d9mi:~> db2pd -storagegroups -db mydb

Database Member 0 -- Database MYDB -- Active -- Up 0 days 01:03:57 -- Date 2012-05-04 01:40:51
Storage Group Configuration:
Address            SGID  Default  DataTag    Name
0x00007FAA252FD080 0     Yes      0          IBMSTOGROUP
0x00007FAA364ED540 1     No       0          HIGHEND
Storage Group Statistics:
Address            SGID  State      Numpaths  NumDropPen
0x00007FAA252FD080 0     0x00000000 1         0         
0x00007FAA364ED540 1     0x00000000 1         0         
Storage Group Paths: 
Address            SGID  PathID    PathState    PathName
0x00007FAA252FD1A0 0     0         InUse        /db2_1
0x00007FAA364EF060 1     1024      InUse        /db2


※以下でも、StorageGroup名と設定pathが取得可能。
 ちょっとSQLが長くて覚えられない(´;ω;`)

db2 "SELECT VARCHAR(STORAGE_GROUP_NAME, 30) AS STOGROUP, VARCHAR(DB_STORAGE_PATH, 40) AS STORAGE_PATH FROM TABLE(ADMIN_GET_STORAGE_PATHS('',-1)) AS T"


SYSCAT.STOGROUPSにて設定したDISK速度などを確認。
db2 "select * from SYSCAT.STOGROUPS"


IBMSTOGROUP  0 SYSIBM   2012-05-04-00.26.30.324142 Y
 +6.72500000000000E+000   +1.00000000000000E+002  -   -  0 2 -   
HIGHEND  1 DB2INST1   2012-05-04-00.44.27.057572 N +7.50000000000000E-001   +5.50000000000000E+002   -   -  0  2 -
  2 レコードが選択されました。


次に、設定したStorageGroupにTABLESPACEを割り当てる。
 test_db2_1と言う名のテーブルスペースをIBMSTOGROUP(100MB/s)に設定
 test_db2と言う名のテーブルスペースをHIGHEND(550MB/s)に設定


db2 "CREATE TABLESPACE test_db2_1 USING STOGROUP IBMSTOGROUP"
DB20000I  SQL コマンドが正常に完了しました。
db2 "CREATE TABLESPACE test_db2 USING STOGROUP HIGHEND"
DB20000I  SQL コマンドが正常に完了しました。


テーブルスペースが作成されたことを確認する。
db2 "LIST TABLESPACES"


 表スペース ID                        = 4
 名前                                 = TEST_DB2_1
 タイプ                               = データベース管理スペース
 内容                                 = すべての永続データ。 LARGE 表スペース。
 状態                                 = 0x0000
   詳しい説明:
     正常
 表スペース ID                        = 5
 名前                                 = TEST_DB2
 タイプ                               = データベース管理スペース
 内容                                 = すべての永続データ。 LARGE 表スペース。
 状態                                 = 0x0000
   詳しい説明:
     正常


テーブルスペースとStorageGroupの紐付きを確認する。

db2 "select * from SYSCAT.TABLESPACES"
TEST_DB2_1 DB2INST1  U 2012-05-04-01.05.21.456056   4 D  L   32   -1   -1.00000000000000E+000   -1.00000000000000E+000   -     -  4096 IBMDEFAULTGROUP  1 Y   IBMDEFAULTGROUP                                                                DB2INST1  -1 IBMSTOGROUP  0192        -1 -                                                                                                                                                                                                                                                             


TEST_DB2  DB2INST1   U  2012-05-04-01.05.44.778764   5 D  L 32  -1   -1.00000000000000E+000   -1.00000000000000E+000   -  -  4096 IBMDEFAULTGROUP  1 Y  IBMDEFAULTGROUP   DB2INST1  -1 HIGHEND                                                                                                                                    1   32        -1 -                                                                                                                                                                                                                                                             



テーブルを作成し、テーブルスペースに割り当てる。
TEST_1をTEST_DB2_1テーブルスペースに設定
db2 "CREATE TABLE TEST_1 (no CHAR(10)  NOT NULL,DEPTNAME VARCHAR(36) NOT NULL,PRIMARY KEY(no)) IN TEST_DB2_1"


TEST_0をTEST_DB2テーブルスペースに設定
db2 "CREATE TABLE TEST _0(no CHAR(10)  NOT NULL,DEPTNAME VARCHAR(36) NOT NULL,PRIMARY KEY(no)) IN TEST_DB2"




ここまででテスト環境構築完了。
では、実際にテーブルスペースを別のStorageGroupに移動してみる。
測定にあたって、STMMはOFF、自動保守もOFFにし、勝手にメモリチューニングと統計情報、更新を行わないように設定する。

test_1テーブルに適当にデータをINSERTするSQLをdb2batchで実行し、実行時間を計測する。
db2batch -d mydb -f test.sql
* 合計時間:                   0.126565 秒
* 最小時間:                   0.009531 秒
* 最大時間:                   0.032241 秒
* 算術平均時間:               0.012657 秒
* 幾何平均時間:               0.011628 秒

IBMSTOGROUPに所属するTEST_DB2_1テーブルスペースをHIGHENDに変更する。
db2 "ALTER TABLESPACE TEST_DB2_1 USING STOGROUP HIGHEND"

HIGHENDに変わっていることを確認する。
db2 "select * from SYSCAT.TABLESPACES"
TEST_DB2_1   DB2INST1  U  2012-05-04-01.05.21.456056   4 D   L  32   -1   -1.00000000000000E+000   -1.00000000000000E+000  -   - 4096 IBMDEFAULTGROUP   1 Y  IBMDEFAULTGROUP  DB2INST1                                                                                                                              -1 HIGHEND   1 192        -1 -                                                                                                                                                                                                                                                             

同じSQLを実行。
db2batch -d mydb -f test.sql
* 合計時間:                   0.107423 秒
* 最小時間:                   0.008145 秒
* 最大時間:                   0.020540 秒
* 算術平均時間:               0.010742 秒
* 幾何平均時間:               0.010392 秒

お、ちょっと早くなったな。

元にもどす。
HIGHENDに所属するTEST_DB2_1テーブルスペースをIBMSTOGROUPに変更する。
db2 "ALTER TABLESPACE TEST_DB2_1 USING STOGROUP IBMSTOGROUP"

同じSQLを実行。
db2batch -d mydb -f test.sql
* 合計時間:                   0.129309 秒
* 最小時間:                   0.010063 秒
* 最大時間:                   0.032279 秒
* 算術平均時間:               0.012931 秒
* 幾何平均時間:               0.011908 秒

最初と同じぐらいになった。

(`・ω・´)まとめ!
パーティション表とか使うときに効果があると思う。
よくアクセスする当月のテーブルスペースを早いStorageGroupに設定し、
月が変わったら、遅いStorageGroupに移動させるなど、効果が期待できそうですね。
コマンドも、ALTER TABLESPACEのオプションとしてUSING STOGROUP xxxxxxでOKなので、簡単です。

0 件のコメント:

コメントを投稿