Oracleホワイト・ペーパー 2009年2月
はじめに
Oracle Database 10gから使用できるようになったOracle Data Pumpは、データベース間でのデータ およびメタデータの高速移動を実現します。Data Pumpが提供するもっとも実用的な機能の1つに、 エクスポート・ジョブとインポート・ジョブのパフォーマンスの最大化を目的としたパラレル化機 能があります。
このホワイト・ペーパーでは、PARALLELパラメータの機能と、この機能を最適に使用するために ユーザーが実行する必要のあることについて説明します。
2
PARALLELパラメータ
Data PumpのExport(expdp)とImport(impdp)のPARALLELパラメータは、Oracle DatabaseのEnterprise Editionを使用する場合のみ、1より大きい値に設定できます。ユーザーが特権ユーザーでなければ、 このパラメータに1より大きい値を使用することはできません。(Standard Editionでは、PARALLEL パラメータは1に制限されています。)PARALLELパラメータは、メタデータと比較してデータ量の 多い大規模ジョブで使用すると、もっとも効果的です。小規模なジョブやデータよりもメタデータ が多いジョブでは、大幅な高速化は見られません。特に断らない限り、このホワイト・ペーパーで は並列度とデータの移動について説明し、メタデータの移動については説明しません。 メタデータがパラレルでアンロードされることはありませんが、パラレルでロードされることはあ ります。メタデータがパラレルでロードされるのは次の2つの場合です。 • 複数のワーカー・プロセスでパッケージ・ボディをパラレル・ロードする場合 • 1 つのワーカー・プロセスですべての索引を作成するときに、パラレル実行プロセス(PXプロセ ス)を使用して処理を高速化する場合。パラレル実行プロセスを使用することで、大規模な索引 の処理時間が大幅に短縮されます。 Data Pumpの用語では、表データ・オブジェクトが記憶域の基本単位です。表がパーティション化さ れていなければ、表データ・オブジェクトは表そのものです。パーティション化されていてもサブ パーティション化されていなければ、各パーティションに対して1つの表データ・オブジェクトが存 在します。サブパーティションがある場合は、各サブパーティションに対して1つの表データ・オブ ジェクトが存在します。 Data Pumpにはマルチプロセス・アーキテクチャが使用されており、この中でマスター制御プロセス がジョブ・アイテムを1つ以上のワーカー・プロセスに配布します。ワーカー・プロセスはPXプロセ スを使用してデータを移動することがあります。並列度という言葉は、このコンテキストでは、パ ラレルで実行できるアクティブなワーカー・プロセスとPXプロセスの合計数を指します。デフォル トのPARALLEL値は1です。Data Pumpが表のロードまたはアンロードにPXプロセスを使用すると決 定した場合は、Data Pumpで使用される並列度にPXプロセスの数がカウントされます。ただし、PX プロセスを起動したワーカー・プロセスはカウントされません。それは、PXプロセスが問合せを実 行している間、このワーカー・プロセスはアイドル状態になるためです。同様に、起動はしたもの のアイドル状態になっているワーカー・プロセスも、PARALLELパラメータで指定された制限に対 してカウントされません。
マスター制御プロセスとワーカー・プロセス
マスター制御プロセス(MCP)は、Data Pumpのエクスポート・ジョブまたはインポート・ジョブ1 つに対して1つ作成されます。MCPは、クライアントとの通信、ワーカー・プロセス・プールの起動 および制御、ロギング処理の実行、その他の多くの処理を通して、ジョブ全体を制御します。 マスター制御プロセスはアクティブなワーカー・プロセスのプールを作成して、必要に応じてパラ レル数に達するまでワーク・アイテムを処理します。マスター制御プロセスはパラレル数の合計には カウントされません。並列度は、ジョブが実行されている間に動的に増やしたり減らしたりするこ とができます。この操作はユーザーがインタラクティブ・コマンド・モードを使用して実行します。並列度を減らしても、ジョブに関連付けられたワーカー・プロセスの数は減りません。その時点で 実行できる状態のアクティブなワーカー・プロセスの数が減るだけです。実行中のワーク・アイテ ムが決められたとおりに完了してからでなければ、数は減りません。したがって、並列度の値を減 らした影響を確認できるまでには時間がかかることがあります。アイドル状態のワーカー・プロセ スは、ジョブが終了するまで削除されません。 ワーカー・プロセスまたはPXプロセスでパラレル実行できるワーク・アイテムがある場合は、並列 度を増やすとすぐに効果が現れます。パラレル実行できるワーク・アイテムがない場合は、追加の ワーカー・プロセスを必要とするワーク・アイテムが現れない限り、追加のワーカー・プロセスは 作成されません。
Real Application Cluster(RAC)環境では、いつでも1つのインスタンスのみでData Pumpジョブが実 行されます。Data Pumpジョブに関連付けられているすべてのワーカー・プロセスは、マスター制御 プロセスが稼働しているインスタンスで起動されます。ただし、ワーカー・プロセスがPXプロセス を配置した場合は、RAC内の他のインスタンスでPXプロセスが透過的に実行されることもあります。
ダンプ・ファイル
Data Pump Exportで使用するPARALLELパラメータには、ダンプ・ファイル・セットに含まれるファ イル数以下の値を指定する必要があります。各ワーカー・プロセスまたは各パラレル実行プロセス は、ダンプ・ファイルに排他的にアクセスする必要があるため、ダンプ・ファイルの数が並列度よ り少ないと、一部のワーカー・プロセスまたはPXプロセスはエクスポートする情報の書込みができ なくなります。このような状態になると、ワーカー・プロセスはアイドル状態になり、ジョブにファ イルが追加されない限り、処理は何も実行されません。Data Pumpのエクスポート・ジョブに複数の ダンプ・ファイルを指定する方法の詳細は、『Oracle Databaseユーティリティ』のDUMPFILEパラメー タの説明を参照してください。
Data Pump Importの場合は、ワーカー・プロセスおよびPXプロセスのすべてが同じファイルから読み 取ることができます。ただし、ダンプ・ファイルの方が少ない場合は、複数の実行スレッドが同じ ダンプ・ファイルにアクセスしようとするため、最適なパフォーマンスが得られないことがありま す。複数のプロセスがダンプ・ファイルを共有することによるパフォーマンスへの影響は、ダンプ・ ファイルが存在するI/Oサブシステムによって異なります。このような理由により、Data Pump Import で使用するPARALLELパラメータには、ダンプ・ファイル・セットに含まれるファイル数を大幅に 超えない値を指定する必要があります。
アクセス方法:ダイレクト・パスと外部表
Data Pumpでは、ダイレクト・パスと外部表の2つのアクセス方法で、表の行データをロードおよび アンロードできます。アクセス方法は、並列度をどの程度にできるかを判定するうえで重要な役割 を果たします。なぜなら、両方の方法とも同じ外部データ表現をサポートし、一方の方法でアンロー ドしたデータをもう一方の方法でロードできるためです。Data Pumpでは、表データ・オブジェクト ごとに適切なアクセス方法が自動的に選択されます。4 Data Pumpには、ファイルの読取りと書込みを実行する外部表アクセス・ドライバが用意されていま す。ファイル形式はダイレクト・パス・アクセス方法で使用するものと同じです。そのため、ダイ レクト・パスの代替方法として、データベース表のロードおよびアンロードを高速に実行すること ができます。外部表の単一ストリームのパフォーマンスはダイレクト・パスより遅くなりますが、 非常に大規模な表やパーティションの処理にOracleパラレル実行エンジンが活用されます。これは、 Direct Path APIでは実行できないことです。
次に、Data Pumpのデータ・アクセス方法として外部表が使用される一般的な状況の一部を示します。 • パラレルSQLが使用でき、Data Pumpのパラレル操作が要求された状況で、非常に大規模な表お よびパーティションのロードおよびアンロードを実行する場合 • BFILE型列またはOPAQUE型列、またはOPAQUE型列を含む任意のオブジェクト型列を 1 つ以上 含む表をロードおよびアンロードする場合 • 暗号化された列を含む表をロードおよびアンロードする場合 • QUERYパラメータを使用して表をアンロードする場合 • アクティブなトリガーが設定された表をロードする場合 • クラスタ化された表をロードする場合 • 挿入時のファイングレイン・アクセス制御を有効にした表をロードする場合 • パーティション表にグローバル索引が作られている表をロードする場合
エクスポート操作時のPARALLELパラメータの動作
この項では、ユーザーがOracle Database Enterprise Editionを使用しており、DUMPFILEパラメータに ワイルドカード・オプションが指定されていることを前提として、エクスポート操作を説明します。 データとメタデータの両方が含まれる通常のエクスポートでは、最初のワーカー・プロセスがメタ データ、つまり表領域、スキーマ、権限、ロール、表、索引などをアンロードします。この単一の ワーカー・プロセスがメタデータをアンロードし、残りのすべてのプロセスがすべて同時にデータ をアンロードします。メタデータのアンロードが終了したワーカー・プロセスは、アンロードする 必要のあるデータ・オブジェクトがまだある場合は、データのアンロードも開始します。このホワ イト・ペーパーで使用する例では、メタデータのアンロードでビジー状態のワーカー・プロセスが 常に1つあり、その他のワーカー・プロセスは表データ・オブジェクトのアンロードでビジー状態だ と想定します。
Data Pumpでは、すべてのエクスポート操作について、エクスポート・ジョブに含まれるそれぞれの 表データ・オブジェクトに消費されるディスク領域(バイト単位)が見積もられます。この見積も りは、ESTIMATEパラメータを使用してもしなくても実行されます。見積もりはログ・ファイルに 出力され、クライアントの標準出力デバイスに表示されます。見積もりは表の行データのみを対象 としており、メタデータは対象外です。PXプロセスが使用される場合は、この見積もりを使用して、 表データ・オブジェクトに適用するPXプロセスの数が決定されます。 ダイレクト・パス、外部表、または両方の方法を使用できるかどうかは、表の列を調査して判定さ れます。ダイレクト・パスでは表データ・オブジェクトをパラレルでアンロードすることができな いため、ダイレクト・パスの場合は、表データ・オブジェクトのパラレル数は常に1になります。PX プロセスは外部表でのみ使用されます。 外部表によるアクセス方法が選択された場合は、表データ・オブジェクト上で処理を実行できるPX プロセスの最大数が決定されます。この数は、見積もられた表データ・オブジェクトのサイズを 250MBで割り、端数を切り捨てることにより求められます。結果が0(ゼロ)または1の場合は、表 のアンロードにPXプロセスは使用されません。 たとえば、表のサイズが600MBならば、パラレル実行プロセスは2つになります。これは、見積もら れたサイズを250MB(パラレルしきい値)で割って端数を切り捨てることにより求められた数です。 この場合は、ワーカー・プロセスも2つになり、1つはメタデータに、もう1つはデータに使用されま す。データ用のワーカー・プロセスはPXプロセスのコーディネータとして動作し、並列度の合計数 にはカウントされません。したがってこの場合は、エクスポート・ジョブで使用される並列度は3に なり、メタデータのワーカー・プロセスが1、PXプロセスが2になります。ユーザーがログ・ファイ ルを見るかインタラクティブ・コマンドのSTATUSを使用してワーカー・プロセスの動作を表示する と、expdpおよびimpdpではPXプロセスが表示されないため、2つのワーカー・プロセスのみが表示さ れます。 表のサイズが400MBの例も見てみましょう。この場合は、パラレル実行プロセスは0(ゼロ)になり ます。400MBを250MBで割って求められるパラレル値は1です。ワーカー・プロセスは並列度なしで ダイレクト・パスまたは外部表を使用してデータをアンロードします。 最大並列数を使用するほどジョブが大きくない場合は、アクティブなワーカー・プロセスおよびパ ラレル実行プロセスの最大数は表示されません。たとえば、800MBの表が1つあり、外部表を使用す ることになっている場合は、メタデータ用のワーカー・プロセスが1つ、データ用のワーカー・プロ セスが1つ、PXプロセスが3つになります。前述したように、データ用のワーカー・プロセスはPXプ ロセスのコーディネータとして動作し、並列度の合計数にはカウントされません。そのため、ユー ザーがPARALLEL=10と指定しても、並列度は実際には4になります。STATUS表示で確認できるの は、1つのアクティブなワーカー・プロセスだけです。Data Pumpは最適に動作しており、この場合 は指定された並列度に対してジョブが小さすぎます。 ジョブの規模が大きく、PARALLEL=4と指定されている場合はどうなるでしょうか。必要に応じて マスター制御プロセスが自動的にワーカー・プロセスを追加できるのでしょうか。いいえ。 PARALLELパラメータは、ユーザーが指定した最大数までしか増やすことができません。表の並列 度がPARALLELパラメータで指定された制限を超えるジョブの場合は、制限内に収まるように、パ ラレル実行プロセスの数が減らされます。ただし、ユーザーはインタラクティブ・コマンドライン を使用してジョブの並列度を増やすことができます。
6 RAC環境の場合は、別のインスタンスでパラレル実行プロセスを実行することができます。ユーザー には、Data Pumpジョブが実行されているのと同じインスタンスでパラレル実行プロセスが実行され ているかわかりません。そのため、Data Pumpが最適な状態で実行されているかどうかわかりにくく なります。
インポート操作時のPARALLELパラメータの動作
インポート操作のPARALLELパラメータの動作は、エクスポート操作とは少し異なります。インポー ト中のオブジェクト作成にはさまざまな依存性があるため、すべてを正しい順序で実行する必要が あります。まだ存在していない表にはデータをロードできないため、インポートの場合は、表が作 成されてからでなければデータをロードできません。Data Pump Importでは、次の順序でデータベース・オブジェクトが処理されます。
• 最初のワーカー・プロセスがすべてのメタデータ(表領域、スキーマなど)のロードを開始しま す。この処理はすべての表が作成されるまで行われます。 • 表が作成されたら、最初のワーカー・プロセスはメタデータではなくデータのロードを開始しま す。残りのワーカー・プロセスも、データのロードを開始します。 • 表データのロードが終了すると、最初のワーカー・プロセスは再度、メタデータのロード処理に 戻ります。残りのワーカー・プロセスは、最初のワーカー・プロセスがパッケージ・ボディまで のすべてのメタデータをロードするまで、アイドル状態になります。 • 複数のワーカー・プロセスがパッケージ・ボディをパラレルでロードします。 • 1 つのワーカー・プロセスがセカンダリ表とそこまでのメタデータをロードします。 • 複数のワーカー・プロセスがセカンダリ表のデータをロードします。 • 1 つのワーカー・プロセスが残りのメタデータをロードします。 注意:1つのワーカー・プロセスがすべての索引を作成しますが、PARALLELに指定された値までの PXプロセスが使用されるため、索引の作成速度は高速化します。 そのため、インポート・ジョブはPARALLEL=10で開始でき、ジョブ実行中の特定の時点では1つの ワーカー・プロセスだけが使用されることになります。ほかのワーカー・プロセスやパラレル実行 プロセスは、すべての表が作成されるまで処理を開始しません。表が作成されると、データがロー ドされるまで、ワーカー・プロセスとPXプロセス(使用する場合)がいっせいにパラレルで処理を 実行し、その後、ワーカー・プロセスはアイドル状態になります。
Data Pumpで表データ・オブジェクトをロードするときは、ダンプ・ファイル内のデータのサイズを 250MBで割って、データのロードに使用できる潜在的なPXプロセスの数が見積もられます。この数 が1より大きい場合は、並列度が十分であれば、PXプロセスを使用してデータをロードできます。表 データ・オブジェクトが十分に大きければ、1つのワーカー・プロセスでアンロードされたものであっ ても、パラレル・ロードが可能です。
PARALLELパラメータの最大活用
PARALLELパラメータを使用するときに考慮する必要がある一般的なガイドラインを示します。 • 並列度はCPU数の 2 倍に設定し、その値から調整します。• Data Pump ExportのPARALLELパラメータに指定する値は、ダンプ・ファイルの数以下にす る必要があります。
• Data Pump ImportのPARALLELパラメータに指定する値は、ダンプ・ファイル・セットに含 まれるファイル数より大きすぎない値にする必要があります。
• PARALLELパラメータを 1 より大きい値に設定できるのは、Enterprise Editionのみです。
結論
ユーザーの目的は、Data Pumpのパラレル機能を最大限に利用してエクスポート・ジョブおよびイン ポート・ジョブをできるだけ効率的に実行することです。PARALLELパラメータとワイルドカード によるダンプ・ファイル・テンプレートを使用しており、ジョブで扱うデータ(メタデータではな く)が大規模なものである場合は、元のエクスポートおよびインポートと比較してパフォーマンス が大幅に向上します。 Data PumpのPARALLELパラメータは、ジョブで使用できる最大の並列度として使用され、任意の時 点でのアクティブなワーカー・プロセスおよびパラレル実行プロセスの最大数となります。ワーカー・ プロセスを監視していると、ワーカー・プロセスがビジー状態になるときや、一部のワーカー・プ ロセスがアイドル状態になるときがあります。これは想定された動作であり、Data Pumpが適切に動 作していることを意味します。Oracle Data Pumpのパラレル機能 2009年2月 著者:Carol Palmer Oracle Corporation World Headquarters 500 Oracle Parkway Redwood Shores, CA 94065 U.S.A.
Copyright © 2009, Oracle and/or its affiliates. All rights reserved.
本文書は情報提供のみを目的として提供されており、ここに記載される内容は予告なく変更されることがあ ります。本文書は、その内容に誤りがないことを保証するものではなく、また、口頭による明示的保証や法 律による黙示的保証を含め、商品性ないし特定目的適合性に関する黙示的保証および条件などのいかなる保 証および条件も提供するものではありません。オラクル社は本文書に関するいかなる法的責任も明確に否認 し、本文書によって直接的または間接的に確立される契約義務はないものとします。本文書はオラクル社の 書面による許可を前もって得ることなく、いかなる目的のためにも、電子または印刷を含むいかなる形式や 手段によっても再作成または送信することはできません。 Oracleは米国Oracle Corporationおよびその子会社、関連会社の登録商標です。その他の名称はそれぞれの会 社の商標です。 0109