23 RMANのパフォーマンスのチューニング

この章のトピックは、次のとおりです:

23.1 RMANのパフォーマンスのチューニングの目的

RMANのチューニングの目的は、ジョブのボトルネックを特定し、RMANコマンド、初期化パラメータまたは物理メディアの調整を利用して、パフォーマンスを向上することです。

RMANのバックアップ・ジョブまたはリストア・ジョブは、別々のフェーズまたはコンポーネントに分けることができます。RMANジョブでのこれらのフェーズのうち、最も低速なものをボトルネックといいます。

23.2 RMANのパフォーマンスのチューニングの基本的な概念

RMANのパフォーマンスをチューニングするには、RMANがバックアップをどのように作成するかについて、詳細に理解しておく必要があります。バックアップの作業は1つ以上のチャネルで行われます。チャネルは、ストレージ・デバイスへのバイト・ストリームを表しています。

バイト・ストリームは、メモリー内の入力バッファからCPU経由で出力バッファに渡され、さらにそこからストレージ・デバイスに渡されます。2つのテープ・デバイスにバックアップするように指定するには、2つのテープ・チャネルを割り当て、各バイト・ストリームが別々のデバイスに渡されるようにします。

各チャネルの作業は、チャネルのタイプがディスクまたはシステム・バックアップ・テープ(SBT)のいずれであるかにかかわらず、個別のフェーズに細分化されます。次の表に、これらのフェーズを示します。

表23-1 チャネル作業のフェーズ

順序 フェーズ 説明 追加情報
1 読取りフェーズ

ディスクのブロックが入力バッファに読み取られます。

「読取りフェーズ」

2 コピー・フェーズ

入力バッファから出力バッファにブロックがコピーされ、ブロックに対する追加処理が実行されます。

「コピー・フェーズ」

3 書込みフェーズ

出力バッファのブロックがストレージ・メディアに書き込まれます。書込みフェーズは、バックアップ・メディアのタイプに応じて、次の相互排他的な形式のいずれかになります。システム・バックアップ・テープ(SBT)の書込みフェーズまたはディスクの書込みフェーズ。

図23-1に、3つのディスクに格納されているデータをバックアップする2つのチャネルを示します。各チャネルはデータを入力バッファに読み取り、入力バッファから出力バッファへのコピー時にデータを処理し、出力バッファからのデータをディスクに書き込みます。

図23-1 ディスクへのマルチチャネル・バックアップのフェーズ

図23-1の説明が続きます
「図23-1 ディスクへのマルチチャネル・バックアップのフェーズ」の説明

図23-2は、同様に、3つのディスクに格納されているデータをバックアップする2つのチャネルを示していますが、1つのディスクがネットワーク上にリモートでマウントされています。各チャネルはデータを入力バッファに読み取り、入力バッファから出力バッファへのコピー時にデータを処理し、出力バッファからのデータをテープに書き込みます。チャネル1はローカル接続されたテープ・ドライブにデータを書き込み、チャネル2はネットワークを介してリモート・メディア・サーバーにデータを送信します。

図23-2 テープへのマルチチャネル・バックアップのフェーズ

図23-2の説明が続きます
「図23-2 テープへのマルチチャネル・バックアップのフェーズ」の説明

データをリストアする場合、これらのステップが逆順で実行され、読取りと書込みの操作が逆になります。次の項では、RMANのチューニングの概念について、バックアップを例に説明します。

デバイスで使用できるチャネルの数によって、RMANがこのデバイスに対する読取りまたは書込みをパラレルに行えるかどうかが決まります。チャネルの数は、使用されるストレージ・デバイスの数と同じにすることをお薦めします。したがって、RMANがディスクを使用するとき、チャネルの数はアクセスされる物理ディスクの数と同じである必要があります。RMANでテープを使用する場合は、チャネルの数は、RMANがアクセスするテープ・ドライブの数と同じである必要があります。

23.2.1 読取りフェーズ

RMANチャネルがディスクからデータを読み取る場合、複数の要因がパフォーマンスに影響することがあります。

この項の次のトピックでは、これらの要因について説明します。

23.2.1.1 入力ディスク・バッファの割当て

バックアップ中、RMANチャネルは、入力ファイルのブロックをI/Oディスク・バッファに読み取ります。ディスク・サブシステムのデータベース・ファイルは、自動ストレージ管理(ASM)、他のボリューム・マネージャまたはファイル・システムで管理できます。バックアップのチューニングに関する考慮事項は、データベース・ファイルをASMで管理するかどうかによって異なります。

入力バッファの割当ては、ファイルをどのように多重化するかによって異なります。バックアップの多重化は、バックアップ内のいくつかのファイルを複数のソースから同時に読み取り、1つのバックアップ・ピースに書き込むRMANの機能です。同時に読み取られ、同じバックアップ・ピースに書き込まれる入力ファイルの数を表す多重化レベルを決定するアルゴリズムの詳細は、「多重RMANバックアップ・セットについて」を参照してください。この章を読む前に、これらの項を参照してください。

RMANチャネルは、ディスクのファイルをバックアップするときに、表23-2に示す規則を使用して、作成する入力ディスクのバッファのサイズを決定します。

表23-2 データファイルの読取りバッファのサイズを決定するアルゴリズム

多重化レベル 入力ディスクのバッファのサイズ

4以下

すべての入力ファイル用の合計バッファ・サイズが16メガバイト(MB)になるように、1MBのバッファが16個割り当てられます。

