
第3回
パーティショニングとパラレル処理は最高の相性
アシスト
大久保 正雄
2007/1/25
■パラレルDML
パラレルDMLでは、副問い合わせを含む行の追加(insert as select)、更新(update)、削除(delete)、問い合わせ結果からの追加更新(merge)の処理が可能です。また図12のようにinsert文はダイレクトロードインサート(バッファ・キャッシュを経由せずに直接データファイルに書き込む)の処理となります。
![]() |
| 図12 パラレルDMLの処理の流れ |
| コラム:Oracleバージョンによる制限 Oracle9i Database R9.0.1以前までは、パラレルDMLの更新、削除、追加更新には以下の制限がありました。 ・操作するパーティション数を超える並列度で処理できない(パーティション数に限定) ・非パーティション表に対してはパラレル化できない Oracle9i Database R9.2.0以降ではこの制限がなくなり、以下のことが可能となりました。 ・パーティション数を超える並列度でパラレルDMLを実行 ・非パーティション表に対してパラレルDMLを実行 |
| コラム:セッション単位によるパラレル実行の指定 パラレル処理はSQL内に直接ヒント句を記述することで実行できますが、セッション単位で指定することも可能です。以下のalter文で、後続のSQL文をパラレルで実行できます。
逆にenableをdisableにすることで使用禁止にできます。なおDMLに関しては、このalter session文を明示的に発行し、パラレルDMLを使用可能にした場合のみ、パラレル化できます。パラレルDMLを直接指定する場合、例えば次のように実行します。
上記のSQLでは、リモート環境のemp_master表をローカルのemp表に挿入する処理をパラレルに実行します。 |
パラレルDMLとロールバック・セグメント
DMLをパラレルに実行する際、それぞれのパラレル実行サーバは独自のパラレル・プロセス・トランザクションで作業の一部を実行します。そのため、自動UNDO管理の代わりにロールバック・セグメントを使用する場合、パラレル実行サーバのトランザクションで利用されるロールバック・セグメントの競合を軽減しなければならない場合があります(図13)。
![]() |
| 図13 ヘッダ競合を軽減するために複数のロールバック・セグメントが必要 |
このような場合、パラレルDMLを実施する並列度以上のロールバック・セグメントを用意し、ロールバック・セグメントの競合が発生しないような環境を整える必要があります。
■パラレルロード
パラレルロードは、主にSQL*Loaderで同一の表に同時にデータを挿入することを意味します。SQL*LoaderはCSV形式のデータをOracleの表に挿入(ロード)するユーティリティで、パラレルロードには2種類の方法があります。
従来型ロードの分割
従来型ロードとは、insert文を実行してCSVデータをデータベースにロードする操作です。リスト3の場合、CSV形式の入力ファイルを3つのSQL*Loaderがそれぞれ読み込み、表に対して並列ロードすることを表しています。このケースでは制御ファイルが同じであるため、すべてのデータが同じ表にロードされますが、複数の表に同時にロードすることもできます。
sqlldr
userid = scott/tiger control = load1.ctl data = demo1.dat parallel = true |
| リスト3 従来型ロードの実行コマンド |
パラレルダイレクトロード
バッファ・キャッシュを経由せずに直接データファイルに書き込むダイレクトロードを、複数のSQL*Loaderで並列して実行することをパラレルダイレクトロードと呼びます。SQL*Loaderの「parallel」オプションを「true」に設定することで、ダイレクトロード時に複数の同時セッションによって同じ表にデータをロードすることを許可します(リスト4)。
sqlldr
userid = scott/tiger control = load1.ctl data = demo1.dat parallel = true direct
= true |
| リスト4 パラレルダイレクトロードの実行コマンド |
このようなSQL*Loaderのパラレルロード処理は、データベースの移行やDSSおよびDWHなどのETL処理で利用されています。
■パラレルData Pump Export/Import
Oracle 10gからリリースされたData Pump Export/Importユーティリティ(以下、Data Pump)は、従来のExport/Importユーティリティと比べてより高速にデータをロード/アンロードすることが可能となりました。この高速なData Pumpをパラレル化することにより、さらに処理能力を向上させることも可能です。
![]() |
| 図14 パラレルData Pump Export処理の流れ |
Data Pumpでは一連の処理をジョブとして扱います。Data Pumpのそれぞれのジョブが実行されると、まず1つのジョブにつき1つのマスター制御プロセスが作成されます。このプロセスはData Pumpのジョブの実行と順番の割り当てを制御します。
ワーカープロセスは、ジョブの実行開始要求を受け取ると同時にマスター制御プロセスに作成されるプロセスで、マスター制御プロセスが要求する処理を同時に実行します。パラレル処理の場合には、このワーカープロセスが複数起動する仕組みとなっています。
■最後に
今回はパラレル処理の概要を中心に、機能、特徴、考慮点などをご説明しました。大規模データを高速に処理するためには、パラレル処理が非常に有用で、さまざまな活用方法があることはもちろんですが、何よりもパーティショニング環境において、その効果を最大限に発揮できることがお分かりいただければ幸いです。
◇
次回は、パラレルクエリ、パラレルDDL、パラレルDML、パラレルロード、パラレルData Dumpのそれぞれの検証結果を紹介します。
| 4/4 |
| Index | |
| Oracleパーティショニング実践講座(3) パーティショニングとパラレル処理は最高の相性 |
|
| Page
1 ・パラレル処理とは? ・パラレル処理とシリアル処理との違い |
|
| Page
2 ・パラレル処理に分割される基準 ・パラレル処理が効果を発揮するケース |
|
| Page
3 ・パラレル化が可能な処理 ・パラレルクエリ ・パラレルDDL |
|
| Page
4 ・パラレルDML ・パラレルロード ・パラレルData Pump Export/Import ・最後に |
|
| Oracleパーティショニング実践講座 |
TechTargetジャパン
- IBMが歴史を変える!? 新カテゴリの製品を発表 (2012/5/25)
IBMは新たな製品カテゴリとなる「PureSystems」を発表。DB2 10とビッグデータの関係、PureSytemsの斬新さはどこかに迫ります - クラウド時代のデータ処理を支える分散KVSの可能性 (2012/5/23)
現在、高速データ処理の主流はインメモリ型データ処理だが、別の方法として分散KVSが注目を集めている。今回は分散KVSについて話を聞いた - 複数の表からデータを取り出して表示させる(2) (2012/4/23)
前回はSQLの基本的な結合構文について説明しました。今回は、より複雑な自己結合や外部結合について説明します - SQL Server、OOWにIQ、盛りだくさんの4月 (2012/4/20)
オラクルオープンワールドが3年ぶりに東京で開催されたほか、SQL Server 2012が提供開始されるなど、今月は話題が盛りだくさんです
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



