目次


簡単! DB2の運用

第2回 自動メンテナンス

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: 簡単! DB2の運用

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:簡単! DB2の運用

このシリーズの続きに乞うご期待。

はじめに

データベースの運用では、データベースのパフォーマンスやリカバリーの可能性を最適化しておくために、バックアップや統計情報の更新などのメンテナンスが必要とされます。従来のユーザー手動によるメンテナンスでは、どのメンテナンスを実行するかどうか、また、いつ実行するかの判断を人間が行なう必要があり、運用の負担となっていました。この記事では、運用の負荷を軽減するための機能として、DB2の自動メンテナンスを取り上げ、実際の設定方法をまじえて、ご紹介させていただきます。

自動メンテナンスの概要

DB2では、V8.2より、自動的に保守を行なう機能が提供されています。自動メンテナンスでは、ユーザーがあらかじめ定めた保守時間枠と保守アクティビティーのポリシーに基づいて、データベース・マネージャーが、保守アクティビティーの実行判断を行い、必要なものを実行します。

自動メンテナンスでサポートされる保守アクティビティーは、以下の 3つです。

  • データベースのフル・バックアップ(BACKUP)
  • 統計情報の収集(RUNSTATS)
  • 表または索引の再編成(REORG)

保守時間枠は、保守アクティビティーが実行される時間枠を指しており、オンライン保守時間枠、オフライン保守時間枠の 2つがあります。保守時間枠ごとに実行可能な保守アクティビティーは、表1にある通りです。保守アクティビティーは、一旦開始されると、処理が完了するまで実行されます。オフライン保守アクティビティーでは、内部的に完了可否を学習しており、実行時間が設定された時間枠に収まらなかった場合には、次回実行時に、そのアクティビティーは開始されなくなります。

表1. 自動メンテナンスの保守時間枠およびアクティビティー
保守時間枠のタイプ実行可能な保守アクティビティー特長
オンラインオンライン・データベース・バックアップ
オンライン索引再編成
統計情報の収集
メンテナンス中でも対象オブジェクトに対するアクセスが可能。アクティビティー開始後は、完了するまで実行される。
オフラインオフライン・データベース・バックアップ
オフライン表再編成
オフライン索引再編成
メンテナンス中は、対象オブジェクトへのアクセスが制限される。アクティビティー開始後は、完了するまで実行される。内部的に完了時間を学習する。時間枠に収まらないことが判明すると、その次の期間ではアクティビティーは開始されない。

保守アクティビティーごとに選択可能なポリシーは、表2にある通りです。

表2. 保守アクティビティーのポリシー
アクティビティー名選択可能なポリシー補足
自動データベースBACKUP- ONLINE
- OFFLINE
 
自動RUNSTATS対象表の選択 
自動REORG
  • 対象表の選択
    表の名前による絞込み
    表のサイズによる絞込み
  • オフライン表再編成に関する項目
    一時表スペースの使用
    - TRUE(一時表スペースを使用する)
    - FALSE(一時表スペースを使用しない)
    行圧縮辞書の再作成に関するオプション(V9.1以降)
    - REBUILD
    - KEEP
  • 索引再編成に関する項目
    - ONLINE
    - OFFLINE
表の再編成では、シャドー・コピー・アプローチによる再編成のみ可能(インプレース・アプローチは選択不可)

統計情報の収集(RUNSTATS)

統計情報の収集は、データ・アクセスの最適化を行なうための保守アクティビティーです。DB2では、RUNSTATSコマンドを使用して、表データ、索引データ、あるいは表とその索引の両方のデータに関する統計を収集します。収集された統計情報は、システム・カタログ表に格納されます。収集される統計には、表の使用ページ数、表内の行数、列のカーディナリティー、索引のリーフ・ページ数など、さまざまな種類があります。

SQLステートメントが実行されると、オプティマイザーはこれらの統計情報を使用して、データにアクセスするにはどのパスを使用したらよいかを判断します。そのため、オプティマイザーが正確な統計情報に基づいてアクセス・プランを選択できるように、統計情報を最新のものに維持することが大切です。統計情報が長期に渡って取得されていない、もしくは一度も取得されていない場合、実際のデータ状況と統計の間の乖離が大きくなり、オプティマイザーが決定するアクセス・プランが適切でない状況が起こりえます。

一般的には、以下のタイミングで実施が推奨されます。

  • 索引が作成された時
  • 表のデータがREORGされた時
  • 表および索引のデータの10-20%がUPDATE/DELETE/INSERTされた時
  • アプリケーションをBINDする前

再編成(REORG)

