>> 連載トップページに戻る

 

基本からわかる!高性能×高可用性データベースシステムの作り方

第9回 バックアップ/リカバリ(4)RMANでのバックアップ時間の短縮


著者紹介


日下部 明 (くさかべ あきら)

日本オラクル Oracle Database担当。Oracle GRID Centerのラインマネージャとしてオラクルの持つ最新技術をパートナー各社と共同で検証し、多くのホワイトペーパーを執筆・レビューしてきました。以後、Oracle Databaseのセキュリティ製品のリリースマネージャを担当。これらの経験を元にミッションクリティカルな案件のソリューションデザインの提案などを担当しています。著書に「これは使えるOracle新機能活用術」(翔泳社)。


第9回 バックアップ/リカバリ(4)RMANでのバックアップ時間の短縮


第8回ではRMANのバックアップ・ファイルのサイズを小さくする増分バックアップと、そのリストア/リカバリについて説明しました。増分更新バックアップを使用すると、バックアップ・ファイルのサイズを小さくできることと、リストア時のデータ移動量の最小化と、リカバリ時に適用するREDOログの開始点を最新の増分バックアップ取得時点からにすることを両立することができます。今回はRMANでのバックアップ時間を短縮する方法を扱います。バックアップ取得時のデータ・ブロックへのアクセスを減少させる高速増分バックアップと、バックアップの並列化について説明します。


1 増分バックアップの高速化

増分バックアップは、前回バックアップを取得した時点から更新が発生したブロックのみをバックアップ・ファイルとすることで、バックアップで生成されるファイル・サイズを小さくすることができます。Oracle Databaseの増分バックアップのデフォルトの動作は、データファイルのすべてのブロックを検査することで前回のバックアップから更新されたかを判断します。そのため、データファイルへのI/O量が削減されるわけではありません。

 

この動作を改良するために、Oracle Database 10g Release 1のEnterprise Editionで、増分バックアップのデータファイルのI/O量を削減するためのブロック・チェンジ・トラッキングという機能が導入されました。各データブロックが前回のバックアップから更新されたかどうかをBlock Change Tracking(BCT)ファイルに記録し、増分バックアップはこのBCTファイルを見て変更のあったデータブロックを読み取ります。そのため、更新されたデータブロックの範囲にもよりますが、増分バックアップの時間を大幅に短縮することができます。この仕組みを高速増分バックアップといいます。

img-1

高速増分バックアップを有効にするには、BCTファイルを作成します。

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA/rac122a/bct.dbf' REUSE;

RMANはOracleインスタンスに接続してバックアップを行うため、バックアップに関する統計情報を動的パフォーマンス・ビューで見ることができます。バックアップを行った時の各データファイルに対する読み取り量がV$BACKUP_DATAFILEビューに現れます。次のSQLでバックアップのブロック数がわかります。

SELECT TO_CHAR( COMPLETION_TIME,'YYYY/MM/DD-HH24:MI:SS') as
COMPLETION_TIME,FILE#,DATAFILE_BLOCKS,BLOCKS_READ,BLOCKS,INCREMENTAL_LEVEL,USED_CHANGE_TRACKING,USED_OPTIMIZATION
FROM V$BACKUP_DATAFILE
ORDER BY COMPLETION_TIME;