4より大きく8以下

すべての入力ファイル用の合計バッファ・サイズが16MB未満になるように、512キロバイト(KB)のディスク・バッファがいくつか割り当てられます。

8より大きい

各入力ファイル用の合計バッファ・サイズが512KBになるように、各ファイルに128KBのディスク・バッファが4つずつ割り当てられます。

図23-3に、1つのチャネルで4つのデータファイルをバックアップする例を示します。MAXOPENFILESは4に設定され、FILESPERSETは4に設定されています。したがって、多重化のレベルは4です。このため、各データファイル用の合計バッファ・サイズは4MBになります。すべてのバッファを組み合せたサイズは16MBになります。

図23-3 ディスク・バッファの割当て

図23-3の説明が続きます
「図23-3 ディスク・バッファの割当て」の説明

ASMに格納されているファイルをチャネルがバックアップする場合、多重化のレベルが1の場合にのみ、入力ディスクのバッファの数はASMディスク・グループの物理ディスクの数と等しくなります。たとえば、16個の物理ディスクを含むASMディスク・グループにデータファイルが保存されていると、チャネルはそのデータファイルのバックアップ用に16個の入力バッファを割り当てます。

チャネルがディスクからバックアップをリストアする場合は、4つのバッファが割り当てられます。バッファのサイズは、オペレーティング・システムによって異なります。

23.2.1.2 同期ディスクI/Oと非同期ディスクI/O

チャネルによるディスクに対する読取りまたは書込みでは、I/Oは同期I/Oと非同期I/Oのいずれかです。

ディスクI/Oが同期の場合、サーバー・プロセスは一度に1つのタスクのみを実行できます。ディスクI/Oが非同期の場合、サーバー・プロセスは1つのI/O操作を開始し、そのI/Oが完了するまで待機している間に他の作業を実行できます。また、1つ目のI/Oの完了の待機に入る前に、複数のI/O操作を開始することもできます。

ASMディスク・グループから読み取るときには、可能な場合は非同期ディスクI/Oを使用します。また、ボリューム・マネージャで管理されているRAWデバイスからチャネルが読み取る場合も、非同期ディスクI/Oが適切に動作します。一部のオペレーティング・システムでは、固有の非同期ディスクI/Oをサポートしています。データベースは、使用可能な場合はその機能を利用します。

23.2.1.3 ディスクI/Oスレーブ

固有の非同期I/Oをサポートしていないオペレーティング・システムの場合、データベースは、特別なI/Oスレーブ・プロセスを使用してその機能をシミュレートできます。このようなプロセスは、別のプロセスのかわりにI/Oを実行する専用のプロセスです。

ディスクI/Oスレーブを制御するには、動的でないDBWR_IO_SLAVES初期化パラメータを設定します。このパラメータでは、データベース・ライター・プロセス(DBWR)で使用されるI/Oサーバー・プロセスの数を指定します。デフォルトでは、この値は0(ゼロ)であり、I/Oサーバー・プロセスは使用されません。DBWR_IO_SLAVESが0(ゼロ)以外の値である場合に、非同期I/Oが無効であると、4つのバックアップ・ディスクI/Oスレーブが割り当てられます。

データベースがI/Oスレーブ用の共有バッファを取得する際、次のことが行われます。

  • LARGE_POOL_SIZE初期化パラメータが設定されていて、かつDBWR_IO_SLAVESパラメータの値が0(ゼロ)以外に設定されている場合、データベースでは、ラージ・プールからのメモリーの取得が試行されます。この値が十分大きくない場合、アラート・ログにエラーが記録されます。また、共有プールからのバッファの取得は試行されず、非同期I/Oは使用されません。

  • LARGE_POOL_SIZE初期化パラメータが設定されていない場合、または0(ゼロ)に設定されている場合、データベースは、共有プールからのメモリーの取得を試行します。

  • データベースが十分なメモリーを取得できない場合、プログラム・グローバル領域(PGA)からI/Oバッファ・メモリーを取得し、このバックアップに同期I/Oを使用するというメッセージをalert.logファイルに書き込みます。

ラージ・プールのメモリーは、共有サーバー、パラレル問合せ、RMANのI/Oスレーブ・バッファなどの多くの機能に使用されます。ラージ・プールを構成すると、RMANがメモリー取得のために他のサブシステムと競合することを防止できます。

共有プールからの連続メモリーの割当ての要求は、通常は小さいサイズ(5KB未満)の要求です。ただし、大きいサイズの連続メモリーの割当てが要求されると、割当てが失敗するか、または要求された量の連続メモリーを解放するための大量のクリーンアップが必要となる場合があります。このメモリー要求は、共有プールでは満たせない場合がありますが、ラージ・プールでは満たすことができます。ラージ・プールには最低使用頻度(LRU)リストが存在しないため、ラージ・プールからの古いメモリーの削除は試行されません。

23.2.1.4 チャネルのRATEパラメータ

RATEパラメータを使用すると、RMANが過度のディスク帯域幅を使用してオンライン・パフォーマンスが低下することを防止するために、読取りバイト数の上限を設定できます。基本的に、RATEは、バックアップの制限として機能します。

ALLOCATEコマンドおよびCONFIGURE CHANNELコマンドでは、RATEパラメータで、チャネルで読み取られる速度(バイト/秒)を指定します。たとえば、RATE=1500Kと設定し、各ディスク・ドライブの速度が3MB/秒である場合、チャネルは、ディスク帯域幅の一部をオンライン・システム用に確保します。

