Comments
Description
Transcript
Oracle Data Pumpのパラレル機能
Oracle Data Pump のパラレル機能 Carol Palmer、オラクル社、Principal Product Manager はじめに Oracle Database 10g 上の Oracle Data Pump により、異なるデータベース間のデータとメタデータを高速で移動でき ます。Data Pump の最も便利な機能の 1 つは、エクスポート・ジョブとインポート・ジョブをパラレルに実行しパ フォーマンスを高める機能です。 このホワイト・ペーパーでは、PARALLEL パラメータが動作する仕組み、およびこの機能を最適に実行するため のユーザー処理について説明します。 PARALLELパラメータ Data Pump Export および Import(expdp および impdp)の PARALLEL パラメータは、Oracle Database 10g の Enterprise Edition においてのみ、1 より大きい値に設定できます。このパラメータを 1 より大きい値で使用するには、ユー ザー権限が必要です。(Standard Edition では、PARALLEL パラメータは 1 に限定されます。)この機能は、メタ データに比べてデータ量が多い大きなジョブで最も便利です。小さなジョブや大量のメタデータを扱うジョブで は、速度の大幅な向上は期待できません。特記しないかぎり、このホワイト・ペーパーではメタデータではなく データのパラレル化と移動について説明します。 メタデータは、パラレルにアンロードされることはありませんが、パラレルにロードされる場合があります。 メタデータがパラレルにロードされる状況は、次の 2 つです。 • 複数のワーカーがパラレルにパッケージ本体をロードする場合。 • ワーカーが索引をすべて作成し、パラレル実行プロセス(PX プロセス)を使用して作業を高速化する場 合。パラレル実行プロセスは、大きな索引の場合に経過時間を大幅に削減できます。 Data Pump に関連する用語では、表データ・オブジェクトが保存の基本単位です。表がパーティション化されてい ない場合、表そのものが表データ・オブジェクトとなります。表がパーティション化されているが、サブパーティ ション化されていない場合、パーティションごとに 1 つの表データ・オブジェクトが存在します。サブパーティ ションがある場合は、サブパーティションごとに 1 つの表データ・オブジェクトが存在します。 Data Pump はマルチプロセス・アーキテクチャを使用しており、マスター制御プロセスがジョブ項目を 1 つ以上の ワーカー・プロセスに対してディスパッチします。ワーカー・プロセスは PX プロセスを使用してデータを移動で きます。ここでのパラレル化とは、パラレルに処理できるアクティブなワーカー・プロセスと PX プロセスの合計 数を意味します。デフォルト PARALLEL 値は 1 です。Data Pump が PX プロセスを使用して表のロードまたはア ンロードを行う場合、PX プロセスは Data Pump により使用されるパラレル度として扱われますが、PX プロセス を開始するワーカー・プロセスは、PX プロセスが問合せを実行している間はアイドル状態のためカウントされま せん。また、ワーカー・プロセスが開始されていてもアイドル状態の場合、PARALLEL パラメータにより指定さ れる制限としては考慮されません。 Oracle Data Pump のパラレル機能 1 Oracle Corporation 発行「PARALLEL CAPABILITIES OF ORACLE DATA PUMP」の翻訳版です。 マスター制御プロセス/ワーカー・プロセス Data Pump の各エクスポート・ジョブまたはインポート・ジョブに対し、1 つのマスター制御プロセス(MCP)が 作成されます。MCP は、クライアントと通信してジョブ全体を制御し、ワーカー・プロセスのプールの開始と制 御、ロギング処理の実行などを行います。 マスター制御プロセスは、アクティブなワーカー・プロセスのプールを作成し、パラレル数に達するまで必要に 応じて作業項目を処理します。マスター制御プロセスは、パラレル数としては考慮されません。パラレル度は、 ジョブの処理中に動的に増減できます。これは、対話式コマンド・モードを介してユーザーにより行われます。 パラレル度を縮小しても、そのジョブと関連付けられたワーカー・プロセス数は減りません。ある時点で実行中 のアクティブなワーカー・プロセスの数が削減されるだけです。進行中の作業が通常どおり完了後、パラレル度 が実際に減少します。したがって、パラレル値の減少には時間がかかります。アイドル状態のワーカーはジョブ が終了するまで削除されません。 パラレル度の増加は、ワーカーまたは PX プロセスによりパラレルに実行できる作業がある場合は、すぐに効果を 表します。パラレルに実行できる作業がない場合、追加のワーカーを必要とする作業ができるまで、新規のワー カー・プロセスは作成されません。 Oracle 10g RAC 環境では、ワーカー・プロセスはジョブが最初にスケジュールされたインスタンス(マスター制 御プロセスが稼動しているインスタンス)でのみ開始されます。ワーカーが PX プロセスを配置する場合、プロセ スは透過的に RAC の別のインスタンスで実行される場合もあります。 ファイルのダンプ Data Pump Export では、PARALLEL パラメータに対して指定する値は、ダンプ・ファイル・セットにあるファイ ル数以下である必要があります。各ワーカーまたはパラレル実行プロセスは、ダンプ・ファイルに対して排他的 にアクセスする必要があるため、ダンプ・ファイル数がパラレル度より少ない場合、ワーカーまたは PX プロセス の一部はエクスポートする情報を書き込むことができなくなります。この場合、ワーカー・プロセスはアイドル 状態になり、ジョブにファイルが追加されるまで作業は実行されません。Data Pump エクスポート・ジョブのため に複数のダンプ・ファイルを指定する方法の詳細は、データベース・ユーティリティ・ガイドの DUMPFILE パラ メータの説明を参照してください。 Data Pump Import の場合、ワーカーと PX プロセスは同じファイルから読取りを実行できます。ただし、十分な数 のダンプ・ファイルがない場合、複数の実行スレッドが同じダンプ・ファイルにアクセスしようとするため、パ フォーマンスが低下することがあります。ダンプ・ファイルを共有するプロセスが複数ある場合のパフォーマン スへの影響は、ダンプ・ファイルが入っている I/O サブシステムにより異なります。この理由から、Data Pump Import では、PARALLEL パラメータの値をダンプ・ファイル・セットにあるファイル数より大きくしないことをお薦め します。 Oracle Data Pump のパラレル機能 2 Oracle Corporation 発行「PARALLEL CAPABILITIES OF ORACLE DATA PUMP」の翻訳版です。 アクセス方法: ダイレクト・パスと外部表 Data Pump は、表の行データのロードおよびアンロードに、ダイレクト・パスと外部表の 2 通りのアクセス方法を 提供しています。適用可能なパラレル度はアクセス方法により異なります。 どちらの方法も同じ外部データ表現をサポートするため、一方の方法でアンロードしたデータをもう一方の方法 でロードすることもできます。Data Pump はそれぞれの表データ・オブジェクトに対して適切な方法を自動的に選 択します。 Data Pump は、ファイルを読み書きする外部表アクセス・ドライバを提供しています。ファイルのフォーマットは、 ダイレクト・パス法で使用されるものと同様のフォーマットです。したがって、ダイレクト・パスの代替として、 データベース表の高速なロードおよびアンロードにこれを使用できます。外部表の単一ストリームのパフォーマ ンスはダイレクト・パスほど速くはありませんが、Direct Path API が使用できない非常に大きな表やパーティショ ンには、Oracle パラレル実行エンジンを使用できます。 Data Pump がデータ・アクセスのために外部表を使用する一般的な状況をいくつか示します。 • パラレル SQL を使用でき、パラレル Data Pump 処理が要求された状況での非常に大きな表とパーティショ ンをロードおよびアンロードする場合。 • タイプ BFILE または opaque の列が 1 つ以上入っている表、または opaque 列の入っているオブジェクト・ タイプをロードおよびアンロードする場合。 • 暗号化された列を持つ表をロードおよびアンロードする場合。 • QUERY パラメータを使用しての表をアンロードする場合。 • アクティブなトリガーを持つ表をロードする場合。 • クラスタ表をロードする場合。 • 挿入に対してファイングレインなアクセス制御を使用する表をロードする場合。 • パーティション表にグローバル索引を持つ表をロードする場合。 Data Pump が外部表を使用する場合の完全なリストは、OTN にある次のテクニカル・ノート(英語)を参照して ください。http://www.oracle.com/technology/pub/notes/technote_pathvsext.html エクスポート処理でPARALLELパラメータが動作する仕組み この項で説明するエクスポート処理では、Oracle Database Enterprise Edition を使用し、DUMPFILE パラメータを持 つワイルドカード・オプションを使用していることを前提としています。 データとメタデータの両方を含む一般的なエクスポートでは、最初のワーカー・プロセスはメタデータ(表領域、 スキーマ、権限、ロール、索引など)をアンロードします。この単一ワーカーがメタデータをアンロードし、残 りのワーカーが同時にすべてのデータをアンロードします。メタデータ・ワーカーが終了した際、アンロードす るデータ・オブジェクトがまだ残っている場合、メタデータ・ワーカーはデータのアンロードを開始します。こ のドキュメントの例では、1 つのワーカーが常にメタデータのアンロード中であり、残りのワーカーが表データ・ オブジェクトをアンロードしているとします。 Data Pump はエクスポート処理ごとに、エクスポート・ジョブの各表データ・オブジェクトがどの程度のディスク 領域を消費するかを予測します(バイト数)。これは、ESTIMATE パラメータが使用されているかどうかにかか わらず実行されます。この予測は、ログ・ファイルに印刷されて、クライアントの標準出力装置に表示されます。 Oracle Data Pump のパラレル機能 3 Oracle Corporation 発行「PARALLEL CAPABILITIES OF ORACLE DATA PUMP」の翻訳版です。 この予測は、表の行データのみの予測で、メタデータは含みません。この予測は、何個の PX プロセスを表データ・ オブジェクトに適用するかの判断に使用されます。 表の列を調べて、ダイレクト・パスまたは外部表のどちらを使用できるか、または両方を使用できるかを決定し ます。ダイレクト・パスの場合、表データ・オブジェクトのパラレル・アンロードはサポートしていないため、 表データ・オブジェクトに対するパラレル数は常に 1 です。PX プロセスは、外部表でのみ使用されます。 外部表による方法が選択された場合、Data Pump は表データ・オブジェクトを処理できる PX プロセスの最大数を 判断します。最大数は、表データ・オブジェクトの予測サイズを 250MB で割り、結果の端数を切り捨てることで 算出されます。結果がゼロまたは 1 の場合、表のアンロードに PX プロセスは使用されません。 たとえば、表サイズが 600MB である場合、予測サイズを 250MB(パラレルしきい値)で割り、端数を切り捨てる ことにより、2 つのパラレル実行プロセスを使用するものと判断します。この場合、メタデータについて 1 つ、デー タについて 1 つ、合計 2 つのワーカー・プロセスも存在します。データのワーカー・プロセスは PX プロセスのコー ディネータとして機能し、パラレル数としては考慮されません。 したがって、この場合、エクスポート・ジョブにより使用されるパラレル度は、メタデータ・ワーカーについて の 1 と、PX プロセスについて 2 の合計 3 です。ユーザーがログ・ファイルを調べる場合、あるいは対話的 STATUS コマンドを使用してワーカーの動作を監視した場合、expdp と impdp での PX プロセスは可視的でないため、2 つ のワーカー・プロセスしか見えません。 表サイズが 400MB の別の例を検討します。この場合、パラレル実行プロセスはありません。400 MB を 250 MB で割ると、結果のパラレル値は 1 です。ワーカーは、パラレル化なしで、ダイレクト・パスまたは外部表のいず れかを使用してデータをアンロードします。 最大パラレル数を使用するほどジョブが大きくない場合、アクティブ・ワーカーとパラレル実行プロセスの数が 最大に達することはありません。たとえば、800MB の表があり、外部表を使用する場合、メタデータに対し 1 つ のワーカー、データに対し 1 つのワーカー、および 3 つの PX プロセスが使用されます。前述したとおり、データ のワーカー・プロセスは PX プロセスのコーディネータとして機能し、パラレル数としては考慮されません。した がって、PARALLEL = 10 と指定されている場合、実際のパラレル度は 4 です。STATUS 表示には、1 つのアクティ ブ・ワーカーしか表示されません。指定されたパラレル度に比べてジョブが小さすぎるだけで、Data Pump は最適 に機能しています。 より大きなジョブがあり、PARALLEL = 4 の場合はどうでしょう。必要に応じて、マスター制御プロセスは自動 的にワーカーを追加できるでしょうか。いいえ。PARALLEL パラメータ数は、ユーザーが指定した最大数までで す。表のパラレル度により、ジョブが PARALLEL パラメータにより指定された制限を超える場合、パラレル実行 プロセスの数は、その制限に合うよう削減されます。ただし、ユーザーは対話的コマンドラインによりジョブの パラレル度を増やすことができます。 Real Application Clusters(RAC)環境では、パラレル実行プロセスを他のインスタンスで実行できます。Data Pump ジョブが実行されているインスタンスでパラレル実行プロセスが実行されているとはかぎりません。したがって、 Data Pump が最適に実行しているかどうかはさらに不明確になります。 Oracle Data Pump のパラレル機能 4 Oracle Corporation 発行「PARALLEL CAPABILITIES OF ORACLE DATA PUMP」の翻訳版です。 インポート処理でPARALLELパラメータが動作する仕組み PARALLEL パラメータの動作は、Import では Export と異なります。インポートの際にオブジェクトを作成する場 合、様々な依存性が生じるため、すべてを順序どおりに行う必要があります。Import の場合、まだ存在しない表 にデータをロードできないため、当然表が作成されるまではデータをロードできません。 Data Pump Import は、次の順序でデータベース・オブジェクトを処理します。 1. 最初のワーカーは、すべての表が作成されるまで、すべてのメタデータ(表領域、スキーマなど)のロー ドを行います。 2 表が作成されると、最初のワーカーはメタデータのかわりにデータをロードし、残りのワーカーもデータ のロードを開始します。 3. 表データのロードが終わると、最初のワーカーは再度メタデータのロードに戻ります。残りのワーカーは、 最初のワーカーがパッケージ本体までのすべてのメタデータをロードするまでアイドル状態になります。 4. 複数のワーカーがパラレルにパッケージ本体をロードします。 5. 1 つのワーカーがセカンダリ表までのメタデータをロードします。 6. 複数のワーカーがセカンダリ表データをロードします。 7. 1 つのワーカーが残りのメタデータをロードします。 注意: 1 つのワーカーがすべての索引を作成しますが、PARALLEL 値までの PX プロセスを使用するので、索引 は高速で作成されます。 したがって、インポート・ジョブは PARALLEL = 10 で開始でき、ユーザーにはジョブ実行中の特定の時点で 1 つ のワーカーしか使用していないように見えます。他のワーカーやパラレル実行プロセスは、表がすべて作成され るまで機能しません。表が作成されると、すべてのワーカーと場合によっては PX プロセスはデータがロードされ るまでパラレルに実行され、その後、ワーカー・プロセスはアイドル状態になります。 表データ・オブジェクトをロードする場合、Data Pump はダンプ・ファイルのデータのサイズを 250MB で割って、 データをロードするために使用できる潜在的 PX プロセスの数を予測します。この数が 1 より大きい場合、パラレ ル度が十分であれば、Data Pump は PX プロセスを使用してデータをロードできます。大きな表データ・オブジェ クトは、1 つのワーカーによりアンロードされた場合でも、パラレルにロードできます。 PARALLELパラメータの最大限の活用法 PARALLEL パラメータを使用する場合に考慮すべき一般的ガイドラインを次に示します。 - パラレル度は CPU 数の 2 倍に設定し、そこからチューニングを開始してください。 - Data Pump Export の場合、PARALLEL パラメータ値はダンプ・ファイルの数以下に設定してください。 - Data Pump Import の場合、PARALLEL パラメータ値はダンプ・ファイル・セットのファイル数と比べ大き すぎない値に設定してください。 - 1 より大きい PARALLEL 値は、Oracle Database Enterprise Edition のみで使用できます。 Oracle Data Pump のパラレル機能 5 Oracle Corporation 発行「PARALLEL CAPABILITIES OF ORACLE DATA PUMP」の翻訳版です。 結論 ユーザーは、Data Pump のパラレル機能の使用を最適化して、エクスポート・ジョブとインポート・ジョブをでき るかぎり効率的に実行したいと考えます。PARALLEL パラメータとワイルドカード・ダンプ・ファイル・テンプ レートが使用され、ジョブに大量のデータ(メタデータではなく)が存在する場合、Export と Import のパフォー マンスは向上します。 Data Pump は、ジョブに対して適用できる最大のパラレル度として PARALLEL パラメータを使用するため、どの 時点でも最大数のアクティブ・ワーカーとパラレル実行プロセスを使用できます。ユーザーによるワーカーの監 視では、ワーカーがビジーである場合と、一部のワーカーがアイドル状態である時間が存在します。これは、Data Pump が正しく動作していることを表しています。 Oracle Data Pump のパラレル機能 6 Oracle Corporation 発行「PARALLEL CAPABILITIES OF ORACLE DATA PUMP」の翻訳版です。