5 Oracle Data Pumpのパフォーマンス
Oracle Data Pumpエクスポートおよびインポートがオリジナルのエクスポートおよびインポート・ユーティリティよりも優れている点と、エクスポート操作およびインポート操作のパフォーマンスを向上させる方法を学習します。
Oracle Data Pumpエクスポートおよびインポート・ユーティリティは、大規模データベースを対象に設計されています。大量のデータおよびメタデータがある場合は、オリジナルのエクスポート・ユーティリティおよびインポート・ユーティリティと比較して、データのパフォーマンスが向上します。(データ・ポンプ・エクスポート・ユーティリティおよびデータ・ポンプ・インポート・ユーティリティでのメタデータ抽出およびデータベース・オブジェクト作成のパフォーマンスは、基本的にはオリジナルのエクスポート・ユーティリティおよびインポート・ユーティリティのパフォーマンスと同様です。)
- Oracle Data Pumpエクスポートおよびインポートのデータ・パフォーマンスの改善点
Oracle Data Pumpエクスポート(expdp
)およびインポート(impdp
)には、従来のエクスポート(exp
)およびインポート(imp
)と比べてパフォーマンスが向上した多数の機能が含まれています。 - パフォーマンスのチューニング
Oracle Data Pumpは、すべての使用可能なリソースを最大限に活用し、スループットを最大化してジョブ経過時間を最小化するように設計されています。 - 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機能を有効活用できます。
-
エクスポート時に、メタデータとデータの抽出を同時に実行できます。
親トピック: Oracle Data Pumpのパフォーマンス
5.2 パフォーマンスのチューニング
Oracle Data Pumpは、すべての使用可能なリソースを最大限に活用し、スループットを最大化してジョブ経過時間を最小化するように設計されています。
使用可能なリソースを最大化するために、システムではCPU、メモリーおよびI/Oの全体的なバランスが取られている必要があります。また、パフォーマンス・チューニングの標準原理が適用されます。たとえば、ダンプ・ファイルの書込みおよび読取りは並列処理されるため、パフォーマンスを最大化するには、ダンプ・ファイル・セットに含まれるファイルを個別のディスクに配置するようにします。また、それらのダンプ・ファイルは、ソースまたはターゲットの表領域が常駐するディスクとは別のディスクに常駐させる必要があります。
パフォーマンス・チューニングを行う場合は、パフォーマンスとリソース消費のバランスをとることが必要です。
- Oracle Data Pumpのリソース消費の管理方法
PARALLEL
パラメータを使用すると、Oracle Data Pumpエクスポートおよびインポートのジョブごとのリソース消費を動的に増減できます。 - 圧縮および暗号化によるパフォーマンスへの影響
Oracle Data Pumpの圧縮と暗号化に関連するパラメータを使用すると、特にネットワーク・モードで実行されるジョブのパフォーマンスを向上できます。 - 統計のエクスポートおよびインポートにおけるメモリーの考慮事項
リリース12.1より前のリリースで作成したOracle Data Pumpエクスポートのダンプ・ファイルを使用するときに、大量の統計データが含まれていると、インポート操作中に大量のメモリー要求が発生することがあります。
親トピック: Oracle Data Pumpのパフォーマンス
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のインポートおよびエクスポートから最高のパフォーマンスを引き出すためにできることを学習します。
- Oracle Data Pumpのパラメータに関するパフォーマンス・ガイドライン
エクスポートおよびインポートで最適なパフォーマンスが得られるように、パフォーマンスの向上につながる初期化パラメータの設定を確認してテストしてください。 - GoldenGateレプリケーション環境におけるバッファ・キャッシュのサイズの設定
Oracle Data Pumpでは、プロセス間の通信にGoldenGateレプリケーション機能を使用します。 - Oracle複数ユーザーによるデータ・ポンプ・ジョブのリソース使用率の管理
同じデータベース環境で複数のユーザーがデータ・ポンプ・ジョブを実行しているときに、リソースの使用をより詳細に制御するには、MAX_DATAPUMP_JOBS_PER_PDB
およびMAX_DATAPUMP_PARALLEL_PER_JOB
初期化パラメータを使用します。
親トピック: 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_SIZE
とUNDO_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
の実際の値を導出します。