23.2.2 コピー・フェーズ

コピー・フェーズでは、チャネルによって、入力バッファから出力バッファにブロックがコピーされ、追加処理が実行されます。

たとえば、データがディスクから読み取られてテープにバックアップされる場合、データはディスク・バッファから出力テープ・バッファにコピーされます。

コピー・フェーズには、次の処理が含まれています。

  • 検証

  • 圧縮

  • 暗号化

ブロックの検証を実行すると、ブロックが破損していないかどうかが確認されます。通常、この処理ではCPUに負荷はかかりません。

バイナリ圧縮を実行すると、RMANで、バックアップ・セット内のデータに圧縮アルゴリズムが適用されます。バイナリ圧縮は、CPUに負荷がかかる場合があります。RMANでバックアップに使用する圧縮アルゴリズムを選択できます。RMANの基本の圧縮レベルは、ほとんどのシナリオで圧縮率に優れています。Oracle Advanced Compressionオプションを有効にすると、圧縮率と必要なCPUリソースの間の妥協点として選択できる様々なレベルが示されます。

バックアップ暗号化を実行すると、V$RMAN_ENCRYPTION_ALGORITHMSに表示されているアルゴリズムのいずれかを使用して、バックアップ・セットが暗号化されます。RMANには、透過モード、パスワード保護モードおよびデュアル・モードの3つの暗号化モードがある。バックアップの暗号化は、CPUに負荷がかかる場合があります。

23.2.3 システム・バックアップ・テープ(SBT)への書込みフェーズ

SBTへのバックアップ時、RMANは、メディア管理ソフトウェアにバイト・ストリームを渡し、このストリームに一意の名前を関連付けます。ストリームの格納方法および格納場所の詳細は、メディア・マネージャによって管理されます。したがって、テープへのバックアップでは、RMANとメディア・マネージャの両方が相互に作用します。

SBTへの書込みフェーズに影響を与える要因については、次の各項を参照してください。

23.2.3.1 SBTへの書込みフェーズにおけるRMANの構成要素

SBTへの書込みフェーズに影響するRMAN固有の要因は、ディスクの読取りに影響する要因と類似しています。いずれの場合も、バッファの割当て、スレーブ・プロセスおよび同期I/Oまたは非同期I/Oによってパフォーマンスが左右されます。

23.2.3.1.1 テープ・バッファの割当て

SBTデバイスにバックアップする場合、またはそこからリストアする場合、デフォルトでは、テープ書込み用(表23-4に示すようにデータをリストアする場合は読取り用)の各チャネルに4つのバッファが割り当てられます。テープI/Oバッファのサイズは、プラットフォームによって異なります。この値は、ALLOCATE CHANNELコマンドまたはCONFIGURE CHANNELコマンドのPARMSパラメータおよびBLKSIZEパラメータで変更できます。

図23-4 テープ・バッファの割当て

図23-4の説明が続きます
「図23-4 テープ・バッファの割当て」の説明
23.2.3.1.2 テープI/Oスレーブ

RMANは、I/Oスレーブが使用されているかどうかに応じて、システム・グローバル領域(SGA)またはプログラム・グローバル領域(PGA)にテープ・バッファを割り当てます。初期化パラメータBACKUP_TAPE_IO_SLAVES=trueを設定した場合、テープ・バッファはSGAから割り当てられます。テープ・デバイスにアクセスできるのは、一度に1つのプロセスだけです。そのため、テープ・デバイス数に対応する必要な数のスレーブが起動されます。LARGE_POOL_SIZE初期化パラメータも設定されている場合は、ラージ・プールからバッファが割り当てられます。BACKUP_TAPE_IO_SLAVES=falseを設定した場合、バッファはPGAから割り当てられます。

I/Oスレーブを使用する場合、LARGE_POOL_SIZE初期化パラメータを設定し、SGAメモリーをサイズの大きいメモリー割当ての保持専用に確保しておきます。このパラメータによって、SGAメモリーのためにRMANのI/Oバッファとライブラリ・キャッシュが競合することを防止できます。テープI/OのI/Oスレーブが要求されたものの、そのために十分な領域がSGAに存在しない場合、スレーブは使用されず、アラート・ログにメッセージが書き込まれます。

BACKUP_TAPE_IO_SLAVESパラメータには、スレーブ・プロセスの数ではなく、RMANがスレーブ・プロセスを使用するかどうかを指定します。テープ・デバイスにアクセスできるのは、一度に1つのプロセスだけであり、RMANでは、テープ・デバイス数に対応する必要な数のスレーブが使用されます。

23.2.3.1.3 同期I/Oと非同期I/O

SBTチャネルによるデータの読取りまたはテープへの書込みでは、I/Oは常に同期です。テープI/Oでは、(手動または自動で)割当て済の各チャネルは1つのサーバー・プロセスに対応しています。ここでは、このプロセスをチャネル・プロセスと呼びます。

図23-5に、テープへのバックアップでの同期I/Oを示します。

次のステップが発生します。

  1. チャネル・プロセスが、テープ・バッファにブロックを書き込みます。

  2. チャネル・プロセスが、テープ・バッファを処理するメディア・マネージャ・コードを実行して、メディア・マネージャが追加の処理および格納を行えるように内部処理を行います。

  3. メディア・マネージャ・コードが、書込みが完了したことを示すメッセージをサーバー・プロセスに戻します。

  4. チャネル・プロセスが新しいタスクを開始できる状態になります。