V$BACKUP_DATAFILEビューから読み取れるブロック数に関する列には以下のものがあります。

  • DATAFILE_BLOCK: データファイルの総ブロック数
  • BLOCKS_READ: RMANが読み取ったブロック数
  • BLOCKS: 生成されたバックアップ・ファイルのブロック数
  • BCTファイルの有無でlevel 1増分バックアップのブロック読み込み数(BLOCKS_READ)が変化する例を以下に示します。

    img-2

    この例では、増分バックアップを取得する前にSQLで更新を発行したわけではないので、増分バックアップで生成されたバックアップ・ファイルのブロック数(BLOCKS)はどちらの場合も1になっています。

    BCTファイルがない場合でも、RMANは未使用ブロックの読み取りをスキップするので、データファイルの全ブロック数(DATAFILE_BLOCKS)よりも読み取ったブロック数(BLOCKS_READ)は小さくなります。しかし、BCTファイルを有効にした場合は読み取ったブロック数(BLOCKS_READ)はデータファイル全体のブロック数(DATAFILE_BLOCKS)に比べてかなり小さな値になります。

    2 バックアップの並列化

    Oracle DatabaseのEnterprise Editionでは、1つのRMANのBACKUPコマンドで複数のOracleサーバー・プロセスの接続を生成し、複数プロセスでバックアップを並列化することができます。1つのファイル転送経路をRMANチャネルと呼びます。デフォルトでは並列度は1で、1つのRMANチャネルによりバックアップされます。

    並列度を変更するにはCONFIGUREコマンドでPARALLELISMを設定します。以下の例では並列度を4に設定しています。

    RMAN> CONFIGURE DEVICE TYPE disk PARALLELISM 4;
    
    新しいRMAN構成パラメータ:
    CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
    新しいRMAN構成パラメータが格納できました
    

    RMANのバックアップの並列化のデフォルトの動作は、複数のファイルがあれば複数のファイルのバックアップを並列に行うというものです。ほとんどのデータベース構成ではこの動作で十分です。

    Oracle Databaseの表領域のデータファイル構成は2種類あり、smallfileファイル表領域とbigfile表領域があります。Oracle9iまではsmallfile表領域のみでしたが、Oracle Database 10gでAutomatic Storage Management(ASM)とともにbigfile表領域が導入されました。これらの違いはデータファイルの個数とサイズの制限です。

      データファイル数上限 データファイルごとの
    データブロック数上限
    smallfile表領域 1022 2^22(4M)個
    bigfile表領域 1 2^32(4G)個

    smallfile表領域からbigfile表領域へ何が変わったかというと、表領域あたりのデータファイルの個数は1/1K倍に減少しましたが、1データファイル当たりのデータブロックの個数上限が1K倍に増加しました。そのため、表領域当たりのデータブロックの個数の総数上限はどちらもほぼ4G個で変わりがありませんが、データベース全体で管理するデータファイルの個数を減らすことができます。bigfile表領域はASMのように1つのファイルを複数の物理ストレージ・デバイスに分散する構成での使用を想定しています。

    データブロックのサイズは多くの場合8192(8K)バイトが選択されます。このサイズでbigfile表領域を作成すると、1つのデータファイルは最大32T(8K×4G個)バイトにもなります。そのため、1つの巨大なデータファイルのバックアップを高速に行う仕組みが求められます。

    RMANは1つのデータファイルを複数に分割してバックアップを取得することができ、これをマルチセクション・バックアップといいます。マルチセクション・バックアップにするにはBACKUPコマンドにSECTION SIZEを指定します。マルチセクション・フル・バックアップはOracle Database 11g Release 1で導入され、Oracle Database 12c Release 1からはマルチセクション増分バックアップに対応しました。マルチセクション増分バックアップは高速増分バックアップと複数のRMANチャネルとも組み合わせることが可能です。

    img-3

    以下の例はSECTION SIZEに1G(Byte)を指定した増分更新バックアップ用のレベル1増分バックアップです。

    RMAN> BACKUP
    2>   SECTION SIZE 1G
    3>   INCREMENTAL LEVEL 1
    4>   FOR RECOVER OF COPY WITH TAG 'incr_update'
    5>   DATABASE ;
    

    もしSECTION SIZEが小さいためにセクション数が256を超える場合、セクション数が256になるようにサイズが調整されます。

    また、複数のRMANチャネルの並列化によりバックアップ時間が短縮する暗黙の前提として、並列に実行される処理が複数の物理デバイスに分散しているというものがあります。特に、ストレージがハードディスクで構成されていた場合、1台のハードディスクに複数のI/Oリクエストを並列に発行してもスループットは向上しません。ASMのように1つのファイルが複数の物理デバイスに分散されるような構成を想定しています。

    今回はRMANによるバックアップ時間の短縮について解説しました。Oracle Database 12c Release 1以降のEnterprise Editionでは、マルチセクション増分バックアップと高速増分バックアップ、増分更新バックアップ、そしてRMANチャネルの並列化を組み合わせることができます。