5 Oracle Data Pumpのパフォーマンス

Oracle Data Pumpエクスポートおよびインポートがオリジナルのエクスポートおよびインポート・ユーティリティよりも優れている点と、エクスポート操作およびインポート操作のパフォーマンスを向上させる方法を学習します。

Oracle Data Pumpエクスポートおよびインポート・ユーティリティは、大規模データベースを対象に設計されています。大量のデータおよびメタデータがある場合は、オリジナルのエクスポート・ユーティリティおよびインポート・ユーティリティと比較して、データのパフォーマンスが向上します。(データ・ポンプ・エクスポート・ユーティリティおよびデータ・ポンプ・インポート・ユーティリティでのメタデータ抽出およびデータベース・オブジェクト作成のパフォーマンスは、基本的にはオリジナルのエクスポート・ユーティリティおよびインポート・ユーティリティのパフォーマンスと同様です。)

5.1 Oracle Data Pumpエクスポートおよびインポートのデータ・パフォーマンスの改善点

Oracle Data Pumpエクスポート(expdp)およびインポート(impdp)には、従来のエクスポート(exp)およびインポート(imp)と比べてパフォーマンスが向上した多数の機能が含まれています。

次に、データ・ポンプ・エクスポートおよびインポート・ユーティリティでのパフォーマンス向上の要因を示します。

  • 複数のワーカー・プロセスで、表間およびパーティション間のパラレル処理を実行して、複数のパラレル・ダイレクト・パス・ストリームで表をロードおよびアンロードできます。

  • 非常に大きい表およびパーティションの場合は、単一のワーカー・プロセスで、外部表による方法を使用してデータにアクセスすると、複数のパラレル問合せおよびパラレルDML I/Oサーバー・プロセスを介してパーティション間のパラレル処理を選択できます。

  • Oracle Data Pumpでは、索引の作成およびパッケージ本体のロードに並列処理を使用します。

  • ダンプ・ファイルの読取りと書込みはサーバーで直接実行されるため、クライアントにデータを移動する必要はありません。

  • ダンプ・ファイルの格納形式は、ダイレクト・パスAPIの内部ストリーム形式です。この形式は、表領域内部のOracle Databaseデータ・ファイルに格納されている形式とほとんど同じです。したがって、クライアント側ではINSERT文バインド変数への変換は実行されません。

  • サポートされているデータ・アクセス方法(ダイレクト・パスおよび外部表による方法)は従来のSQLより高速です。ダイレクト・パスAPIを使用すると、単一ストリームでの最大のパフォーマンスが実現します。外部表機能を使用すると、Oracle Databaseのパラレル問合せ機能とパラレルDML機能を有効活用できます。

  • エクスポート時に、メタデータとデータの抽出を同時に実行できます。

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

Oracle Data Pumpは、すべての使用可能なリソースを最大限に活用し、スループットを最大化してジョブ経過時間を最小化するように設計されています。

使用可能なリソースを最大化するために、システムではCPU、メモリーおよびI/Oの全体的なバランスが取られている必要があります。また、パフォーマンス・チューニングの標準原理が適用されます。たとえば、ダンプ・ファイルの書込みおよび読取りは並列処理されるため、パフォーマンスを最大化するには、ダンプ・ファイル・セットに含まれるファイルを個別のディスクに配置するようにします。また、それらのダンプ・ファイルは、ソースまたはターゲットの表領域が常駐するディスクとは別のディスクに常駐させる必要があります。

パフォーマンス・チューニングを行う場合は、パフォーマンスとリソース消費のバランスをとることが必要です。

5.2.1 Oracle Data Pumpのリソース消費の管理方法

PARALLELパラメータを使用すると、Oracle Data Pumpエクスポートおよびインポートのジョブごとのリソース消費を動的に増減できます。

Oracle Data Pumpのリソース割当ては、PARALLELパラメータを使用してOracle Data Pumpジョブの並列度を指定することで管理できます。最大のスループットを得るには、PARALLELをCPU数の2倍(CPUごとに2つのワーカー)以下に設定してください。

並列度を増加すると、CPU使用量、メモリー使用量およびI/O帯域幅使用も増大します。これらのリソースの使用可能な量が適切であることを確認してください。要求されるI/O帯域幅の獲得が必要な場合は、複数のファイルを異なるディスク・デバイス間またはチャネル間に分散できます。

並列度を最大にするには、並列度ごとに少なくとも1つのファイルを提供する必要があります。これを簡単に行うには、たとえばfile%u.dmpのように、ファイル名に置換変数を使用します。ただし、ディスクの設定によって競合問題(たとえば、単純な非ストライプ・ディスクなどによる問題)が発生する場合は、ダンプ・ファイルのすべてを1つのデバイスに配置しないようにすることもできます。その場合は、置換変数を使用して複数のファイル名を指定し、それぞれのファイルを別々のディレクトリ(別々のディスク)に配置することをお薦めします。高速CPUおよび高速ディスクを使用する場合でも、CPUとディスク間のパスは、システムが維持できる並列度の量を制約する要因になることがあります。

Oracle Data PumpのPARALLELパラメータは、Oracle Database Enterprise Edition 11g以降でのみ有効です。

5.2.2 圧縮および暗号化によるパフォーマンスへの影響

Oracle Data Pumpの圧縮と暗号化に関連するパラメータを使用すると、特にネットワーク・モードで実行されるジョブのパフォーマンスを向上できます。