図23-6に、テープへのバックアップでの非同期I/Oを示します。テープへの非同期I/Oは、テープ・スレーブを使用してシミュレートされます。この場合、各割当て済チャネルは1つのサーバー・プロセスに対応しています。この項の説明では、サーバー・プロセスをチャネル・プロセスと呼びます。各チャネル・プロセスに対して1つ(複数のコピーが存在する場合は複数)のテープ・スレーブが起動されます。

図23-6 非同期テープI/O

図23-6の説明が続きます
「図23-6 非同期テープI/O」の説明

次のステップが発生します。

  1. チャネル・プロセスが、テープ・バッファにブロックを書き込みます。

  2. チャネル・プロセスが、テープ・バッファを処理するためのメッセージをテープ・スレーブ・プロセスに送信します。テープ・スレーブ・プロセスが、テープ・バッファを処理するメディア・マネージャ・コードを実行して、メディア・マネージャが処理を行えるように内部処理を行います。

  3. テープ・スレーブ・プロセスが書込みを行っている間、チャネル・プロセスはデータファイルからデータを読み取り、追加の出力バッファを準備できます。

  4. テープ・スレーブ・チャネルは、メディア・マネージャ・コードから戻されると、新しいテープ・バッファを要求します。通常、その時点で新しいバッファが使用可能になっています。このため、チャネル・プロセスの待機時間が減少し、バックアップ時間が短縮されます。

23.2.3.2 SBTへの書込みフェーズにおけるメディア・マネージャの構成要素

テープへのバックアップの速度には複数の要因が影響します。

これには次の機能が含まれます。

23.2.3.2.1 ネットワーク・スループット

リモートのテープ・デバイスの場合、メディア・マネージャは、ネットワーク経由でデータを転送する必要があります。

たとえば、Oracle Secure Backupの管理ドメインには、ネットワークで接続された複数のクライアント・ホスト、メディア・サーバーおよびテープ・デバイスが含まれていることがあります。あるホストにデータベースがあり、別のホストに出力用のテープ・ドライブが接続されている場合、Oracle Secure Backupがネットワーク経由のデータ転送を管理します。ネットワークのスループットが、バックアップのパフォーマンスの上限になります。

23.2.3.2.2 固有の転送レート

テープ固有の転送レートは、圧縮なしでテープに書き込む場合の速度です。この速度は、バックアップ・レートの上限を表します。

バックアップのパフォーマンスの上限は、すべてのテープ・デバイスの転送レートの集計となります。バックアップ操作がそのレートで実行されており、必要以上にCPUを使用していない場合、チューニングしてもRMANのパフォーマンスは変わりません。

23.2.3.2.3 テープの圧縮

テープの圧縮レベルは、バックアップのパフォーマンスに重大な影響を及ぼします。テープの圧縮レベルが高い場合、持続的なバックアップの転送レートは高くなります。

たとえば、圧縮比が2:1で、テープ・ドライブ固有の転送レートが6MB/秒である場合、バックアップ速度は12MB/秒になります。この場合、RMANは、12MB/秒より高速なスループットでディスクを読み取ることができる必要があり、そうでない場合はこのディスクはバックアップのボトルネックになります。

ノート:

メディア・マネージャによるテープの圧縮機能とRMANによるバイナリ圧縮機能の両方を使用しないでください。メディア・マネージャによる圧縮が十分である場合は、こちらを使用することをお薦めします。RMANでのデータ圧縮によるCPUオーバーヘッドを許容できる場合は、RMANの圧縮バックアップ・セットを使用すると、圧縮していないバックアップ・セットをネットワークを介してメディア・マネージャに移動するときに使用される帯域幅を削減することができます。

23.2.3.2.4 テープ・ストリーム

書込み操作中のテープ・ストリームは、テープへのバックアップ・パフォーマンスに重大な影響を及ぼします。

多くのテープ・ドライブは、固定速度のストリーム・テープ・ドライブです。そのようなドライブはデータの書込み速度を変更できないため、テープへ書き込むデータがなくなると、テープを減速して停止する必要があります。通常、ドライブのバッファが空になっても、テープの移動が速すぎて書込み終了位置を越えてしまいます。そのためドライブで書込みを継続するには、書込みが終了した位置までテープを巻き戻す必要があります。複数の速度で動作するテープ・ドライブを利用すると、この問題を軽減できます。

23.2.3.2.5 物理テープ・ブロック・サイズ

物理テープ・ブロック・サイズは、バックアップのパフォーマンスに影響する場合があります。

ブロック・サイズは、メディア管理ソフトウェアが、1回の書込み操作でテープに書き込むデータの量です。通常、テープ・ブロック・サイズが大きいほど、バックアップが高速になります。物理テープ・ブロック・サイズは、RMANまたはOracle Databaseではなく、メディア管理ソフトウェアが制御します。詳細は、ご使用のメディア管理ソフトウェアのドキュメントを参照してください。

23.2.4 ディスクへの書込みフェーズ

ディスクへの書込みフェーズに影響する主な要因は、バッファ・サイズです。

バックアップの出力がディスクに存在する場合、各チャネルは、1MBずつの出力バッファを4つ割り当てます。ディスク・チャネルが、ディスク・サブシステムにブロックを書き込みます。ファイルをリストアするときの読取りフェーズは、ファイルをバックアップするときの書込みフェーズと似ています。ただし、ブロックの動く向きは逆です。