再編成は、SQLによる更新(UPDATE/DELETE/INSERT)により発生する表データ、索引データのフラグメンテーションを解消するための保守アクティビティーです。DB2では、REORGコマンドを使用して、再編成を行ないます。

フラグメンテーションの解消によって、データ・アクセスの処理効率を向上させ、使用されるディスク・スペースの削減を行なうことができます。表、索引データのフラグメンテーションが多く発生していると、データがまとまって格納された状態ではないため、ディスクの格納効率が下がります。データ・アクセスの際には、本来必要とされるページ数よりも、多くのページを読み込んでしまいます。さらに、表のREORGでは、特定の索引順に表データを並び替えることができます。表データが索引順にまとまって格納された状態であると、その索引を使用した範囲検索が行われる場合に、データ・アクセスの効率が良くなり、照会のパフォーマンスが向上します。

表、索引に対して再編成が必要かどうかを検査するには、REORGCHKコマンドを使用します。このコマンドを使用すると、統計情報を基に、再編成を推奨する/しないの結果が出力されます。出力のREORG列に*が多い表や索引ほど、再編成が推奨されます。

自動メンテナンスの実行

自動メンテナンスの設定フローは、以下の通りです。

  1. 対象データベースで、自動メンテナンスを有効にする。
  2. 保守時間枠を設定する。
  3. 通知の設定を行なう(任意)。
  4. 保守アクティビティーごとに、自動メンテナンスのポリシーを設定する。

自動メンテナンスの設定方法には、以下の 2つがあります。

  • GUIによる「自動保守の構成」ウィザードを使用する設定
    GUIの「自動保守の構成」ウィザードは、DB2の管理ツールであるコントロール・センター、またはヘルス・センターから起動できます。
  • DB2のコマンドを使用する設定
    DB2のストアード・プロシージャーを使用して、設定を行ないます。この方法は、V9.5以降で使用可能です。

これらのツールやコマンドを使用すれば、DB2が提供する機能のみで運用の仕組みを容易に構築することができます。また、システムの本稼動後に運用スケジュールや保守アクティビティーの内容が変更された場合でも、従来のように運用スクリプトを再びコーディングし直す作業なく、変更対応を行なうことができます。結果として、システム構築時に必要となっていた運用スクリプトの開発や運用変更時の対応工数を少なく抑えられます。

自動メンテナンスの有効化は、DB構成パラメーターで行ないます。自動メンテナンスに関するDB構成パラメーターは、階層構造となっています。例えば、自動RUNSTATSを有効にしたい場合には、AUTO_RUNSTATSの加えて、AUTO_MAINT、AUTO_TBL_MAINTをONにする必要があります。なお、「自動保守の構成」ウィザードを使用する場合、ユーザーの選択に応じて、構成パラメーターは自動的に設定されます。

DB構成パラメーター
自動保守                                 (AUTO_MAINT) = ON
   データベース自動バックアップ      (AUTO_DB_BACKUP) = OFF
   表自動保守                        (AUTO_TBL_MAINT) = ON
     自動 RUNSTATS                    (AUTO_RUNSTATS) = ON
       自動ステートメント統計       (AUTO_STMT_STATS) = OFF
     統計プロファイル自動作成       (AUTO_STATS_PROF) = OFF
       プロファイル自動更新           (AUTO_PROF_UPD) = OFF
     自動再編成                          (AUTO_REORG) = OFF

コマンドは、以下の通りです。

(例)db2 connect to <db-alias>
db2 update db cfg using AUTO_MAINT ON AUTO_TBL_MAINT ON AUTO_RUNSTATS ON

さらに、ヘルス・モニターを有効(HEALTH_MON=ON(デフォルト))にして、以下のヘルス・インディケーターをONにしておくと、ユーティリティー実行が失敗した際に、事前に登録した連絡先にメッセージを通知させることができます。ヘルス・モニターについては、「簡単!DB2の運用 - DB2の安定稼働(ヘルス・モニター)」をご参照ください。

  • db.db_backup_req(デフォルト:ON)
    バックアップの実行が必要である、もしくはバックアップの自動実行が可能な設定でない場合には、アテンション状態となる
  • db.tb_runstats_req(デフォルト:ON)
    RUNSTATSが必要な表が存在する、もしくは、自動RUNSTATSが失敗すると、アテンション状態となる
  • db.tb_reorg_req(デフォルト:ON)
    再編成が必要な表や索引が存在する、もしくは、自動再編成が失敗すると、アテンション状態となる

コントロール・センターを使用する自動メンテナンスの設定

