...

[Lab 2] DB2 の

by user

on
Category: Documents
131

views

Report

Comments

Transcript

[Lab 2] DB2 の
[Lab 2]
DB2 の運用管理
2009 年 12 月
日本アイ
日本アイ・
アイ・ビー・
ビー・エム株式会社
エム株式会社
Contents
Contents
CONTENTS............................................................................................................2
CONTENTS
1.
はじめに .........................................................................................................3
2.
データの
データの投入と
投入と抽出 ........................................................................................4
2.1
2.2
2.3
2.4
2.5
3.
統計情報の
統計情報の収集と
収集と再編成 ..............................................................................11
3.1
3.2
4.
ハンズオン用データベースの作成...............................................................4
表スペース、表、索引の作成 ......................................................................5
データの投入.............................................................................................7
投入したデータの EXPORT.........................................................................8
Cursor LOAD によるデータのコピー ............................................................9
統計情報の収集 ......................................................................................11
表の再編成 .............................................................................................12
データベースの
データベースのモニタリング ...........................................................................15
4.1 負荷ツールの起動 ...................................................................................15
4.2 db2top によるモニタリング ........................................................................15
4.3 Snapshot によるモニタリング ....................................................................18
4.3.1
手動による Snapshot の取得................................................................18
4.3.2
スクリプトによる Snapshot の取得.........................................................20
5.
バックアップと
バックアップとリストア ....................................................................................22
5.1
5.2
5.3
アーカイブ・ロギングへの変更 ..................................................................22
データベースのバックアップ ......................................................................24
データベースのリストア ............................................................................24
2
1.
はじめに
このハンズオンでは、ベンチマークツール用のデータベース構築を通じて下記のタスクを実践
します。
データの投入・抽出
統計情報の収集と再編成
データベースのモニタリング
データベースのバックアップ・リストア
このハンズオンは、db2inst1 ユーザーで行います。下記のコマンドを実行して
db2inst1 ユーザーにスイッチし、DB2 インスタンスを起動してください。パスワードは
「db2inst1」です。
su – db2inst1
db2start
3
2.
データの
データの投入と
投入と抽出
このセクションでは、ハンズオン用データベースの作成と、データベース/オブジェクトの作成、
データの投入を行います。データの投入には LOAD ユーティリティを使用します。
2.1
ハンズオン用
ハンズオン用データベースの
データベースの作成
_データベース作成
下記のコマンドでハンズオン用のデータベースを作成します。
db2 create database lab2 on /db2data1, /db2data2 dbpath on /db2
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 create database lab2 on
/db2data1, /db2data2 dbpath on /db2
DB20000I CREATE DATABASE コマンドが正常に完了しました。
このコマンド実行例では、ON キーワードに/db2data1、/db2data2 の 2 つのディレクトリを指定
し、DBPATH ON キーワードに/db2 を指定しています。ON キーワードで指定された
/db2data1,/db2data2 は自動ストレージパスとして登録され、この 2 つのディレクトリ配下に表
スペースが作成されることになります。
本番システムではディレクトリではなく、独立した物理ディスク上にファイルシステムを作成して
使用します。複数のディスク領域を自動ストレージパスとして使用する場合、それぞれの領域
が同等の性能となるように注意してください。性能の劣るディスク領域が含まれていた場合、全
体がそのディスク領域の性能に足並みをそろえることになります。
_作成したデータベースの確認
下記のコマンドで、データベースが作成されていることを確認してください。また、/db2data1,
/db2data2 ディレクトリを ls コマンドで参照すると、データベース用のファイルが作成されている
ことが確認できます。
db2 list db directory
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 list db directory
システム・データベース・ディレクトリー
<省略>
データベース別名
データベース名
ローカル・データベース・ディレクトリー
データベース・リリース・レベル
<省略>
=
=
=
=
4
LAB2
LAB2
/db2
d.00
2.2
表スペース、
スペース、表、索引の
索引の作成
_表スペースの作成
下記のコマンドを実行して、表スペースを作成します。
db2 connect to lab2
db2 create tablespace ts1
db2 create tablespace its1
このセクションで使用する LAB2 データベースでは自動ストレージを使用するため、表スペース
作成時には表スペース・コンテナを指定しません。コンテナ指定なしで CREATE TABLESPACE
を実行すると、/db2data1,/db2data2 配下に DB2 管理の表スペース・コンテナが作成されます。
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 connect to lab2
<省略>
db2inst1@db2V97onSLES10:/workshop/lab2> db2 create tablespace ts1
DB20000I SQL コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 create tablespace its1
DB20000I SQL コマンドが正常に完了しました。
_表スペースの確認
下記のコマンドを実行して、2 つの表スペースが正しく作成されていることを確認します。
db2 list tablespaces show detail
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 list tablespaces show detail
現在のデータベースの表スペース
<省略>
表スペース ID
= 3
名前
= TS1
タイプ
= データベース管理スペース
内容
= すべての永続データ。 LARGE 表スペース。
状態
= 0x0000
詳しい説明:
正常
合計ページ数
= 8192
使用できるページ数
= 8128
使用したページ
= 672
フリー・ページ
= 7456
最高水準点 (ページ)
= 672
ページ・サイズ (バイト)
= 4096
エクステント・サイズ (ページ)
= 32
プリフェッチ・サイズ (ページ)
= 64
コンテナー数
= 2
<省略>
5
_表の作成
下記のコマンドを実行して、表及び索引を作成します。表及び索引の DDL は/workshop/lab2
ディレクトリの「01.crt_tbl.ddl」ファイルに保管されています。このスクリプトの内容を確認後、下
記のようにして実行してください。
cat 01.crt_tbl.ddl
db2 -tvf 01.crt_tbl.ddl
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 -tvf 01.crt_tbl.ddl
connect to lab2
<省略>
CREATE TABLE warehouse ( w_id
INTEGER, w_name
w_street_1
VARCHAR(20), w_street_2
VARCHAR(20), w_city
w_state
CHAR(2), w_zip
CHAR(9), w_tax
DECIMAL(12,2)) in ts1 index in its1
DB20000I SQL コマンドが正常に完了しました。
VARCHAR(10),
VARCHAR(20),
DECIMAL(4,4), w_ytd
CREATE TABLE district ( d_id
INTEGER, d_w_id
INTEGER, d_name
VARCHAR(10), d_street_1
VARCHAR(20), d_street_2
VARCHAR(20), d_city
VARCHAR(20), d_state
CHAR(2), d_zip
CHAR(9), d_tax
DECIMAL(4,4), d_ytd
DECIMAL(12,2), d_next_o_id
INT ) in ts1 index in
its1
DB20000I SQL コマンドが正常に完了しました。
CREATE TABLE history ( h_c_id
INT, h_c_d_id
h_c_w_id INT, h_d_id
INT, h_w_id
DATE, h_amount
DECIMAL(6), h_data
index in its1
DB20000I SQL コマンドが正常に完了しました。
<省略>
INT,
INT, h_date
VARCHAR(24)) in ts1
_索引の作成
表と同様にして索引を作成します。
cat 02.crt_index.ddl
db2 -tvf 02.crt_index.ddl
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 -tvf 02.crt_index.ddl
connect to lab2
<省略>
CREATE UNIQUE INDEX iwarehouse ON warehouse(w_id) PCTFREE 10
DB20000I SQL コマンドが正常に完了しました。
CREATE UNIQUE INDEX idistrict ON district(d_w_id,d_id) CLUSTER PCTFREE 10
DB20000I SQL コマンドが正常に完了しました。
CREATE INDEX iorders1 ON orders(o_w_id,o_d_id,o_id) PCTFREE 10
DB20000I SQL コマンドが正常に完了しました。
<省略>
6
_作成済み DDL の確認
list tables コマンドを使用して、作成された表の一覧を確認します。全ての表が正常に作成され
た場合、9 エントリ出力されます。
db2 list tables
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 list tables
表/ビュー
------------------------------CUSTOMER
DISTRICT
HISTORY
ITEM
NEW_ORDER
ORDERS
ORDER_LINE
STOCK
WAREHOUSE
スキーマ
--------------DB2INST1
DB2INST1
DB2INST1
DB2INST1
DB2INST1
DB2INST1
DB2INST1
DB2INST1
DB2INST1
タイプ 作成時刻
----- -------------------------T
2009-08-11-05.29.13.449259
T
2009-08-11-05.29.13.159791
T
2009-08-11-05.29.13.230147
T
2009-08-11-05.29.13.508594
T
2009-08-11-05.29.13.338742
T
2009-08-11-05.29.13.305574
T
2009-08-11-05.29.13.395214
T
2009-08-11-05.29.13.474094
T
2009-08-11-05.29.12.562558
9 レコードが選択されました。
また、db2look コマンドを使用して、データベース内部にあるオブジェクトの DDL を作成可能で
す。オブジェクトの種別によって db2look に与えるオプションは異なります。代表的なオプション
を下記に記載します。
構成パラメーター、レジストリー変数
表・索引・ビュー等のデータベースオブジェクト
バッファープール、表スペース
権限情報
モジュール・PL/SQL オブジェクト
2.3
:db2look
:db2look
:db2look
:db2look
:db2look
–d
–d
–d
–d
–d
lab2
lab2
lab2
lab2
lab2
–f
–e
–l
–xd
–mod
データの
データの投入
前セクションで表及び索引を作成しました。このセクションでは、作成した表に対してデータの
投入を行います。データの投入は、下記のように LOAD ユーティリティを使用して、投入データ
と対象テーブルを指定して行います。
db2 load from ./data/warehouse.tbl of del replace into warehouse
7
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 load from ./data/customer.tbl of del replace into customer
SQL3109N ユーティリティーが、ファイル"/workshop/lab2/data/customer.tbl" からデータのロードを開始してい
ます。
<省略>
読み込まれた行数
スキップされた行数
ロードされた行数
拒否された行数
削除された行数
コミットされた行数
=
=
=
=
=
=
30000
0
30000
0
0
30000
前述の LOAD コマンドを参考に、下記の 5 テーブルに対して LOAD を実行してください。
ファイル名
テーブル名
./data/warehouse.tbl
./data/district.tbl
./data/customer.tbl
./data/stock.tbl
./data/item.tbl
warehouse
district
customer
stock
item
LOAD コマンドは/workshop/lab2 ディレクトリの「03.load.ddl」ファイルに保管されているため、ス
クリプトによる一括実行も可能です。
db2 –tvf 03.load.ddl
2.4
投入した
投入したデータ
したデータの
データの EXPORT
表に格納されたデータは EXPORT コマンドで抽出することができます。抽出対象のデータは
SQL で記述します。抽出条件の限定は SQL の WHERE 句で行います。
db2 "export to low_stock.del of del select * from stock where s_quantity <
20"
例えば上記のコマンドでは、STOCK 表から S_QUANTITY(在庫量)が 20 以下となっているレコ
ードのみを抽出します。
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "export to low_stock.del of del select * from
stock where s_quantity < 20"
SQL3104N エクスポート・ユーティリティーが、 ファイル
"low_stock.del" へのデータのエクスポートを開始しています。
SQL3105N
エクスポート・ユーティリティーが、"11063"行のエクスポートを完了しました。
エクスポートされた行数:
11063
8
2.5
Cursor LOAD によるデータ
によるデータの
データのコピー
このセクションでは、移動対象のデータを外部ファイルに蓄積せず、テーブルからテーブルへダ
イレクトに LOAD を行うことが可能な、Cursor LOAD の演習を行います。
_テーブルのコピー
下記のコマンドを使用して、CUSTOMER2 表を作成します。CREATE TABLE 文に「LIKE <表名
>」を指定する事で、指定した表と同じ構造の新しい表を作成することが可能です。ただし、索引
やパーティション構造、MDC の次元列などはコピーされません。今回の演習では索引を別途
追加します。
db2 create table customer2 like customer
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 create table customer2 like customer
DB20000I SQL コマンドが正常に完了しました。
_db2look コマンドによる DDL の確認
db2look を使用して、CUSTOMER 表、CUSTOMER2 表の DDL を確認・比較します。
db2look –d lab2 –e –t customer customer2
出力された DDL には、CUSTOMER 表の索引 ICUSTOMER は存在しますが、CUSTOMER2 表
のための索引は存在しません。
_CUSTOMER2 表の索引作成
CUSTOMER2 表に CUSTOMER 表と同様の索引を追加します。
db2 "create index icustomer2 on customer2 (C_W_ID, C_D_ID, C_LAST,
C_FIRST, C_ID) PCTFREE 10"
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "create index icustomer2 on customer2 (C_W_ID,
C_D_ID, C_LAST, C_FIRST, C_ID) PCTFREE 10"
DB20000I SQL コマンドが正常に完了しました。
コマンドが正常に完了したら、前述の db2look コマンドを使用して索引が正しく作成されている
ことを確認してください。
9
_CURSOR からの LOAD 実行
CURSOR をデータソースとして LOAD を行う場合、最初にカーソルの宣言を行います。その後、
宣言したカーソルを指定して LOAD を実行します。
db2 "declare c1 cursor for select * from customer"
db2 load from c1 of cursor replace into customer2
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "declare c1 cursor for select * from
customer"
DB20000I SQL コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 load from c1 of cursor replace into
customer2
<省略>
SQL3515W ユーティリティーは、"2009-08-11 07:47:35.326318" に
"BUILD" フェーズを完了しました。
読み込まれた行数
スキップされた行数
ロードされた行数
拒否された行数
削除された行数
コミットされた行数
= 30000
= 0
= 30000
= 0
= 0
= 30000
LOAD 完了後、CUSTOMER 表、CUSTOMER2 表それぞれに対して件数カウントを行い、全て
のレコードがコピーされていることを確認してください。
db2 "select count(*) from customer"
db2 "select count(*) from customer2"
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "select count(*) from customer"
1
----------30000
1 レコードが選択されました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "select count(*) from customer2"
1
----------30000
1 レコードが選択されました。
10
3.
統計情報の
統計情報の収集と
収集と再編成
このセクションでは、表に対する統計情報の収集と再編成の演習を行います。
3.1
統計情報の
統計情報の収集
統計情報の収集には RUNSTATS コマンドを使用します。統計情報の更新が必要となる事象に
は大量データの更新や索引の追加等があげられますが、本番運用では個別に必要性を判断
するよりも、全てのテーブルに対して定期的に取得するケースが多くなります。定期的に取得
する場合の周期については、データの更新頻度から判断します。基本的な考え方は「テーブル
全体の 20%が更新・追加される前には統計情報を更新する」です。この考え方に基づいて、統
計情報収集の周期(日次・週次・月次等)を決定してください。
_前回統計情報を収集した時刻を確認
下記のコマンドを使用して、そのテーブルに対して前回統計情報が収集された時刻を取得でき
ます。統計情報を取得したことがない表に対しては、「- (ヌル値)」が出力されます。
db2 "select substr(tabname,1,20) table , stats_time from
syscat.tables where tabschema='DB2INST1'"
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "select substr(tabname,1,20)
table , stats_time from syscat.tables where tabschema='DB2INST1'"
TABLE
-------------------WAREHOUSE
DISTRICT
HISTORY
ORDERS
NEW_ORDER
ORDER_LINE
CUSTOMER
STOCK
ITEM
CUSTOMER2
STATS_TIME
-------------------------2009-08-11-07.11.23.168924
2009-08-11-07.11.23.304731
2009-08-11-07.07.49.655276
2009-08-11-07.07.49.922659
2009-08-11-07.07.50.032274
2009-08-11-07.27.51.829330
2009-08-11-07.27.50.759330
2009-08-11-07.11.30.126756
2009-08-11-07.52.49.627635
10 レコードが選択されました。
演習で使用するデータベースでは、リアルタイム RUNSTATS 及び自動 RUNSTATS が有効に
なっているため、統計情報が収集されていない表に対して SQL が実行されると、順次統計情
報の自動収集が行われます。そのため、明示的な RUNSTATS を行っていなくても、統計情報
の収集時刻は更新されることになります。
11
_統計情報の収集
上記の実行例では、HISTORY 表に対しては統計情報が収集されていないため、下記のコマン
ドを使用して収集を行います。
db2 runstats on table db2inst1.history and indexes all
実行例
db2inst1@db2V97onSLES10:~/sqllib/db2dump> db2 runstats on table
db2inst1.history and indexes all
DB20000I RUNSTATS コマンドが正常に完了しました。
_更新された統計情報を確認
再度、統計情報の収集時刻を取得し、RUNSTATS が行われたことを確認します。
db2 "select substr(tabname,1,20) table , stats_time from
syscat.tables where tabschema='DB2INST1'"
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "select substr(tabname,1,20)
table , stats_time from syscat.tables where tabschema='DB2INST1'"
TABLE
-------------------WAREHOUSE
DISTRICT
HISTORY
ORDERS
NEW_ORDER
ORDER_LINE
CUSTOMER
STOCK
ITEM
CUSTOMER2
STATS_TIME
-------------------------2009-08-11-07.11.23.168924
2009-08-11-07.11.23.304731
2009-08-11-09.46.21.451662
2009-08-11-07.07.49.655276
2009-08-11-07.07.49.922659
2009-08-11-07.07.50.032274
2009-08-11-07.47.49.607305
2009-08-11-07.27.50.759330
2009-08-11-07.11.30.126756
2009-08-11-09.42.50.017952
10 レコードが選択されました。
3.2
表の再編成
_REORGCHK コマンドによる表の状態確認
REORGCHK は表のフラグメントの状態や、データの物理的な並び順を取得することで、再編成
の必要性を確認するためのコマンドです。デフォルトオプションで REORGCHK コマンドを実行
すると、内部的に RUNSTATS を実行して統計情報を更新します。本番環境等で、統計情報の
更新が望ましくない場合、CURRENT STATISTICS オプションを追加して実行してください。
今回のハンズオンではデフォルトオプションで実行し、統計情報を更新します。
db2 reorgchk on table db2inst1.customer
(参考)統計情報を更新しない REORGCHK コマンド
db2 reorgchk current statistics on table db2inst1.customer
12
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 reorgchk on table db2inst1.customer
RUNSTATS 中....
表統計:
<省略>
SCHEMA.NAME
CARD
OV
NP
FP ACTBLK
TSIZE F1 F2 F3 REORG
---------------------------------------------------------------------------------表: DB2INST1.CUSTOMER
30000
0
4937
4938
- 18150000
0 91 100 -----------------------------------------------------------------------------------索引統計:
<省略>
SCHEMA.NAME
INDCARD LEAF ELEAF LVLS NDEL
KEYS LEAF_RECSIZE
-------------------------------------------------------------------------------表: DB2INST1.CUSTOMER
索引: DB2INST1.ICUSTOMER
30000
484
0
3
0
30000
45
-------------------------------------------------------------------------------右上より 1→ NLEAF_RECSIZE LEAF_PAGE_OVERHEAD NLEAF_PAGE_OVERHEAD PCT_PAGES_SAVED
右上より 1→ ---------------------------------------------------------------------右上より 1→
右上より 1→
右上より 1→
45
416
416
0
右上より 1→ ---------------------------------------------------------------------右上より 2→ F4 F5 F6 F7 F8 REORG
右上より 2→ -----------------------右上より 2→
右上より 2→
右上より 2→ 6 91 11
0
0 *---右上より 2→ -----------------------<省略>
REORGCHK コマンドの出力には、F1 から F8 までの公式に基づいた算出結果から、再編成を
推奨するかどうかが含まれます。公式の算出結果が実線(赤線)で囲まれた部分、その結果再
編成を推奨するかどうかが、波線(青線)で囲まれた部分です。CUSTOMER 表の結果からは、
ICUSTOMER 表の F4(クラスター率)が 6%と低く、再編成が推奨されています。
参考:主な表の公式
公式 F1 :オーバーフロー行の合計数。
5%を越える場合、再編成が推奨される。
公式 F3 :割り当てられたページの内、使用されていないページの割合。
20%を上回る場合、再編成が推奨される。
13
参考:主な索引の公式
公式 F4 :索引のクラスター率(索引キーの値の順番に物理的に並んでいるかどうか)
一つの表に複数の索引が存在する場合、一方のクラスター率が上がると、
他の索引のクラスターリグが下がる関係にある場合が多い。
重要な索引のクラスター率が高いことを確認する。80%を下回る場合、
再編成が推奨される。
公式 F6 :再編成によって索引の階層が下げられる可能性がある。
F6 にフラグが立っている場合、対象索引の再編成が推奨される。
公式 F7,F8:物理削除により疑似削除ページや疑似削除キーがどの程度存在しているか。
再編成により索引サイズが縮小できるため、
20%を越えている場合は再編成が推奨される。
_表の再編成
索引 ICUSTOMER の公式 F4(クラスター率)が 6%と低いことがわかったので、下記のコマンド
を使用して再編成を行います。下記の例では、INDEX キーワードで ICUSTOMER 索引を指定
しています。これは、再編成時の基準となる並び順を、ICUSTOMER 索引を用いて決定するこ
とを意味します。
db2 reorg table db2inst1.customer index icustomer
実行例
db2inst1@db2V97onSLES10:/workshop/lab2 > db2 reorg table db2inst1.customer
index icustomer
DB20000I REORG コマンドが正常に完了しました。
_索引の再編成
再編成の完了後に、再度 REORGCHK コマンドを実行し、ICUSTOMER 索引のクラスター率
(F4)が向上していることを確認します。
実行例
SCHEMA.NAME
INDCARD
-------------------------------表: DB2INST1.CUSTOMER
索引: DB2INST1.ICUSTOMER
30000
--------------------------------
<省略>
F4 F5 F6 F7 F8 REORG
<省略> --------------------------<省略>
<省略>
<省略> 100 91 11
0
0 ----<省略> ---------------------------
14
4.
データベースの
データベースのモニタリング
このセクションでは、データベースのモニタリングに関するハンズオンを行います。ハンズオン
の対象は、「db2top によるリアルタイムでのモニタリング」及び、テキストベースでの網羅的な
取得が可能な「Snapshot コマンドによる Snapshot monitor のデータ取得」の 2 種類です。
4.1
負荷ツール
負荷ツールの
ツールの起動
一定の負荷がかかった状態でモニタリングを行うため、データベースに対して負荷を与えるツ
ールを稼働させます。このツールは約 10 分間稼働します。モニタリングのハンズオンを行って
いる途中で負荷ツールが終了した場合、再度起動してください。ツールの稼働中にハンズオン
が終了した場合、Ctrl+C によって途中で終了することが可能です。
_下記のコマンドを実行し、負荷ツールを起動してください。
cd /workshop/lab2/java
./go.sh tpcc.cfg
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> cd /workshop/lab2/java
db2inst1@db2V97onSLES10:/workshop/lab2/java> ./go.sh tpcc.cfg
STRESSARG=-clients 5 -minutes 5 -tm_scenario 0 -tm_transaction 0 -tm_query 0
-url jdbc:db2:lab2 -userid db2inst1 -password db2inst1 TPCCClient
Logdir = log/0811_2206
TARGETHOST=db2V97onSLES10
Waiting 5 seconds
OLTPStress - OLTP type stress tool using JDBC Version 1.30 2003/05/16
[Stress Start 2009/08/11 22:06:10]
-------------------------------------------------------
「Stress Start」のメッセージの後ハイフン記号が出力され始めたら、データベースへの負荷が開
始されています。
4.2
db2top によるモニタリング
によるモニタリング
_db2top の起動
新しいターミナルを起動し、下記のコマンドを実行してください。正しく実行できると db2top が起
動します。
db2top –d lab2
15
起動画面例
_データベース活動のモニタリング
db2top の起動画面で「d」を入力し、データベース活動のモニタリング画面へ移動してください。
下記のような情報が出力されます。
データベース活動のモニタリング
負荷が正常にかかっている場合、複数の項目で値の変動が見られます。
16
主な出力項目とその意味
Start Date Start Time
2009/08/11
19:57:05
Status
Active
Shthres
0
Buffers
26.0M
FCMBuf
768.0K
OtherMem
51.9M
Deadlocks
0
LogReads
0
LogWrites
9
Writes
0
A_Writes
0
Lock Wait
4
Sessions
16
ActSess
6
LockUsed LockEscals
0%
0
L_Reads
813
P_Reads
34
HitRatio
95.71%
Sortheap
16.0K
A_Reads
0.00%
SortOvf PctSortOvf AvgPRdTime AvgDRdTime AvgPWrTime AvgDWrTime
0
0.00%
100.78
0.00
0.00
0.00
主な出力項目とその意味
・Buffers
バッファープールの合計容量を表します。STMM 環境下では、バッファープールのサイズ
は動的に変動します。
・L_Reads、P_Reads、HitRatio:
L_Reads はバッファープールからの論理的な読み込みを指し、P_Reads はディスクからバ
ッファープールへの物理的な読み込みを指します。この比率が「バッファープール・ヒット
率」と呼ばれ、データベースの性能を維持するために重要な指標です。上の例では、ヒッ
ト率が約 95.7%と効率の良い読み込みが行われています。
・LockUsed、LockEscals、Deadlocks、Lock Wait
この 4 点はロック関連の指標を表します。LockEscals はロックエスカレーション(行ロック
から表ロックへの変換)の発生回数、Deadlocks はデッドロックの発生回数、Lock Wait は
ロック待ちの発生回数を表します。ロックエスカレーションやデッドロックが発生している場
合、アプリケーションの並行性に問題がある可能性があるため、注意してください。
・AvgPRdTime、AvgDRdTime、AvgPWrTime、AvgDWrTime
これらの指標は、ディスク I/O に要した時間を表します。PRdが物理読み込み(Physical
Reads)、DRdが直接読み込み(Direct Reads)、PWrが物理書き込み(Physical writes)、
DWrが直接書き込み(Direct write)を指します。直接読み込み、直接書き込みとは、バッ
クアップやラージオブジェクトのアクセス等、バッファープールを経由しない I/O 活動を指
します。
_その他のモニタリング項目
db2top はデータベース全体以外にも、様々な切り口でデータベースの活動をモニタリング可能
です。代表的な切り口としてアプリケーション・セッション(「l」で選択)、バッファープール(「b」で
選択)、テーブルスペース(「t」で選択)等があります。「h」を選択すると選択可能なオプションが
表示されるため、それを参考にしながら様々な切り口を試してください。
17
4.3
Snapshot によるモニタリング
によるモニタリング
前のセクションでは db2top によるリアルタイムでのモニタリングを行いましたが、このセクション
では Snapshot による蓄積的なモニタリングを行います。蓄積的なモニタリングの目的としては、
「通常稼働時から定期的に取得し問題が発生した場合に平常稼働時との差異を迅速に特定す
ること」や、「システム構築時のテスト等でデータベースのパフォーマンス情報を詳細に解析す
ること」などが挙げられます。
4.3.1
手動による
手動による Snapshot の取得
Snapshot 情報の取得は、下記のような流れで実施します。Snapshot 情報はデータベースが活
動を開始してからの累積値として出力されるため、そのままでは目的とする期間の情報のみを
取り出すことが困難です。そのため、モニターのリセットを行い、一定期間待ってから Snapshot
を取得します。Snapshot にはモニターのリセットから Snapshot 取得までの期間の活動が出力
されることになります。
モニタースイッチの活動化
db2 update monitor switches using bufferpool on
db2 reset monitor all
WAIT
Snapshotコマンドによる
情報の取得
この間の活動が記録される
モニターのリセット
sleep 60 (1分間のWait)
db2 get snapshot for database on lab2
_負荷状況の確認
負荷ツールがまだ稼働していることを確認し、稼働していない場合は再度負荷ツールを起動し
てください。
_モニタースイッチの設定
下記のコマンドを使用して、全てのモニタースイッチを有効にしてください。
db2 get monitor switches
db2 update monitor switches using bufferpool on lock on sort on
statement on table on uow on
db2 get monitor switches
モニタースイッチとは DB2 のモニタリング項目について、情報を収集するかどうかを決定する
ためのパラメーターです。設定に関わりなく収集される BASE に加えて、属性ごとにグルーピン
グされたモニタースイッチが 7 項目あります(バッファープール、ロック、ソート、動的 SQL、テー
ブル、時刻、UOW)。DBM 構成パラメーターを使用してインスタンス単位で有効にすることも可
18
能ですが、この演習で UPDATE MONITOR SWITCH コマンドを使用してセッション単位で有効
にします。
実行例
db2inst1@db2V97onSLES10:~> db2 get monitor switches
モニター記録スイッチ
DB パーティション番号 0 のスイッチ・リスト
バッファー・プール・アクティビティー情報 (BUFFERPOOL)
ロック情報
(LOCK)
ソート情報
(SORT)
SQL ステートメント情報
(STATEMENT)
表アクティビティー情報
(TABLE)
タイム・スタンプ情報を取る
(TIMESTAMP)
作業単位情報
(UOW)
=
=
=
=
=
=
=
OFF
OFF
OFF
OFF
OFF
ON 2009-08-11 19:55:19.130673
OFF
db2inst1@db2V97onSLES10:~> db2 update monitor switches using bufferpool on lock on sort on statement on
table on uow on
DB20000I UPDATE MONITOR SWITCHES コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:~> db2 get monitor switches
モニター記録スイッチ
DB パーティション番号 0 のスイッチ・リスト
バッファー・プール・アクティビティー情報 (BUFFERPOOL)
ロック情報
(LOCK)
ソート情報
(SORT)
SQL ステートメント情報
(STATEMENT)
表アクティビティー情報
(TABLE)
タイム・スタンプ情報を取る
(TIMESTAMP)
作業単位情報
(UOW)
=
=
=
=
=
=
=
ON
ON
ON
ON
ON
ON
ON
2009-08-11
2009-08-11
2009-08-11
2009-08-11
2009-08-11
2009-08-11
2009-08-11
23:19:54.623408
23:19:54.623408
23:19:54.623408
23:19:54.623408
23:19:54.623408
19:55:19.130673
23:19:54.623408
_モニターのリセットと Sleep、Snapshot の取得
RESET MONITOR コマンドで、一旦 Snapshot Monitor の指標をリセットします。その後 30 秒間
sleep し、30 秒分の活動情報が蓄積された時点で Snapshot を取得します。
db2 reset monitor all
sleep 30
db2 get snapshot for database on lab2
実行例
db2inst1@db2V97onSLES10:~> db2 reset monitor all
DB20000I RESET MONITOR コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:~> sleep 30
db2inst1@db2V97onSLES10:~> db2 get snapshot for database on lab2
データベース・スナップショット
データベース名
データベース・パス
入力データベース別名
データベース状況
<省略>
=
=
=
=
19
LAB2
/db2dbpath/db2inst1/NODE0000/SQL00001/
LAB2
アクティブ
4.3.2
スクリプトによる
スクリプトによる Snapshot の取得
本番運用での Snapshot の取得は、オペレーションの単純化や取得の自動化のため、スクリプ
トで行うケースが多くなります。このハンズオンでは、シンプルなサンプルスクリプトによる自動
取得を行います。
_負荷状況の確認
負荷ツールがまだ稼働していることを確認し、稼働していない場合は再度負荷ツールを起動し
てください。
_スクリプトの起動
下記のコマンドを実行し、サンプルスクリプトを起動してください。
cd /workshop/lab2/snapshot
./snapshot.sh lab2 10 3
サンプルスクリプトの書式は下記の通りです。
./snapshot.sh <DB 名称> [取得間隔(秒)] [取得回数]
上記のコマンドでは、10 秒間隔で 3 回取得することになります。
実行例
db2inst1@db2V97onSLES10:/workshop/lab2/snapshot> ./snapshot.sh lab2 10 3
Target DB
interval
Repeat Count
Snapshot Mode
:lab2
:10
:3
:ALL
Monitor switches:
DB20000I UPDATE MONITOR SWITCHES コマンドが正常に完了しました。
モニター記録スイッチ
DB パーティション番号 0 のスイッチ・リスト
バッファー・プール・アクティビティー情報 (BUFFERPOOL)
ロック情報
(LOCK)
ソート情報
(SORT)
SQL ステートメント情報
(STATEMENT)
表アクティビティー情報
(TABLE)
タイム・スタンプ情報を取る
(TIMESTAMP)
作業単位情報
(UOW)
=
=
=
=
=
=
=
DB20000I RESET MONITOR コマンドが正常に完了しました。
Repeat count :1/3
Interval :10
DB20000I RESET MONITOR コマンドが正常に完了しました。
Repeat count :2/3
Interval :10
DB20000I RESET MONITOR コマンドが正常に完了しました。
Repeat count :3/3
Interval :10
20
ON
ON
ON
ON
ON
ON
OFF
2009-08-11
2009-08-11
2009-08-11
2009-08-11
2009-08-11
2009-08-11
23:46:57.705511
23:46:57.705511
23:46:57.705511
23:46:57.705511
23:46:57.705511
19:55:19.130673
_出力ファイルの確認
スクリプトが出力したファイルを確認します。このサンプルスクリプトは、実行時のタイムスタン
プが負荷されたファイルを 2 種類出力します。1 つめはデータベース・マネージャー・スナップシ
ョットの出力ファイル、もう一つはデータベース・スナップショットです。複数回の取得を行った場
合、複数回分の出力が一つのファイルに出力されます。
実行例
db2inst1@db2V97onSLES10:/workshop/lab2/snapshot>
合計 1754
-rw-r--r-- 1 db2inst1 db2user 1765933 2009-08-11
-rw-r--r-- 1 db2inst1 db2user
15662 2009-08-11
-rw-r--r-- 1 db2inst1 db2user
288 2009-08-11
-rwxrwxrwx 1 db2inst1 db2user
1859 2009-08-11
21
ls -l
23:47
23:47
23:45
23:39
snapshot.20090811_234654.all.log
snapshot.20090811_234654.dbm.log
snapshot.cfg
snapshot.sh
5.
バックアップと
バックアップとリストア
このセクションでは、データベースのバックアップとリストアを行います。
5.1
アーカイブ・
アーカイブ・ロギングへの
ロギングへの変更
への変更
このセクションでは、データベースのバックアップとリストアを行います。
_構成パラメーターの変更
DB2 では、デフォルト状態のデータベースはログを保管しません。このようなロギング方式を
「循環ログ方式」と呼びます。バックアップからの復旧後にログの適用を行う場合、ログを保管
するモードへの変更が必要です。ログを保管するモードを「アーカイブ・ログ方式」と呼びます。
下記のコマンドを実行して、データベース構成パラメーターを変更してください。
mkdir /home/db2inst1/arclog
db2 update db cfg for lab2 using logarchmeth1 DISK:/home/db2inst1/arclog
db2 get db cfg for lab2 |grep LOGARCH
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> mkdir /home/db2inst1/arclog
db2inst1@db2V97onSLES10:/workshop/lab2> db2 update db cfg for lab2 using logarchmeth1
DISK:/home/db2inst1/arclog
DB20000I TERMINATE コマンドが正常に完了しました。
SQL1363W 即時変更のためにサブミットされた 1
つ以上のパラメーターが動的に変更されませんでした。
これらの構成パラメーターでは、変更を有効にする前に
すべてのアプリケーションをこのデータベースから切断する
必要があります。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 get db cfg for lab2 |grep LOGARCH
第 1 ログ・
(LOGARCHMETH1) = DISK:/home/db2inst1/arclog/
ログ・アーカイブ・
アーカイブ・メソッド
logarchmeth1 のオプション
(LOGARCHOPT1) =
第 2 ログ・アーカイブ・メソッド
(LOGARCHMETH2) = OFF
logarchmeth2 のオプション
(LOGARCHOPT2) =
_バックアップの取得
構成パラメーターを変更しただけでは、まだアーカイブ・ロギングは有効になっていません。有
効にするためには、データベースの非活動化・活動化(もしくは DB2 の再起動)及び、データベ
ースのフルバックアップ取得が必要です。
下記のコマンドを実行して DB2 の再起動とバックアップ取得を行ってください。
db2stop force
db2start
db2 backup db lab2 to /workshop/lab2
22
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2stop force
2009-08-12 00:12:42
0
0
SQL1064N DB2STOP の処理が正常に終了しました。
SQL1064N DB2STOP の処理が正常に終了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2start
08/12/2009 00:12:50
0
0
SQL1063N DB2START の処理が正常に終了しました。
SQL1063N DB2START の処理が正常に終了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 backup db lab2 to /workshop/lab2
バックアップは成功しました。
このバックアップ・イメージのタイム・スタンプは
20090812001256 です。
db2inst1@db2V97onSLES10:/workshop/lab2> ls -l LAB2*
-rw------- 1 db2inst1 db2user 200744960 2009-08-12 00:13 LAB2.0.db2inst1.NODE0000.CATN0000.20090812001256.001
_ログ・アーカイブの確認
バックアップが正常に完了した時点で、アーカイブ・ロギングが有効となります。下記のコマンド
を使用して、データベースに接続ができること、ログのアーカイブが行われることを確認してくだ
さい。
db2 connect to lab2
db2 terminate
ls -lR /home/db2inst1/arclog
db2 archive log for db lab2
ls -l /home/db2inst1/arclog/db2inst1/LAB2/NODE0000/C0000000/
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 connect to lab2
データベース接続情報
= DB2/LINUX 9.7.0
= DB2INST1
= LAB2
データベース・サーバー
SQL 許可 ID
ローカル・データベース別名
db2inst1@db2V97onSLES10:/workshop/lab2> db2 terminate
DB20000I TERMINATE コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> ls -lR /home/db2inst1/arclog/db2inst1/LAB2/NODE0000/C0000000/
/home/db2inst1/arclog/db2inst1/LAB2/NODE0000/C0000000:
合計 0
db2inst1@db2V97onSLES10:/workshop/lab2> db2 archive log for db lab2
DB20000I ARCHIVE LOG コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> ls -lR /home/db2inst1/arclog/db2inst1/LAB2/NODE0000/C0000000/
/home/db2inst1/arclog/db2inst1/LAB2/NODE0000/C0000000/:
合計 12
-rw-r----- 1 db2inst1 db2user 12288 2009-08-12 00:17 S0000000.LOG
23
5.2
データベースの
データベースのバックアップ
_データベースのバックアップ取得
データベースのバックアップを取得します。ここではオンラインバックアップを取得します。バック
アップ取得後、取得したタイムスタンプのバックアップ・ファイルが存在することを確認してくださ
い。
db2 backup database lab2 online to /workshop/lab2
実行例
db2inst1@db2V97onSLES10: /workshop/lab2 > db2 backup database lab2 online to
/workshop/lab2
バックアップは成功しました。
このバックアップ・イメージのタイム・スタンプは
20090812002357 です。
db2inst1@db2V97onSLES10: /workshop/lab2 > ls -l /workshop/lab2/LAB*
-rw------- 1 db2inst1 db2user 200744960 <省略> /workshop/lab2/LAB2.0.db2inst1.NODE0000.CATN0000.20090812001256.001
-rw------- 1 db2inst1 db2user 199577600 <省略> /workshop/lab2/LAB2.0.db2inst1.NODE0000.CATN0000.20090812002357.001
ここで取得したバックアップを、次ステップでのリストアに使用します。バックアップ・タイムスタン
プを記録してください。
バックアップ・タイムスタンプ:
5.3
データベースの
データベースのリストア
このステップでは、データベースのリストアとログの適用を行います。バックアップ取得以降の
更新が反映されることを確認するために、事前にデータベースを更新します。
_データベースの更新
表の作成とデータの投入を行います。
db2 connect to lab2
db2 "create table table1 (c1 int, c2 char(10), c3 timestamp)"
db2 "insert into table1 values (1, 'AAA', current timestamp),
(2,'BBB', current timestamp), (3, 'CCC', current timestamp)"
db2 "select * from table1"
db2 terminate
db2 archive log for db lab2
24
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 connect to lab2
データベース接続情報
= DB2/LINUX 9.7.0
= DB2INST1
= LAB2
データベース・サーバー
SQL 許可 ID
ローカル・データベース別名
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "create
c3 timestamp)"
DB20000I SQL コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "insert
current timestamp),(2,'BBB', current timestamp),(3,
DB20000I SQL コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "select
table table1 (c1 int, c2 char(10),
into table1 values (1, 'AAA',
'CCC', current timestamp)"
* from table1"
C1
C2
C3
----------- ---------- -------------------------1 AAA
2009-08-12-00.33.09.658837
2 BBB
2009-08-12-00.33.09.658837
3 CCC
2009-08-12-00.33.09.658837
3 レコードが選択されました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 terminate
DB20000I TERMINATE コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 archive log for db lab2
DB20000I ARCHIVE LOG コマンドが正常に完了しました。
_データベースの削除
下記のコマンドを使用して、データベースを削除します。
db2 terminate
db2 force application all
db2 drop db lab2
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 terminate
DB20000I TERMINATE コマンドが正常に完了しました。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 force application all
DB20000I FORCE APPLICATION コマンドが正常に完了しました。
DB21024I このコマンドは非同期であり、即時に有効にならな
い場合もあります。
db2inst1@db2V97onSLES10:/workshop/lab2> db2 drop db lab2
DB20000I DROP DATABASE コマンドが正常に完了しました。
データベースに接続できないことを確認します。
db2 connect to lab2
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 connect to lab2
SQL1013N データベース別名またはデータベース名 "LAB2"
が見つかりませんでした。 SQLSTATE=42705
25
_データベースのリストア
前ステップで取得したバックアップ・ファイルを使用してデータベースのリストアを行います。デ
ータベースのストア時には、リストア対象となるファイルのタイムスタンプを指定する必要があり
ます。前ステップで記録したバックアップ・タイムスタンプを指定してください。
db2 restore db lab2 from /workshop/lab2 taken at <バックアップ・タイムス
タンプ> on /db2
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 restore db lab2 from /workshop/lab2 taken
at 20090812002357 on /db2
DB20000I RESTORE DATABASE コマンドが正常に完了しました。
_Rollforward の実行
リストアの完了後に、ログの適用を行います。このハンズオンでは最新状態まで復旧するため
に、「END OF LOGS」オプションでの Rollforward を実行します。このオプションでは、DB2 は存
在する全てのアーカイブ・ログを適用します。これ以外のオプションとして、バックアップ完了時
点までの復旧を行う「TO END OF BACKUP」や、特定時刻までのログのみを適用する「TO
yyyy-mm-dd-hh.mm.ss」などの指定が可能です。
下記のコマンドを実行して、ログ適用を行ってください。
db2 rollforward db lab2 to end of logs and complete
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 rollforward db lab2 to end of logs and complete
ロールフォワード状況
入力データベース別名
状況を返したノードの数
= lab2
= 1
ノード番号
ロールフォワード状況
次に読み込むログ・ファイル
処理したログ・ファイル
最後にコミットしたトランザクション
=
=
=
=
=
0
非ペンディング
S0000001.LOG - S0000004.LOG
2009-08-11-15.37.59.000000 UTC
DB20000I ROLLFORWARD コマンドが正常に完了しました。
これでログ適用についても完了し、データベースの復旧は終了しました。
26
_復旧の確認
前ステップで、バックアップ取得後に行った更新が復旧されている事を確認します。
db2 connect to lab2
db2 "select * from table1"
実行例
db2inst1@db2V97onSLES10:/workshop/lab2> db2 connect to lab2
<省略>
db2inst1@db2V97onSLES10:/workshop/lab2> db2 "select * from table1"
C1
C2
C3
----------- ---------- -------------------------1 AAA
2009-08-12-00.33.09.658837
2 BBB
2009-08-12-00.33.09.658837
3 CCC
2009-08-12-00.33.09.658837
3 レコードが選択されました。
以上です。
27
© Copyright IBM Corporation 2009
All Rights Reserved.
本書に含まれている情報は、正式なIBMのテストを受けていません。また、明記にしろ、暗黙的にしろ、なんらの保証もなしに配布され
るものです。
この情報の使用またはこれらの技術の実施は、いずれも、使用先の責任において行われるべきものであり、それらを評価し、実際に使用
する環境に統合する使用先の判断に依存しています。それぞれの項目は、ある特定の状態において正確であることがIBMによって調べら
れていますが、他のところで同じまたは同様の結果が得られる保証はありません。これらの技術を自身の環境に適用することを試みる使
用先は、自己の責任において行う必要があります。
28
Fly UP