ディスクから非同期の読取りが行われる場合は、ディスクへの書込みも非同期になります。ディスクへの書込み時には、ディスクからの読取り時と同様にディスクI/Oスレーブを利用できます。

RMANが、複数のディスクにストライプ化されたディスクベースの出力先にファイルをバックアップする場合は、複数のチャネルを割り当てることができます。チャネルの数は、出力先のストライプ化されたディスクの数に制限されます。ASMは、複数のディスクにストライプ化された出力先の一例です。

23.3 RMANのパフォーマンスの問題を診断するためのV$ビューの使用方法

通常、チューニング・プロセスを開始する場合は、V$ビューを使用して、RMANのバックアップ操作およびリストア操作のどこで問題が発生しているかを特定します。

この項では、次の項目について説明します。

23.3.1 V$SESSION_LONGOPSによるRMANジョブの進捗状況の監視

V$SESSION_LONGOPSビューを問い合せると、バックアップ・ジョブおよびリストア・ジョブの進捗状況を監視できます。RMANは、V$SESSION_LONGOPSで詳細行と集計行の2つのタイプの行を使用します。

詳細行には、1つのジョブ・ステップによって処理されているファイルの説明が表示され、集計行には、RMANコマンドのすべてのジョブ・ステップによって処理されたファイルの説明が表示されます。ジョブ・ステップとは、1つのバックアップ・セットまたはデータファイルのコピーの作成またはリストアです。詳細行は、バックアップ・ステップ中、バッファに対する読取りまたは書込みが行われるたびに更新されるため、更新の粒度は小さくなります。集計行は、各ジョブ・ステップの完了時に更新されるため、更新の粒度は大きくなります。

表23-3に、RMANに最も関連するV$SESSION_LONGOPSの列を示します。通常、各バックアップ・セットの進捗状況を確認するには、集計行ではなく詳細行を表示します。

表23-3 RMANに関連するV$SESSION_LONGOPSの列

詳細行の説明

SID

RMANチャネルに対応するサーバー・セッションID

SERIAL#

サーバー・セッションのシリアル番号。この値はサーバー・セッションが再利用されるたびに変更されます。

OPNAME

行の説明テキスト。詳細行の例は、RMAN: datafile copyRMAN: full datafile backupRMAN: full datafile restoreなどです。

ノート: 集計行は、RMAN: aggregate inputおよびRMAN: aggregate outputのみです。

CONTEXT

バックアップ出力行では、この値は2です。それ以外のすべての行では、値は1です(ただし、この列を更新しないプロキシ・コピーは除く)。

SOFAR

この列の内容は、行に表示される操作のタイプによって次のように異なります。

  • イメージ・コピーの場合、読み取られたブロック数

  • バックアップ入力行の場合、バックアップされるファイルから読み取られたブロック数

  • バックアップ出力行の場合、バックアップ・ピースに書き込まれたブロック数

  • リストアの場合、この1つのジョブ・ステップでリストアされているファイルに処理されたブロック数

  • プロキシ・コピーの場合、コピーされたファイル数

TOTALWORK

この列の内容は、行に表示される操作のタイプによって次のように異なります。

  • イメージ・コピーの場合、ファイルのブロックの合計数。

  • バックアップ入力行の場合、このジョブ・ステップで処理されるすべてのファイルから読み取られるブロックの合計数。

  • バックアップ出力行の場合、RMANはバックアップ・ピースに書き込むブロック数を認識しないため、値は0になります。

  • リストアの場合、このジョブ・ステップでリストアされるすべてのファイルのブロックの合計数。

  • プロキシ・コピーの場合、このジョブ・ステップでコピーされるファイルの合計数。

バックアップ・ジョブまたはリストア・ジョブを実行する各サーバー・セッションは、1つのジョブ・ステップで必要な処理の合計と比較して、進捗状況をレポートします。たとえば、2つのチャネルを使用してデータベースをリストアし、各チャネルが2つのバックアップ・セットをリストアする場合(合計4セットをリストアする場合)、各サーバー・セッションは、1つのバックアップ・セットにおける進捗状況をレポートします。あるセットのリストアが完了すると、RMANは、リストアする次のセットでの進捗状況のレポートを開始します。

RMANジョブの進捗状況を監視するには:

  1. RMANジョブを開始する前に、次のSQL文を含むスクリプト・ファイル(この例ではlongops)を作成します。
    SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
           ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
    FROM   V$SESSION_LONGOPS
    WHERE  OPNAME LIKE 'RMAN%'
    AND    OPNAME NOT LIKE '%aggregate%'
    AND    TOTALWORK != 0
    AND    SOFAR <> TOTALWORK;
    
  2. RMANを起動し、ターゲット・データベースおよびリカバリ・カタログ(使用している場合)に接続します。
  3. RMANジョブを起動します。たとえば、次のように入力します。
    RMAN> RESTORE DATABASE;
    
  4. RMANジョブの実行中に、SQL*Plusを起動し、ターゲット・データベースに接続してlongopsスクリプトを実行し、RMANジョブの進捗状況を確認します。RMANジョブの実行中に問合せを繰り返すと、次のような出力が表示されます。
    SQL> @longops
           SID    SERIAL#    CONTEXT      SOFAR  TOTALWORK %_COMPLETE
    ---------- ---------- ---------- ---------- ---------- ----------
             8         19          1      10377      36617      28.34
    
    SQL> @longops
           SID    SERIAL#    CONTEXT      SOFAR  TOTALWORK % COMPLETE
    ---------- ---------- ---------- ---------- ---------- ----------
             8         19          1      21513      36617      58.75
    
    SQL> @longops
           SID    SERIAL#    CONTEXT      SOFAR  TOTALWORK % COMPLETE
    ---------- ---------- ---------- ---------- ---------- ----------
             8         19          1      29641      36617      80.95
    
    SQL> @longops
           SID    SERIAL#    CONTEXT      SOFAR  TOTALWORK % COMPLETE
    ---------- ---------- ---------- ---------- ---------- ----------
             8         19          1      35849      36617       97.9
    
    SQL> @longops
    no rows selected
    
  5. 2分以上の間隔でlongopsスクリプトを実行しているときに、%_COMPLETE列の値が増加しない場合は、RMANで問題が発生しています。詳細は、「RMANとメディア・マネージャの相互作用の監視」を参照してください。