パフォーマンスのチューニングを試行しているときには、リソースの可用性に注意してください。圧縮と暗号化がパフォーマンスに悪影響を与えることがあります。これは、RAWデータの変換を実行するために余分なCPUリソースが必要になるためです。両者はトレードオフの関係にあります。

5.2.3 統計のエクスポートおよびインポートにおけるメモリーの考慮事項

リリース12.1より前のリリースで作成したOracle Data Pumpエクスポートのダンプ・ファイルを使用するときに、大量の統計データが含まれていると、インポート操作中に大量のメモリー要求が発生することがあります。

インポート操作時のメモリーの不足を回避するには、インポートの開始前に十分にメモリーを割り当てる必要があります。必要とされるメモリーの正確な量は、インポートするデータの量、使用しているプラットフォーム、または使用する構成に固有の要素によって異なります。

この問題にまとめて対処するには、エクスポートまたはインポート操作のいずれかの際にデータ・ポンプのEXCLUDE=STATISTICSパラメータを設定します。ターゲット・データベースで統計を再生成する場合は、インポートの完了後にDBMS_STATS PL/SQLパッケージを使用できます。

5.3 Oracle Data Pumpユーティリティのパフォーマンスに影響する初期化パラメータ

Oracle Data Pumpのインポートおよびエクスポートから最高のパフォーマンスを引き出すためにできることを学習します。

5.3.1 Oracle Data Pumpのパラメータに関するパフォーマンス・ガイドライン

エクスポートおよびインポートで最適なパフォーマンスが得られるように、パフォーマンスの向上につながる初期化パラメータの設定を確認してテストしてください。

特定のOracle Database初期化パラメータの設定が、データ・ポンプ・エクスポートおよびデータ・ポンプ・インポートのパフォーマンスに影響する場合があります。

特に、次の設定を使用してパフォーマンスを改善できます。ただし、プラットフォームによっては同様の効果を得られない場合もあります。

  • DISK_ASYNCH_IO=TRUE

  • DB_BLOCK_CHECKING=FALSE

  • DB_BLOCK_CHECKSUM=FALSE

次の初期化パラメータには、並列度が最大になる値を指定する必要があります。

  • PROCESSES

  • SESSIONS

  • PARALLEL_MAX_SERVERS

さらに、初期化パラメータSHARED_POOL_SIZEUNDO_TABLESPACEは、余裕のある大きさにする必要があります。具体的な値は、データベースのサイズによって異なります。

5.3.2 GoldenGateレプリケーション環境におけるバッファ・キャッシュのサイズの設定

Oracle Data Pumpでは、プロセス間の通信にGoldenGateレプリケーション機能を使用します。

SGA_TARGET初期化パラメータが設定されていると、STREAMS_POOL_SIZE初期化パラメータは自動的に合理的な値に設定されます。

SGA_TARGET初期化パラメータが設定されていない状態で、STREAMS_POOL_SIZE初期化パラメータも定義されていない場合は、ストリーム・プールのサイズは自動的に共有プール・サイズの10%(デフォルト)になります。

ストリーム・プールが作成されると、バッファ・キャッシュに割り当てられたメモリーから必要なSGAメモリーが確保されるため、キャッシュのサイズは、DB_CACHE_SIZE初期化パラメータで指定したサイズよりも少なくなります。つまり、バッファ・キャッシュが必要最小限のSGAで構成されていた場合、データ・ポンプ操作は正しく動作しません。データ・ポンプ操作を正常に実行するために、STREAMS_POOL_SIZEの値は、最小サイズの10MBにすることをお薦めします。

5.3.3 複数ユーザーによるOracle Data Pumpジョブのリソース使用率の管理

同じデータベース環境で複数のユーザーがデータ・ポンプ・ジョブを実行しているときに、リソースの使用をより詳細に制御するには、MAX_DATAPUMP_JOBS_PER_PDBおよびMAX_DATAPUMP_PARALLEL_PER_JOB初期化パラメータを使用します。

初期化パラメータMAX_DATAPUMP_JOBS_PER_PDBでは、プラガブル・データベース(PDB)ごとの同時Oracle Data Pumpジョブの最大数を決定します。Oracle Database 19c以降のリリースでは、このパラメータをAUTOに設定できます。この設定は、SESSIONS初期化パラメータ値の50パーセント(50%)になるように、Oracle Data PumpがMAX_DATAPUMP_JOBS_PER_PDBの実際の値を導出することを意味します。この値をAUTOに設定しない場合、デフォルト値は100です。この値は0から250にまで設定できます。

Oracle Databaseリリース19c以降には、初期化パラメータMAX_DATAPUMP_PARALLEL_PER_JOBがあります。特定のデータベース環境で複数のユーザーが同時にデータ・ポンプ・ジョブを実行する場合は、このパラメータを使用するとリソースの使用率を詳細に制御できます。パラメータMAX_DATAPUMP_PARALLEL_PER_JOBでは、Oracle Data Pumpジョブごとに使用可能にするパラレル処理の最大数を指定します。具体的なプロセスの最大数を指定することも、AUTOを選択することもできます。設定値を指定する場合、この最大数は1から1024に設定できます(デフォルトは、1024 です)。AUTOを指定すると、Oracle Data PumpはSESSIONS初期化パラメータの値の25パーセント(25%)になるようにMAX_DATAPUMP_PARALLEL_PER_JOBの実際の値を導出します。