ログを残しておく。
※朝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 件のコメント:
コメントを投稿