長時間の作業の実行を頻繁に監視する場合、SQL*Plusを実行するホスト・オペレーティング・システムでシェル・スクリプトまたはバッチ・ファイルを作成して、この問合せを繰り返し実行できます。

23.3.2 V$BACKUP_SYNC_IOおよびV$BACKUP_ASYNC_IOによるボトルネックの特定

バックアップまたはリストアのボトルネックの原因を特定し、バックアップ・ジョブの詳細な進捗を確認するには、V$BACKUP_SYNC_IO ビューおよびV$BACKUP_ASYNC_IOビューを使用できます。

バックアップを実行中のプロセス(一部のプラットフォームではスレッド)にI/Oが同期している場合は、V$BACKUP_SYNC_IOに行が表示されます。I/Oが非同期の場合は、V$BACKUP_ASYNC_IOに行が表示されます。非同期I/Oは、I/Oプロセスによって、または基礎となるオペレーティング・システムがサポートしている場合に実行されます。

データベース・インスタンスが停止するまで、バックアップ・ジョブまたはリストア・ジョブの結果はメモリーに残ります。このため、ジョブの完了後にビューを問い合せることができます。

I/Oが同期している場合に、テープがストリーム化されているかどうかを確認するには:

  1. SQL*Plusを起動し、ターゲット・データベースに接続します。
  2. V$BACKUP_SYNC_IOビューまたはV$BACKUP_ASYNC_IOビューのEFFECTIVE_BYTES_PER_SECOND列を問い合せます。

    EFFECTIVE_BYTES_PER_SECONDがハードウェアのロー・キャパシティ未満の場合、そのテープはストリーム化されていません。EFFECTIVE_BYTES_PER_SECONDがハードウェアのロー・キャパシティより大きい場合、そのテープはストリーム化されている場合とされていない場合があります。これは、圧縮によって、EFFECTIVE_BYTES_PER_SECONDが実際のI/O速度より高速になる場合があるためです。

関連項目:

これらのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

23.3.2.1 同期I/Oのボトルネックの特定

V$BACKUP_SYNC_IOビューを問い合せて、同期I/Oのボトルネックを特定します。

同期I/Oでは、すべての同期I/Oがプロセスのボトルネックになるため、特定のボトルネックを識別することは困難です。同期I/Oをチューニングする唯一の方法は、I/Oレート(バイト/秒)をデバイスの最大スループット・レートと比較することです。I/Oレートが、デバイスで指定されているレートより低い場合、バックアップ・プロセスおよびリストア・プロセスのこの側面をチューニングすることを考慮します。

同期I/Oのレートを確認するには:

  1. SQL*Plusを起動し、ターゲット・データベースに接続します。
  2. V$BACKUP_SYNC_IOビューのDISCRETE_BYTES_PER_SECOND列を問い合せて、I/Oレートを表示します。

    V$BACKUP_SYNC_IOにデータが表示されている場合は、非同期I/Oを有効にしていないか、またはディスクI/Oスレーブを使用していないことが問題となっています。

23.3.2.2 非同期I/Oのボトルネックの特定

V$BACKUP_ASYNC_IOを問い合せて、非同期I/Oのボトルネックを特定します。

ロング・ウェイトは、バックアップ・プロセスまたはリストア・プロセスが、I/Oが完了するまで待機するようにオペレーティング・システムに通知した回数です。ショート・ウェイトは、バックアップ・プロセスまたはリストア・プロセスがオペレーティング・システム・コールを実行して、非ブロック化モードでI/Oの完了をポーリングした回数です。レディは、I/Oが使用可能な状態になっており、I/Oの完了をポーリングするためにオペレーティング・システム・コールを実行する必要がなかった回数です。

非同期I/Oのレートを確認するには:

  1. SQL*Plusを起動し、ターゲット・データベースに接続します。
  2. V$BACKUP_ASYNC_IOビューのLONG_WAITS列およびIO_COUNT列を問い合せて、I/Oレートを表示します。

    ボトルネックを特定する最も簡単な方法は、LONG_WAITSIO_COUNTで割った比率が最も大きいデータファイルを見つける方法です。たとえば、次の問合せを使用できます。

    SELECT   LONG_WAITS/IO_COUNT, FILENAME
    FROM     V$BACKUP_ASYNC_IO
    WHERE    LONG_WAITS/IO_COUNT > 0
    ORDER BY LONG_WAITS/IO_COUNT DESC;

ノート:

同期I/Oの使用時にBACKUP_DISK_IO_SLAVESを設定した場合、I/OはV$BACKUP_ASYNC_IOに表示されます。