今回は、コントロール・センターから、自動構成ウィザードを使用して、自動メンテナンスを設定してみましょう。ストアード・プロシージャーを使用したコマンドによる設定については、参照文献 「DB2 9.5 技術資料 導入と管理機能の強化-第2章 管理機能強化: 自動保守機能拡張」をご参照ください。

  1. 自動メンテナンスの設定を開始するには、コントロール・センター上のオブジェクト・ビュー(画面左側)にあるデータベース名の上で右クリックを実行して、ポップアップ・メニューから、「自動保守の構成」を選択します。
    図1 自動構成ウィザードの起動
    図1 自動構成ウィザードの起動
    図1 自動構成ウィザードの起動
  2. 「1. 概要」では、自動保守の構成ウィザードに関する概要が表示されます。情報を確認して、次へ進みます。
    図2 自動保守の構成ウィザード: 概要
    図2 自動保守の構成ウィザード: 概要
    図2 自動保守の構成ウィザード: 概要

「2. タイプ」では、自動化設定を使用可能にするかを選択します。ここでは、自動メンテナンスを使用するので、「自動化設定を変更する」を選択して、次へ進みます。

図3 自動保守の構成ウィザード: タイプ
図3 自動保守の構成ウィザード: タイプ
図3 自動保守の構成ウィザード: タイプ

「3. タイミング」では、保守時間枠を設定します。オンライン保守時間枠、オフライン保守時間枠の2つを設定することができます。

図4 自動保守の構成ウィザード: タイミング
図4 自動保守の構成ウィザード: タイミング
図4 自動保守の構成ウィザード: タイミング

「4. 通知リスト」で e-mailアドレスを登録しておけば、オフライン保守時間枠内で自動メンテナンスが完了しなかった場合などに、登録された宛先に連絡することができます。

図5 自動保守の構成ウィザード: 通知
図5 自動保守の構成ウィザード: 通知
図5 自動保守の構成ウィザード: 通知

「5. アクティビティー」では、自動化のチェックボックスをON/OFFにすることで、自動メンテナンスとして運用する保守アクティビティーを選択します。また、アクティビティーごとに通知設定を行なうこともできます。

ここでは、自動REORGの設定を行なってみましょう。はじめに、保守アクティビティーの選択で、自動化のチェックボックスをONにします。その後、表および索引データのデフラグを選択した状態で、設定の構成を実行します(図6)。

図6 自動保守の構成ウィザード: 保守アクティビティーの選択
図6 自動保守の構成ウィザード: 保守アクティビティーの選択
図6 自動保守の構成ウィザード: 保守アクティビティーの選択

自動REORGに関する設定の構成では、メンテナンス対象とする表の選択を行ないます。ここでは、DB2INST1スキーマに属するすべての表に対して、オフライン表再編成を実行するように設定しています(図7)。

図7 自動保守の構成ウィザード: 再編成を実施する表の選択
図7 自動保守の構成ウィザード: 再編成を実施する表の選択
図7 自動保守の構成ウィザード: 再編成を実施する表の選択

次に、表再編成のオプションを選択します。ここでは、表再編成を行なう際に、システム一時表スペースを使用するようにしています。さらに、索引再編成をオンラインで行なうように設定しています。

図8 自動保守の構成ウィザード: 再編成オプションの選択
図8 自動保守の構成ウィザード: 再編成オプションの選択
図8 自動保守の構成ウィザード: 再編成オプションの選択

自動メンテナンスの実行確認

自動メンテナンスの実行履歴は、手動でユーティリティーを実行する場合と同様に、回復履歴ファイルに出力されます。RUNSTATSコマンドの実行では、SYSCAT.TABLESのSTATS_UPDATE列の値が更新されます。さらに、db2diag.log ファイルに自動メンテナンスの開始、終了のメッセージが出力されます。

作業データ格納用の表スペース

自動メンテナンスの使用時には、2つの表スペース(SYSTOOLSPACE表スペース、SYSTOOLSTMPSPACE表スペース)が、自動作成されます。この表スペースは、自動統計収集および再編成の機能が、作業データを格納するための表スペースです。ストレージ要件としては、データベース中の表の数に比例し、1つの表に対して約1 KBの領域が必要とされます。自動メンテナンス使用時には、ディスク見積もりに含めるようにしてください。

おわりに

この記事では、データベースのバックアップ、統計情報の収集、表または索引再編成のメンテナンスを自動的に行なう機能をご紹介させていただきました。基本的な内容については、ここで触れた内容でカバーできていると思いますが、さらに詳細な情報をお求めの場合には、参考文献についてもご参照ください。当記事で紹介しました内容が運用における負荷軽減につながりましたら幸いです。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management
ArticleID=365126
ArticleTitle=簡単! DB2の運用: 第2回 自動メンテナンス
publish-date=01092009