関連項目:

V$BACKUP_SYNC_IOビューおよびV$BACKUP_ASYNC_IOビューの詳細は、Oracle Databaseリファレンスを参照してください。

23.4 RMANのバックアップのパフォーマンスのチューニング

バックアップのパフォーマンスは、多くの要因に影響を受けます。多くの場合、低速なバックアップを改善するには、試行錯誤が伴います。

バックアップの最高のパフォーマンスを取得するには、次のステップに従います。

  1. チャネル設定からのRATEパラメータの削除の説明に従って、チャネル設定のRATEパラメータを削除します。

  2. ディスクで非同期I/Oをサポートしていない場合、非同期I/OをシミュレートするためのDBWR_IO_SLAVESの設定の説明に従って、DBWR_IO_SLAVESパラメータを設定します。

  3. 共有メモリー問題を解決するためのLARGE_POOL_SIZEの設定の説明に従って、LARGE_POOL_SIZEパラメータを設定します。

  4. 読取り、書込みおよびコピーのフェーズのチューニングの説明に従って、バックアップ・パフォーマンスに影響するボトルネックをなくします。

23.4.1 チャネル設定からのRATEパラメータの削除

チャネルのRATEパラメータは、他のデータベース操作でより多くのディスク帯域幅を使用できるように、バックアップ・スループットを(増加ではなく)削減するためのパラメータです。バックアップがテープにストリーム配信されていない場合、RATEパラメータを設定していないことを確認してください。

RATEパラメータを削除するには:

  1. バックアップ・スクリプトを確認します。
  2. 次のいずれかを行います:
    • バックアップがRUNコマンド内に指定されていて、ALLOCATEコマンドにRATEパラメータが指定されている場合は、このパラメータを削除します。残りのステップはスキップします。

    • バックアップがRUNコマンド内に指定されていない場合は、RMANを起動し、ターゲット・データベースに接続して次のステップに進みます。

  3. SHOW ALLコマンドを実行して、現在構成されている設定を表示します。
  4. CONFIGURE CHANNELコマンドにRATEパラメータが設定されている場合は削除します。

23.4.2 非同期I/OをシミュレートするためのDBWR_IO_SLAVESの設定

一部のオペレーティング・システムでは、固有の非同期I/Oをサポートしています。ご使用のディスクが非同期I/Oをサポートしない場合にのみ、DBWR_IO_SLAVESを設定します。DBWR_IO_SLAVESに0(ゼロ)以外の値を設定すると、バックアップおよびリストアに固定数のディスクI/Oスレーブが使用され、非同期I/Oがシミュレートされます。

ディスクI/Oスレーブを有効にするには:

  1. SQL*Plusを起動し、ターゲット・データベースに接続します。
  2. データベースを停止します。
  3. DBWR_IO_SLAVES初期化パラメータを0(ゼロ)以外の値に設定します。

    この設定により、データベース・ライター・プロセスでスレーブを使用できるようになります。したがって、PROCESSES初期化パラメータの値を増やす必要がある場合があります。

  4. データベースを再起動します。
  5. RMANバックアップを再開します。

23.4.3 共有メモリー問題を解決するためのLARGE_POOL_SIZEの設定

LARGE_POOL_SIZE初期化パラメータは、メモリー不足のためにI/Oスレーブを起動できないというエラーがアラート・ログに書き込まれた場合に設定します。

アラート・ログ・メッセージは次のようになります。

ksfqxcre: failure to allocate shared memory means sync I/O will be used whenever
async I/O to file not supported natively

ラージ・プールは、RMANおよびその他の用途に使用されるため、すべてのユーザーに対応できる合計サイズにする必要があります。このことは特に、DBWR_IO_SLAVESが設定されており、DBWRプロセスにバッファが必要な場合に該当します。

ラージ・プールのサイズを設定するには:

  1. SQL*Plusを起動し、ターゲット・データベースに接続します。
  2. 必要に応じて、V$SGASTAT.POOLを問い合せて、特定のオブジェクト用のメモリーが存在するプール(共有プールまたはラージ・プール)を確認します。
  3. ターゲット・データベースにLARGE_POOL_SIZE初期化パラメータを設定します。

    ALTER SYSTEM SET文を実行して、パラメータを動的に設定します。LARGE_POOL_SIZEを設定するための計算式を次に示します。

    LARGE_POOL_SIZE =  number_of_allocated_channels * 
                       (16 MB + ( 4 *  size_of_tape_buffer ) )
    
  4. RMANバックアップを再開します。

関連項目:

23.4.4 読取り、書込みおよびコピーのフェーズのチューニング

いくつかのタスクを実行して、バックアップのパフォーマンスに影響を及ぼすボトルネックを特定および解消できます。

23.4.4.1 バックアップの検証を使用した読取りと書込みのボトルネックの識別

任意のバックアップ・ジョブで出力デバイスまたは入力ディスクI/Oのどちらがボトルネックになっているかを確実に確認する方法の1つは、あるバックアップ・タスクの実行時間と、同じタスクのBACKUP VALIDATEの実行時間を比較することです。バックアップのBACKUP VALIDATEは、実際のバックアップと同じディスク読取りを実行しますが、出力デバイスに対するI/Oは実行しません。

バックアップ時間と検証時間を比較するには:

  1. NLS環境の日付書式変数が、時刻を表示するように設定されていることを確認します。たとえば、NLS変数を次のように設定します。
    setenv NLS_LANG  AMERICAN_AMERICA.WE8DEC;
    setenv NLS_DATE_FORMAT "MM/DD/YYYY HH24:MI:SS"
    
  2. BACKUPコマンドでなくBACKUP VALIDATEコマンドを使用するようにバックアップ・スクリプトを編集します。
  3. バックアップ・スクリプトを実行します。
  4. RMAN出力を調べ、Starting backup atFinished backup atに示された時間の差を計算します。
  5. BACKUP VALIDATEコマンドでなくBACKUPコマンドを使用するようにバックアップ・スクリプトを編集します。
  6. バックアップ・スクリプトを実行します。
  7. RMAN出力を調べ、Starting backup atFinished backup atに示された時間の差を計算します。
  8. 検証と実際のバックアップでバックアップ時間を比較します。

    テープに対するBACKUP VALIDATEの時間が、テープへの実際のバックアップの時間とほとんど変わらない場合は、ディスクからの読取りがボトルネックになっている可能性があります。

    テープに対するBACKUP VALIDATEの時間が、テープへの実際のバックアップの時間より大幅に短い場合は、出力デバイスへの書込みがボトルネックになっている可能性があります。

23.4.4.2 読取りフェーズのチューニング

読取りフェーズをチューニングすると、RMANのパフォーマンスの改善に役立ちます。

RMANでは、出力デバイスの占有を継続するのに十分な速度で出力デバイスにデータ・ブロックを送信できないことがあります。たとえば、RMANは、増分バックアップ中、同じ計画の一環として以前にデータファイルをバックアップした後に変更されたブロックのみをバックアップします。ブロック・チェンジ・トラッキングを有効にしない場合、RMANは、変更されたブロックを検出するためにデータファイル全体をスキャンし、変更されたブロックを検出しながら出力バッファを一杯にする必要があります。変更されたブロックがほとんどなく、SBTバックアップを行っている場合、RMANは、テープ・ドライブへのストリームを継続するのに十分な速度で出力バッファを一杯にできないことがあります。

同時に読み取られ、RMANの同じバックアップ・ピースに書き込まれる入力ファイルの数を表す多重化レベルを調整すると、バックアップのパフォーマンスを向上させることができます。多重化のレベルは、チャネル上のMAXOPENFILES設定および各バックアップ・セット内の入力ファイル数の最小値です。次の表に、多重化のレベルを調整するときの推奨事項を示します。

表23-4 多重化のレベルの調整

ASM ストライプ化されたディスク 推奨

なし

はい

多重化のレベルを上げます。MAXOPENFILESまたは各バックアップ・セット内のファイル数のいずれが最小値かを確認してから、この値を増やします。

このようにして、RMANがテープ・バッファを一杯にする速度を上げ、ストリームを継続するのに十分な速度でバッファがメディア・マネージャに送信される確率を高くします。

なし

なし

チャネル上のMAXOPENFILES設定値を増やします。

はい

該当なし

チャネルのMAXOPENFILESパラメータを1または2に設定します。

関連項目:

23.4.4.3 コピーおよび書込みのフェーズのチューニング

読取りフェーズのパフォーマンスが良好な場合、ボトルネックとなっている可能性が高いのは、コピー・フェーズまたは書込みフェーズです。特に、RMANが、ストリームをサポートするのに十分な速度でテープ・ドライブにデータ・ブロックを送信しているときにテープがストリーム化されていない場合は、SBTへの書込みフェーズがボトルネックです。

次の表で説明する方法のいずれかを使用して、パフォーマンスを向上させます。

表23-5 コピーおよび書込みパフォーマンスを向上させる方法

方法 説明 追加情報

バックアップが全体バックアップの場合、増分バックアップの使用を検討します

増分レベル1のバックアップでは、変更されたブロックのみがデータファイルからテープに書き込まれるため、テープへの書込みに関するボトルネックは、バックアップ計画全体にはあまり影響を及ぼしません。特に、バックアップするデータベースのノードにテープ・ドライブがローカルに接続されていない場合、増分バックアップはより高速になる場合があります。

「RMANの増分バックアップの作成および更新」

バックアップで基本の圧縮アルゴリズムが使用されている場合は、Oracle Advanced Compressionオプションの使用を検討します

データベースのホストが複数のCPUを使用し、バックアップではバイナリ圧縮が使用されている場合は、チャネルの数を増やします

 

バックアップが暗号化されている場合は、暗号化アルゴリズムをAES128に変更します

AES128アルゴリズムは、最もCPUに負荷がかからないアルゴリズムです。

「バックアップ暗号化アルゴリズムの構成」

(テープ・バックアップのみ) テープI/Oバッファのサイズを調整します

サイズを設定するには、ALLOCATE CHANNELコマンドまたはCONFIGURE CHANNELコマンドのPARMSパラメータおよびBLKSIZEパラメータを使用します。テープI/Oバッファのサイズは、プラットフォームによって異なります。BLKSIZE設定は、デフォルトより優先されます。

 

(テープ・バックアップのみ) メディア管理ソフトウェアの設定を調整します

テープ・ブロック・サイズなどの一部のメディア・マネージャ設定は、バックアップのパフォーマンスに影響する場合があります。

 

RMANがASMにファイルをバックアップしている場合は、チャネルの数を増やします

たとえば、RMANが、16個の物理ディスクを含む1つのディスク・グループにデータベースをバックアップしている場合は、ディスク・チャネルの数を4から16の範囲で割り当てるか構成します。