(57)【特許請求の範囲】
【請求項１】
オンライン・シェアード・ナッシング・データベース中でデータを再分散するためのシステムであって、前記シェアード・ナッシング・データベースが複数の元のパーティションおよび少なくとも１つの新しいパーティションを含み、前記システムが、
前記元のパーティションおよび前記少なくとも１つの新しいパーティションにわたって再分散されることになる、前記元のパーティション中の２つ以上の連結されたテーブルを識別するための連結セット・アイデンティファイアであって、複数のデータ行を有する前記連結されたテーブルは、分散キーによって管理される前記元のパーティション上にある、前記連結セット・アイデンティファイアと、
新しいテーブルを前記新しいパーティション中で作成するためのテーブル・ファクトリと、
チェック制約を使用して元のテーブルと前記新しいテーブルの両方のすべてのデータについて、再分散中に単一のエンティティとしてユーザに提示するＵＮＩＯＮ  ＡＬＬビューを作成するためのビュー・クリエータと、
前記分散キーが管理する前記元のパーティション中の連結されたテーブルの複数のデータ行を含む範囲にわたって、複数の分散キー区間の反復ループを定義するためのカウンタと、
前記元のテーブルから前記新しいテーブルへ、現在の分散キー区間にわたる各データ行のデータ移動を実施するためのデータ・ムーバと、
前記ＵＮＩＯＮ  ＡＬＬビューが保存されるように各分散キー区間につき前記データ移動の終了後に前記チェック制約を変更するためのデータ・チェンジャと、
すべてのデータが前記新しいテーブルに移動されるように、前記各分散キー区間がすべて処理されるまで、前記現在の分散キー区間から次の分散キー区間にループ・バックするためのループ・フィニッシャと、を備える、システム。
【請求項２】
オンライン・シェアード・ナッシング・データベース中でデータを再分散する方法であって、前記シェアード・ナッシング・データベースが複数の元のパーティションおよび少なくとも１つの新しいパーティションを含み、前記方法が、
前記元のパーティションおよび前記少なくとも１つの新しいパーティションにわたって再分散されることになる、前記元のパーティション中の２つ以上の連結されたテーブルを識別するステップであって、複数のデータ行を有する前記連結されたテーブルは、分散キーによって管理される前記元のパーティション上にある、前記識別するステップと、
新しいテーブルを前記新しいパーティション中で作成するステップと、
チェック制約を使用して元のテーブルと前記新しいテーブルの両方のすべてのデータについて、再分散中に単一のエンティティとしてユーザに提示するＵＮＩＯＮ  ＡＬＬビューを作成するステップと、
前記分散キーが管理する前記元のパーティション中の連結されたテーブルの複数のデータ行を含む範囲にわたって、複数の分散キー区間の反復ループを定義するステップと、
前記元のテーブルから前記新しいテーブルへ、現在の分散キー区間にわたる各データ行のデータ移動を実施するステップと、
前記ＵＮＩＯＮ  ＡＬＬビューが保存されるように各分散キー区間につき前記データ移動の終了後に前記チェック制約を変更するステップと、
すべてのデータが前記新しいテーブルに移動されるように、前記各分散キー区間がすべて処理されるまで、前記現在の分散キー区間から次の分散キー区間にループ・バックするステップと、を含む方法。
【請求項３】
前記チェック制約は、前記ＵＮＩＯＮ  ＡＬＬビューに対する前記ユーザからの照会を前記元のテーブル又は新しいテーブルに向ける、請求項２に記載の方法。
【請求項４】
前記チェック制約を変更することで、データ移動前後における前記ユーザからの前記ＵＮＩＯＮ  ＡＬＬビューに対する照会においてデータ保全性が維持される、請求項２に記載の方法。
【請求項５】
前記ループ・バックにより、前記照会にとって再分散がトランスペアレントであり、再分散中に前記ＵＮＩＯＮ  ＡＬＬビューを介してテーブルが読み書きのために利用可能である、請求項３または４に記載の方法。
【請求項６】
前記ＵＮＩＯＮ  ＡＬＬビューの行移動機能を使用して前記元のテーブルと前記新しいテーブルとの間でデータが再配置される、請求項２に記載の方法。
【請求項７】
前記現在の分散キー区間中の所定の行に対するインジケータ列を更新することで、前記行移動機能が開始され、前記行が前記元のテーブルから前記新しいテーブルに移動される、請求項６に記載の方法。
【請求項８】
関連する新しいパーティションマップを伴う、既存のパーティションと前記新しいパーティションとに及ぶ新しいパーティショングループを作成するステップをさらに含み、前記関連する新しいパーティションマップでは、個々のパーティションが、移動されている前記データの送出側または受信側のいずれかとして定義される、請求項２に記載の方法。
【請求項９】
前記新しいパーティショングループが、
既存のパーティショングループのデータ定義を抽出すること、
前記新しいパーティションを組み込むように前記データ定義を修正すること、
前記修正されたデータ定義を実行すること、によって作成される、請求項８に記載の方法。
【請求項１０】
前記連結されたテーブルの２つ以上のセットが、既存のパーティショングループ内の２つ以上のパーティション上に位置する、請求項２に記載の方法。
【請求項１１】
前記各分散キー区間がほぼ同じ量のデータを含むように、データベース・カタログからの統計的なデータ再分散を使用して前記各分散キー区間のそれぞれが重み付けされる、請求項２に記載の方法。
【請求項１２】
未完了のデータが性能に及ぼす影響を最小限に抑えるために、前記各分散キー区間がテーブル全体に対して小さい、請求項２に記載の方法。
【請求項１３】
前記データ行が、前記元のテーブルから前記新しいテーブルにインクリメンタルに移動され、バッチ処理される、請求項２に記載の方法。
【請求項１４】
前記現在の分散キー区間で挿入された新しい行が、前記新しいテーブルに充てられる、請求項２に記載の方法。
【請求項１５】
オンライン・シェアード・ナッシング・データベース中でデータを再分散させるためのコンピュータ可読プログラム・コードが組み入れられたコンピュータ可読ストレージ媒体であって、前記コンピュータ可読プログラム・コードが、請求項２ないし１４のいずれか一項に記載の方法の各ステップをプロセッサに実行させるように構成された、コンピュータ可読ストレージ媒体。
【請求項１６】
コンピュータの内部メモリにロード可能なコンピュータ・プログラムであって、請求項２ないし１４のいずれか一項に記載の方法の各ステップを前記コンピュータのプロセッサに実行させるためのソフトウェア・コード部分を含む、コンピュータ・プログラム。
【請求項１７】
請求項２乃至１４の何れか一項に記載の方法の各ステップを実行するプロセッサを備えたシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オンライン・シェアード・ナッシング・データベースの拡張に向けたインクリメンタルで、かつ、連結された再分散のための方法および装置に関する。
【背景技術】
【０００２】
シェアード・ナッシング・データベース（ＳＮ）では、データは、パーティション（シャード（ｓｈａｒｄ）としても知られる）に分割され、ローカル・ディスク・ストレージとメモリと中央処理装置（ＣＰＵ）とを有する１つまたは複数のノードまたは個別マシンにわたって配置される。パーティション、ノード、およびマシンは、高速相互接続を介して相互に接続され、この高速相互接続を介して、すべてのデータベースパーティション間通信が円滑化される。各パーティションは、高速相互接続を介する以外には、他のパーティション上およびノード上のデータへの直接的なアクセスを有しない。通常、構成ファイルによって自動的に定義される、１ノード当たり固定数のパーティションがある。
【０００３】
ＳＮデータベース・マネージャは、パーティション化されたデータベースの複数のデータベースパーティションにわたってデータを分配する際に、大きなフレキシビリティを可能にする。ユーザは、分散キーを宣言することによって、どのように自分のデータを分散するかを選ぶことができ、また、データベースパーティショングループと、データの記憶先となるテーブル空間とを選択することによって、どのデータベースパーティションおよびいくつのデータベースパーティションにわたって自分のテーブル・データを分配できるかを決定することができる。加えて、分散マップ（更新可能）が、データベースパーティションに対する、ハッシュされた分散キー値のマッピングを指定する。これにより、大きいテーブルの場合にはパーティション化されたデータベースにわたるフレキシブルな作業並列化を可能にしながら、より小さいテーブルが１つまたは少数のデータベースパーティションに記憶されることをアプリケーション設計者が選ぶことを可能にする。
【０００４】
パーティション化されたデータベースでは、分散キーを使用して、テーブル・データおよび索引データが１組のデータベースパーティションにわたって分散される。パーティション化されたデータベースのパーティショングループ上のテーブル空間中のテーブルに対する分散キーは、ＣＲＥＡＴＥ  ＴＡＢＬＥステートメントまたはＡＬＴＥＲ  ＴＡＢＬＥステートメント中で指定される。行は次のようにデータベースパーティションに配置される。すなわち、ハッシング・アルゴリズム（データベースパーティション化機能）が、分散キーのすべての列に適用され、この結果、分散マップ索引値が生成される。そして、分散マップ中のこの索引値（ＩｎｄｅｘＶａｌｕｅ）におけるデータベースパーティション番号が、行の記憶先となるデータベースパーティションを識別する。
【０００５】
図１の例示的な分散マップおよび分散キーを参照すると、分散キーは、分散マップ中のパーティション（この例ではｐ５）にマッピングする、データの行に対する１つまたは複数の列の内容（この例ではｃ１およびｃ３）である。このパーティションは、ハッシュされた分散キー値２によって分散マップ索引を介して識別される。
【０００６】
データベース・マネージャは、部分的デクラスタリングをサポートする。これは、テーブルを、システム中のデータベースパーティションのサブセット（すなわちデータベースパーティショングループ）にわたって分散させることができることを意味する。テーブルは、システム中のすべてのデータベースパーティションにわたって分散されなければならないわけではない。データベース・マネージャは、結合または副照会のためにアクセスされているデータが、同じデータベースパーティショングループ中の同じデータベースパーティションに位置するときを認識する能力を有する。これは、テーブル連結（ｃｏｌｌｏｃａｔｉｏｎ）として知られる。同じ分散キー値を有する、連結されたテーブル中の行は、同じデータベースパーティション上に位置する。データベース・マネージャは、データが記憶されているデータベースパーティションにおいて結合または副照会処理を実施することを選ぶことができる。これは、非常に大きな性能利点を有する。
【０００７】
連結されたテーブルは、同じデータベースパーティショングループ中になければならず、同じ分散マップを有しなければならない。連結されたテーブルは、列の数が同じである分散キーを有しなければならない。連結されたテーブルは、分散キーの対応する列がパーティション互換（例えば互換性のあるデータ型）でなければならない。連結されたテーブルは、同じデータベースパーティション上で定義される単一のデータベースパーティショングループ中になければならない。
【０００８】
データ・ウェアハウスでは、通常、ファクト・テーブルとその最大のディメンション・テーブルとが連結される。例えば、図２に、周知のベンチマーキング作業負荷における２つの最大テーブルの結合を描く。この例では、ＯＲＤＥＲＳテーブル（ディメンション・テーブル）とＬＩＮＥＩＴＥＭテーブル（ファクト・テーブル）の両方が、ｏｒｄｅｒｋｅｙ列上で分散されており、この２つのテーブルにわたる結合操作は、含まれているパーティショングループの各パーティション上でローカルに処理され、その結果、大きな性能確保がもたらされる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許出願公開第２００９／０３１９５８１（Ａ１）号
【特許文献２】米国特許出願公開第２０１１／０２９５９０７（Ａ１）号
【特許文献３】米国特許出願公開第２０１２／０２４６１９４（Ａ１）号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
難題は、新しいノードの追加を通してＳＮパーティション化されたデータベースを拡張する間に、性能を維持することである。新たにプロビジョニングされたノードおよびパーティションを含むようにパーティション化されたデータベースが拡張されるとき、パーティショングループは、新たにプロビジョニングされたパーティションを含むように拡張されなければならない。拡張されるシステム全体にわたってテーブルごとに均衡のとれたデータ割振りを維持するために、また、既存のパーティション上での将来の増加を見込んでおくために、データはシステム全体にわたって再分散されなければならない。再分散プロセスは、拡張されるシステム中のすべてのパーティションに及ぶパーティショングループを割り振り、次いで、新しいパーティションマップに基づいてパーティショングループ中で各テーブル行を再割当てすることを含む。このプロセスはかなりの時間がかかる可能性があり、例えば、数十または数百テラバイトのデータの再割当ては、数日かかる可能性がある。通常、このプロセスは、オフライン・アクティビティとして実施され、数日間の機能停止を必要とする可能性がある。
【００１１】
再分散プロセス中の主要な困難の１つは、操作中に連結が維持されないことである。パーティショングループ中のテーブルが１つずつ順番に再分散されるので、結合されたテーブルのパーティションマップは、パーティショングループ中のこのようなすべての結合されたテーブルが再分散されるまで、異なることになる。別の難題は、データへの完全なアクセスを維持しながら、また移動されているデータの２つのコピー（既存のものと新しいもの）をすることなく、エンド・ユーザにとってトランスペアレントに各テーブルおよびその中の行データを新しいデータベース・マップにインクリメンタルに再分散する能力である。
【００１２】
従来技術には、テーブルを新しいパーティショングループ／マップにオンライン移動する技法がある。例えば、米国特許出願公開第２００９／０３１９５８１（Ａ１）号は、移動されているテーブルの２つのコピーを必要とするが、移動中にテーブル間の連結を維持しない、テーブルのオンライン移動の方法を開示する。
【００１３】
別の既存の米国特許出願公開第２０１１／０２９５９０７（Ａ１）号は、ＳＮデータベースを拡張するための装置および方法、ならびに、ダウンタイムを最小限に抑えながらＳＮデータベースを再分散させる技法を開示する。しかし、この方法は、連結の保存も、データの完全な利用可能性も提供せず、データの２つのコピーを必要とする。
【００１４】
別の既存の米国特許出願公開第２０１２／０２４６１９４（Ａ１）号は、前に遭遇した分散キーを有するデータを同じデータベースパーティションに配置し、前に遭遇していない分散キーのデータを新しいデータベースパーティションに配置することを通して、連結を維持する方法を提供する。言い換えれば、この方法は、データ再分散を完全に不要にしようとする。しかし、この手法は実際上、永久に均衡のとれないパーティショングループを結果的に生じる可能性があり（新しい分散キーのデータのみが新しいパーティションに配置されるので）、必ず性能および整調の問題につながり、結果として、特に同種アプライアンスベースのクラスタ中では、利用可能なストレージを既存のノードが使い尽くすというクリティカルなシナリオとなる可能性がある。
【課題を解決するための手段】
【００１５】
本発明の第１の態様では、オンライン・シェアード・ナッシング・データベース中でデータを再分散させるためのシステムが提供され、前記シェアード・ナッシング・データベースは、複数の元のパーティション、および少なくとも１つの新しいパーティションを含む。前記システムは、元のパーティションおよび少なくとも１つの新しいパーティションにわたって再分散されることになる、元のパーティション中の２つ以上の連結されたテーブルを識別するための連結セット・アイデンティファイアであって、前記テーブルがデータ行を有し、各データ行が、分散キーによって管理されるパーティション上にある、連結セット・アイデンティファイアと、対応する新しいテーブルを新しいパーティション中で作成するためのテーブル・ファクトリと、チェック制約を使用して元のテーブルと新しいテーブルの両方からのすべてのデータのＵＮＩＯＮ  ＡＬＬビューを作成するためのビュー・クリエータであって、前記チェック制約は分散キーに基づく、ビュー・クリエータと、分散キー範囲にわたる区間のループを定義するためのカウンタと、元のテーブルから新しいテーブルへの、現在の分散キー区間にわたる各データ行のデータ移動を実施するためのデータ・ムーバと、ＵＮＩＯＮ  ＡＬＬビューが保存されるように各分散キー区間につきチェック制約を変更し、それにより連結およびデータ完全性が確実に維持されるようにするためのデータ・チェンジャと、すべてのデータが新しいテーブルに移動されるように、すべての分散キー区間が処理されるまで次の分散キー区間にループ・バックするためのループ・フィニッシャであって、それにより、連結およびデータ完全性が維持され、データベースに対して実施される照会にとって再分散がトランスペアレントであり、再分散中にテーブルが読み書きのために完全に利用可能である、ループ・フィニッシャと、を備える。
【００１６】
再分散は、シェアード・ナッシング・データベースがオンラインである間に行われる。すなわち、シェアード・ナッシング・データは、任意の接続された外部エンティティによる読み書きのために、完全に利用可能である。
【００１７】
本発明の第２の態様では、オンライン・シェアード・ナッシング・データベース中でデータを再分散させる方法が提供され、前記シェアード・ナッシング・データベースは、複数の元のパーティション、および少なくとも１つの新しいパーティションを含む。前記方法は、元のパーティションおよび少なくとも１つの新しいパーティションにわたって再分散されることになる、元のパーティション中の２つ以上の連結されたテーブルを識別するステップであって、前記テーブルがデータ行を有し、各データ行が、分散キーによって管理されるパーティション上にある、識別するステップと、対応する新しいテーブルを新しいパーティション中で作成するステップと、チェック制約を使用して、元のテーブルと新しいテーブルの両方からのすべてのデータのＵＮＩＯＮ  ＡＬＬビューを作成するステップであって、前記チェック制約は分散キーに基づくものである、作成するステップと、分散キー範囲にわたる区間のループを定義するステップと、元のテーブルから新しいテーブルへの、現在の分散キー区間にわたる各データ行のデータ移動を実施するステップと、ＵＮＩＯＮ  ＡＬＬビューが保存されるように各分散キー区間につきチェック制約を変更し、それにより連結およびデータ完全性が確実に維持されるようにするステップと、すべてのデータが新しいテーブルに移動されるように、すべての分散キー区間が処理されるまで次の分散キー区間にループ・バックするステップであって、それにより、連結およびデータ完全性が維持され、データベースに対して実施される照会にとって再分散がトランスペアレントであり、再分散中にテーブルが読み書きのために完全に利用可能である、ループ・バックするステップと、を含む。
【００１８】
実施形態は、再分散中に照会性能が維持されることを確実にする。
【００１９】
有利には、ＵＮＩＯＮ  ＡＬＬビューの行移動機能を使用して、元のテーブルと新しいテーブルとの間でデータが再配置される。
【００２０】
より有利には、現在の区間中の所定の行に対するインジケータ列を更新することで、行移動機能が開始され、行が元のテーブルから新しいテーブルに移動されることになる。
【００２１】
さらに有利には、関連する新しいパーティションマップを伴う、既存のパーティションと新しいパーティションとに及ぶ新しいパーティショングループを作成するステップを含み、関連する新しいパーティションでは、個々のパーティションは、移動されているデータの送出側または受信側のいずれかとして定義される。パーティションは、同時にデータの送出側と受信側とであることは決してなく、これにより、再分散中のネットワーク・トラフィックの量が低減される。
【００２２】
さらに有利には、新しいパーティショングループは、既存のパーティショングループのデータ定義を抽出し、新しいパーティションを組み込むようにデータ定義を修正し、修正されたデータ定義を実行することによって、作成される。
【００２３】
好ましくは、連結されたテーブルの２つ以上のセットが、既存のパーティショングループ内の２つ以上のパーティション上に位置する。再分散されているパーティショングループ中のテーブルは、「連結セット」に属するものとして分類される。連結セットは、連結されたテーブルのグループであり、すなわち、連結された結合に加わるテーブルである。
【００２４】
より好ましくは、未完了（ｉｎｆｌｉｇｈｔ）のデータが性能に及ぼすどのような影響も最小限に抑えるために、各区間は、テーブル全体に対して小さい（通常は約１％）。
【００２５】
さらに好ましくは、行は、元のテーブルから新しいテーブルにインクリメンタルに移動され、バッチでコミットされる。コミット・サイズは、区間全体に対して小さく保たれ（通常は約１０，０００行）、したがって、インクリメンタルな移動が、ロッキングを最小限に抑え、照会および他のユーザ・データ操作言語（ＤＭＬ）操作のためにテーブルの完全な利用可能性を維持する。
【００２６】
さらに好ましくは、現在の分散キー区間で挿入された新しい行が、新しいテーブルに充てられる。これは、インジケータ列（未完了インジケータとしても知られる）にどのような値も供給されないので実施され、区間中に行のセカンド・パスは必要ではない。
【００２７】
別法として、すべての区間がほぼ同じ量のデータを含むように、区間は、データベース・カタログからの統計的なデータ再分散を使用して重み付けされてもよい。この代替実施形態の描写については、図１２を参照されたい。
【００２８】
前述の方法では、行が移動された後で、性能データ（後で分析するための）が記憶されてもよい。
【００２９】
インジケータ列は、ヌル可能な列として、元のテーブルと新しいテーブルの両方に追加され、最初は、既存のテーブル上でデフォルト値Ｙ、およびターゲット・テーブル上でＮＵＬＬを含む。これは、ユーザからは見えない隠れた列である。重要なことに、ヌル可能な列については、テーブルに対して構造上の変更もデータ更新も実際には行われず、したがってこれは、追加のストレージを必要としない即時的な操作である。このインジケータ列が照会されたときは、データベース管理システム（ＤＢＭＳ）は単に、デフォルト値（または、設定されていなければヌル）を返す。
【００３０】
各区間の完了時、分散キー値の範囲は、テーブルの元のバージョンと新しいバージョンとの間で一貫性があり、したがって、元のテーブル間で、また新しいテーブル間でも、連結された結合が達成される。
【００３１】
各区間の後、既存のＤＢＭＳオンライン再編成ユーティリティが実行されて、区間中に元のテーブルから削除された行についてのディスク・ストレージが再利用される。
【００３２】
最後の分散キー区間が処理された後、連結セット中の各テーブルにつき、ＵＮＩＯＮ  ＡＬＬビューおよび今や空の元のテーブルは除去され、新しいテーブルの名前は元の名前に変更される。このようにして、パーティショングループ中のすべての連結セットが、連続的に再分散される。孤立しており連結されていないテーブルがあれば、次いでこれらのテーブルは、同様にして、ただし連結を維持する必要なしに、再分散される。
【００３３】
最後に、元のパーティショングループおよび関連するパーティションマップは、データベース・カタログから除去される。この時点で、オンライン再分散は完了し、データは、すべてのデータベースパーティションにわたって均等かつ一様に均衡がとれている。
【００３４】
新しいパーティションは、シャードまたは水平パーティション化としても知られる、新しいデータベースパーティションである。元の各テーブルにつき新しいテーブルが作成され、新しい拡張されたパーティショングループ中の新しいパーティションマップがある。ＵＮＩＯＮ  ＡＬＬビュー（ＵＮＩＯＮＡＬＬ ビュー）は、元のテーブルおよび新しいテーブルのそれぞれにわたって作成されて、テーブル中にあるデータを、再分散操作の継続時間にわたって単一のエンティティとして提示する。分散キー列に対するチェック制約が、元のテーブルおよび新しいテーブルに適用される。最初、チェック制約は、すべての行が元のテーブル中に位置するようにする。分散キーが及ぶ値の範囲は、昇順の値の固定数の区間に細分される。反復的に、各区間の行が、連結セット中の各テーブルにつき、関連する元のテーブルから関連する新しいテーブルに移動される。チェック制約は、関連する分散キー範囲でのデータの新しい位置を反映するように、各区間につき変更される。
【００３５】
ＵＮＩＯＮ  ＡＬＬビューは、複数のテーブルからのデータが単一のテーブル中にあるかのようにエンド・ユーザに対して提示されるのを可能にする、特別な形のビューである。ＵＮＩＯＮ  ＡＬＬビューは、データの物理的なマテリアライゼーションではなく、純粋に、基礎をなすテーブルにビューを介して照会をルーティングするためのメカニズムである。基礎をなすテーブルは、２つまたはそれ以上ある可能性がある。テーブルＴ１およびＴ２にわたるＳＥＬＥＣＴからなるＵＮＩＯＮ  ＡＬＬビューＶ１が、テーブルＴ３およびＴ４にわたるＳＥＬＥＣＴからなる別のＵＮＩＯＮ  ＡＬＬビューＶ２に結合される場合であって、Ｔ１とＴ３が連結され、Ｔ２とＴ４もまた連結される場合であって、連結されたテーブル（Ｔ１＆Ｔ３、およびＴ２＆Ｔ４）上の同じ範囲に分散キーを制約するチェック制約または述部がビュー中にある場合は、ＤＢＭＳオプティマイザが、Ｖ１のＶ２への結合を、Ｔ２とＴ４との連結された結合と合併された、Ｔ１のＴ３への連結された結合として書き換えることになる。言い換えれば、２つのビューＶ１およびＶ２が以下のように作成されるとすると、
CREATE VIEW V1 as SELECT * FROM T1 UNIONALL SELECT * FROM T2 WITH ROW MOVEMENT
CREATE VIEW V2 as SELECT * FROM T3 UNIONALL SELECT * FROM T4 WITH ROW MOVEMENT
この場合、SELECT * FROM V1 JOIN V2 ON V1.keycol= V2.keycol
は、オプティマイザによって以下のように書き換えられる。
SELECT * FROM T1 JOIN T3 ON T1.keycol =T3.keycol UNION ALL SELECT * FROM T2 JOIN T4 ON T2.keycol = T4.keycol
【００３６】
重要なことに、ＵＮＩＯＮ  ＡＬＬビューを構成するテーブルは、異なる複数のパーティショングループ中に配置されている可能性があり、または異なる複数のパーティションマップを有する可能性がある。
【００３７】
オプティマイザは、供給された述部にマッチする行をどのテーブルが含むかを解決するために、「チェック制約」に依拠する。ＵＮＩＯＮ  ＡＬＬビューを構成する各テーブルに対するチェック制約は、重複しない、かつ、どのテーブルにＤＭＬ操作（例えばＳＥＬＥＣＴ、ＩＮＳＥＲＴ、ＵＰＤＡＴＥ、またはＤＥＬＥＴＥ）を適用するかを一意に定義する、強制的な制約である。ROW MOVEMENT文節は、チェック制約に違反するように変更されるどのような行も、ビュー中の他のテーブルに自動的に移動されることを示す。
【００３８】
実施形態は、ＳＮデータベースの外で継続されるデータベース・プロセスの品質および効率を改善する。というのは、再分散は、ＳＮデータベース内で動作し、ＳＮデータベースを使用するデータベース・プロセスからは見えないからである。
【００３９】
実施形態は、トランスペアレントな、かつ上にあるアプリケーション・レベルの下の、コンピュータ・システムのシステム・レベルで動作する効果を有する。
【００４０】
実施形態は、ＳＮデータベース再分散をリアルタイムで、したがって新しい方式で動作させることになるという効果を有する。
【００４１】
実施形態は、ＳＮデータベースの速度または信頼性の増大につながる効果を有する。
【００４２】
本発明の第３の態様では、シェアード・ナッシング・データベース中でデータをオンラインで再分散させるためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、コンピュータ可読プログラム・コードが組み入れられたコンピュータ可読ストレージ媒体を備え、コンピュータ可読プログラム・コードは、本方法のすべてのステップを実施するように構成される。
【００４３】
コンピュータ・プログラム製品は一連のコンピュータ可読命令を含み、これらのコンピュータ可読命令は、コンピュータ可読媒体、例えば光ディスクや磁気ディスクや固体ドライブなどの、有形媒体上に固定されているか、あるいは、以下のものに限定されないが光もしくはアナログ通信回線を含めた有形媒体を介して、または、以下のものに限定されないがマイクロ波や赤外線や他の伝送技法を含めたワイヤレス技法を使用して無形に、モデムまたは他のインタフェース・デバイスを使用してコンピュータ・システムに送信可能である。一連のコンピュータ可読命令は、前述の機能の全部または一部を具体化する。
【００４４】
このようなコンピュータ可読命令は、多くのコンピュータ・アーキテクチャまたはオペレーティング・システムと共に使用するためのいくつかのプログラミング言語で書かれてよいことを、当業者なら理解するであろう。さらに、このような命令は、以下のものに限定されないが半導体、磁気、もしくは光学を含めた、現在もしくは将来の任意のメモリ技術を使用して記憶されてよく、または、以下のものに限定されないが光学、赤外線、またはマイクロ波を含めた、現在もしくは将来の任意の通信技術を使用して伝送されてよい。このようなコンピュータ・プログラム製品は、印刷文書もしくは電子文書が付随する取外し可能媒体として、例えばシュリンクラップ・ソフトウェアとして配布されること、コンピュータ・システムによって例えばシステムＲＯＭもしくは固定ディスクにプリロードされること、または、ネットワーク、例えばインターネットもしくはワールド・ワイド・ウェブを介して、サーバもしくは電子掲示板から配布されること、が可能であることが企図される。
【００４５】
本発明の第４の態様では、コンピュータ可読媒体に記憶され、コンピュータの内部メモリにロード可能な、コンピュータ・プログラムが提供される。このコンピュータ・プログラムは、前記プログラムがコンピュータ上で実行されたときに方法請求項のすべてのステップを実施するためのソフトウェア・コード部分を含む。
【００４６】
本発明の第５の態様では、好ましい実施形態のデータ・キャリア態様が提供される。このデータ・キャリア態様は、コンピュータ・システムにロードされてコンピュータ・システムによる作用を受けたときに、前記コンピュータ・システムが方法請求項のすべてのステップを実施できるようにするための機能的コンピュータ・データ構造を含む。適切なデータ・キャリアは、固体メモリ、磁気ドライブ、または光ディスクとすることができる。データ伝送のためのチャネルも同様に、すべての記述のストレージ媒体、ならびに、有線またはワイヤレス信号搬送媒体などの信号搬送媒体を含み得る。
【００４７】
次に、後続の図面を参照しながら、本発明の好ましい実施形態について、単なる例として述べる。
【図面の簡単な説明】
【００４８】
【図１】既存のシェアード・ナッシング・データベースの例示的な分散マップおよびキーの関係図である。
【図２】周知のベンチマーキング作業負荷における２つの最大テーブルの図である。
【図３】好ましい実施形態の概略展開図である。
【図４】好ましい実施形態の概略コンポーネント図である。
【図５】好ましい実施形態の方法の流れ図である。
【図６】好ましい実施形態の方法の流れ図である。
【図７】好ましい実施形態の方法の流れ図である。
【図８】好ましい実施形態の方法の流れ図である。
【図９】すべてのパーティションについて同時のＵＮＩＯＮ  ＡＬＬビューが維持されながら、連結されたテーブルが元のパーティションから新しいパーティションに再分散される、例示的な分散の図である。
【図１０】好ましい実施形態の分散キー区間のテーブルを示す図である。
【図１１】好ましい実施形態と代替実施形態のそれぞれの場合の、２つのタイプの区間分布を比較する図である。
【図１２】好ましい実施形態と代替実施形態のそれぞれの場合の、２つのタイプの区間分布を比較する図である。
【図１３】再分散操作中の、元のテーブルにわたる単純なＳＥＬＥＣＴ照会の例示的な実行プラン・グラフである。
【図１４】再分散操作中の、元のテーブルにわたる単純なＳＥＬＥＣＴ照会の例示的な実行プラン・グラフである。
【図１５】再分散操作中の、元のテーブルにわたる単純なＳＥＬＥＣＴ照会の例示的な実行プラン・グラフである。
【発明を実施するための形態】
【００４９】
図３を参照すると、シェアード・ナッシング・データベース１０における好ましい一実施形態の展開が記載されている。シェアード・ナッシング・データベース１０は、多くの他の汎用または専用コンピューティング・システム環境または構成でも動作する。シェアード・ナッシング・データベース１０と共に使用するのに適する可能性のある周知のコンピューティング処理システム、環境、または構成、あるいはそのすべての例は、以下のものに限定されないが、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラム可能な消費者電子機器、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および、これらのシステムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境、を含む。
【００５０】
シェアード・ナッシング・データベース１０は、プログラム・モジュールなど、コンピュータ・プロセッサによって実行されるコンピュータ・システム実行可能命令の一般的なコンテキストで述べることができる。一般に、プログラム・モジュールは、特定のタスクを実施するかまたは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、ロジック、およびデータ構造を含み得る。シェアード・ナッシング・データベース１０は、分散型クラウド・コンピューティング環境で具体化されてよく、この環境では、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実施される。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含めた、ローカルとリモートの両方のコンピュータ・システム・ストレージ媒体に位置する場合がある。
【００５１】
好ましい実施形態のシェアード・ナッシング・データベース１０は、複数の汎用コンピュータ・サーバ１２Ａ〜１２Ｎと、コンピュータ・サーバ１２Ａに直接に取り付けられた１つまたは複数の入力デバイス１４Ａおよび出力デバイス１６Ａと、高速相互接続２０とを含む。シェアード・ナッシング・データベース１０は、入力デバイス１４Ａおよび出力デバイス１６Ａを使用して、ユーザ１８Ａと通信する。入力デバイス１４Ａは、キーボード、スキャナ、マウス、トラックボール、または別のポインティング・デバイスの１つまたは複数を含む。出力デバイス１６Ａは、ディスプレイまたはプリンタの１つまたは複数を含む。
【００５２】
コンピュータ・サーバ１２Ａについてより詳細に述べるが、このような詳細はまた、対応する変更を伴って、コンピュータ・サーバ１２Ｂ〜１２Ｎにも適用される。したがって、コンピュータ・サーバ１２Ｂ〜１２Ｎは、１２Ａと同様のコンポーネントを備えるが、重要な実施形態コンポーネントのみを備えるように図示されている。
【００５３】
コンピュータ・サーバ１２Ａは、中央処理装置（ＣＰＵ）２２Ａ、高速ネットワーク・アダプタ２４Ａ、デバイス・アダプタ２６Ａ、バス２８Ａ、およびメモリ３０Ａを備える。
【００５４】
ＣＰＵ２２Ａは、メモリ３０Ａから機械命令をロードし、命令に応答して機械操作を実施する。このような機械操作は、レジスタ（図示せず）中の値をインクリメントまたはデクリメントすること、値をメモリ３０Ａからレジスタに、またはその逆に転送すること、条件が真または偽である場合にメモリ中の別の位置に分岐すること（条件付き分岐命令としても知られる）、および、２つの異なるレジスタ中の値を加算または減算して結果を別のレジスタにロードすること、を含む。通常のＣＰＵは、多くの異なる機械操作を実施することができる。機械命令のセットは、機械コード・プログラムと呼ばれ、機械命令は、低水準言語と称される機械コード言語で書かれる。高水準言語で書かれたコンピュータ・プログラムは、実行できるようになる前に機械コード・プログラムにコンパイルされる必要があり、あるいは、機械命令の点から解釈される必要がある。
【００５５】
高速ネットワーク・アダプタ２４Ａは、コンピュータ・サーバ１２Ａとコンピュータ・サーバ１２Ｂ〜１２Ｎとの間の通信を可能にするために、バス２８Ａおよび高速相互接続２０に接続される。
【００５６】
デバイス・アダプタ２６Ａは、コンピュータ・サーバ１２Ａと入力デバイス１４Ａおよび出力デバイス１６Ａとの間の通信を可能にするために、バス２８Ａならびに入力デバイス１４Ａおよび出力デバイス１６Ａに接続される。
【００５７】
バス２８Ａは、メモリ３０Ａを含めた主要なシステム・コンポーネントを共にＣＰＵ２２Ａに結合する。バス２８Ａは、いくつかのタイプのバス構造のいずれかの１つまたは複数を表し、これらのバス構造は、様々なバス・アーキテクチャのいずれかを使用した、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、およびプロセッサ・バスまたはローカル・バスを含む。限定ではなく例として、このようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（MicroChannel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、およびＰＣＩ（Peripheral Component Interconnects）バスを含む。
【００５８】
メモリ３０Ａは、揮発性メモリ３２Ａおよび不揮発性または持続性メモリ３４Ａの形のコンピュータ・システム可読媒体を含む。揮発性メモリ３２Ａの例は、ランダム・アクセス・メモリ（ＲＡＭ）３６Ａおよびキャッシュ・メモリ３８Ａである。一般に揮発性メモリは、より高速なので使用され、一般に不揮発性メモリは、データをより長く保持することになるので使用される。シェアード・ナッシング・データベース１０はさらに、他の取外し可能または非取外し可能あるいはその両方の、かつ揮発性または不揮発性あるいはその両方の、コンピュータ・システム・ストレージ媒体も含むことができる。例に過ぎないが、持続性メモリ３４Ａは、非取外し可能な不揮発性の磁気媒体（図示せず。通常は磁気ハード・ディスクまたは固体ドライブ）に対する読み書きのために設けられてよい。図示されていないが、さらに他のストレージ媒体が設けられてもよく、これらの他のストレージ媒体は、取外し可能な不揮発性の固体メモリのための外部ポート、および、コンパクト・ディスク（ＣＤ）やディジタル・ビデオ・ディスク（ＤＶＤ）やＢｌｕ−ｒａｙなどの取外し可能な不揮発性の光ディスクに対する読み書きのための光ディスク・ドライブ、を含む。このような事例では、それぞれは、１つまたは複数のデータ媒体インタフェースによってバス２８Ａに接続されてよい。以下にさらに図示および記述するように、メモリ３０Ａは、本発明の実施形態の機能を実施するように構成された１組の（例えば少なくとも１つの）プログラム・モジュールを有する少なくとも１つのプログラム製品を含むことができる。
【００５９】
好ましい実施形態の機能を実施するように構成された１組のプログラム・モジュールは、シャード再分散モジュール４００Ａと、データベース管理システム４０２Ａと、データベースパーティション４０４Ａ１〜４０４Ａｎとを含む。好ましい実施形態をサポートするが図示されていない、さらに他のプログラム・モジュールは、ファームウェア、ブート・ストラップ・プログラム、オペレーティング・システム、およびサポート・アプリケーションを含む。オペレーティング・システム、サポート・アプリケーション、他のプログラム・モジュール、およびプログラム・データ、またはこれらの何らかの組合せは、それぞれ、ネットワーキング環境の一実装形態を含み得る。
【００６０】
対応するプログラム・モジュールがコンピュータ・サーバ１２Ｎについて示されており、これらは、シャード再分散モジュール４００Ｎと、データベース管理システム４０２Ｎと、データベースパーティション４０４Ｎ１〜４０４Ｎｎとを含む。
【００６１】
コンピュータ・サーバ１２Ｂ〜１２Ｎについても、対応するプログラム・モジュールが含意される（ただし図示せず）。
【００６２】
シェアード・ナッシング・データベース１０は、高速相互接続２０を介して通信する。ネットワーク・アダプタ２４Ａは、高速相互接続と同じくらい速くまたはより速く動作するバス２８Ａを介して、データベースパーティションを含めたコンピュータ・サーバ１２Ａの他のコンポーネントと通信する。
【００６３】
データベース管理システム（ＤＢＭＳ）４０２Ａは、標準的なシェアード・ナッシング・データベース管理システムである。
【００６４】
データベースパーティション４０４Ａ１〜４０４Ａｎは、持続性メモリおよびディスク３４Ａ中で作成される。パーティションは、除去または追加されることが可能である。
【００６５】
図４を参照すると、シャード再分散モジュール４００Ａは、以下のコンポーネントを備える。すなわち、元パーティションレジスタ４０２、新パーティションレジスタ４０４、連結セット・レジスタ４０６、対応連結テーブル・レジスタ４０８、分散キー・レジスタ４１０、ＵＮＩＯＮ  ＡＬＬレジスタ４１２、チェック制約レジスタ４１４、および再分散方法５００である。
【００６６】
元パーティションレジスタ４０２は、元のパーティションの位置を記憶するためのものである。
【００６７】
新パーティションレジスタ４０４は、新しいパーティションの位置を記憶するためのものである。
【００６８】
連結セット・レジスタ４０６は、連結セットの位置を記憶するためのものである。対応連結テーブル・レジスタ４０８は、対応する連結されたテーブルの位置を記憶するためのものである。
【００６９】
分散キー・レジスタ４１０は、分散キーの範囲および区間を記憶するためのものである。
【００７０】
ＵＮＩＯＮ  ＡＬＬレジスタ４１２は、ＵＮＩＯＮ  ＡＬＬビューのパラメータを記憶するためのものである。
【００７１】
チェック制約レジスタ４１４は、チェック制約を記憶するためのものである。
【００７２】
再分散方法５００は、論理プロセス・ステップ５０１〜５１０（図５参照）を含む。ステップ５０７は、論理プロセス・ステップ５０７ａ〜５０７ｒ（図６および７参照）を呼び出す。ステップ５０７ｍは、論理プロセス・ステップ５０７ｍ１〜５０７ｍ９（図８参照）を呼び出す。
【００７３】
図５を参照しながら、論理プロセス・ステップ５０１〜５１０について述べる。
【００７４】
ステップ５０１は、連結されたテーブルのセットの仕様をユーザから得る（例えばＸＭＬファイル・フォーマットで）ためのものである。標準的なスキーマを形成する例示的なＯＲＤＥＲＳおよびＬＩＮＥＩＴＥＭテーブルが、本方法についての単純な例示的連結セットを形成する。
【００７５】
ステップ５０２は、拡張されたデータベース中のすべてのパーティションに及ぶ新しいパーティショングループを作成するためのものである。
【００７６】
ステップ５０３は、パーティションが、再分散されているデータの送出側または受信側のいずれか（両方であることはない）であるように、ターゲットパーティションマップを構築し、マップを新しいパーティショングループに割り当てるためのものである。
【００７７】
ステップ５０４は、すべてのテーブル空間、テーブル、および従属オブジェクト（例えばマテリアライズド・ビュー、ビュー、外部キー制約）のデータ定義（データ定義言語（ＤＤＬ）の）を、再分散されている既存のパーティショングループから抽出するためのものである。
【００７８】
ステップ５０５は、新しい拡張されたパーティショングループを参照するようにテーブル空間定義を調整して新しい名前を割り当てるために、また同様に、新しいテーブル空間名などを参照するように他の関連オブジェクトを調整するために、抽出されたデータ定義を修正するためのものである。
【００７９】
ステップ５０６は、調整されたデータ定義を実行して、新しいデータベースパーティショングループ中で複製テーブル空間を作成するためのものである。
【００８０】
ステップ５０７は、同じ連結セット中のテーブルを同時に処理して、データベースパーティショングループ中のあらゆるテーブルについてデータを再分散させるためのものである。副方法ステップ５０７ａ〜５０７ｒについては、図６および７で述べる。
【００８１】
ステップ５０８は、各連結セットと、連結されないテーブルが残っていればそれらとについて、ステップ５０７を繰り返すためのものである。
【００８２】
ステップ５０９は、既存のテーブル空間およびその中のオブジェクトを除去するためのものである。
【００８３】
ステップ５１０は、既存のパーティショングループを除去するためのものである。
【００８４】
図６〜７を参照すると、副方法ステップ５０７は、論理プロセス・ステップ５０７ａ〜５０７ｒを含む。
【００８５】
ステップ５０７ａは、連結セット中の基礎をなすテーブルに対する許可を除去するためのものである。
【００８６】
ステップ５０７ｂは、関連するマテリアライズド照会テーブル（ＭＱＴ）があればそれらをアンマテリアライズする、言い換えればこれらのＭＱＴを通常のテーブルに一時的に変換するためのものである（これは即時的な操作である）。
【００８７】
ステップ５０７ｃは、連結セット中のすべてのテーブルの名前を<original_table_name>_Oに変更するためのものであり、_Oは_Originalを意味し、また、任意選択で、一意のシステム時間およびランダムな接尾辞を追加して、テーブル名が一意であることを保証するためのものである。
【００８８】
ステップ５０７ｄは、ステップ５０４で抽出されたデータ定義を使用して、連結セット中の各テーブルにつき、名前<original_table_name>_Nを有するマッチする新しいテーブルを新しいパーティショングループ中で作成するためのものであり、_Nは_Newを意味する。
【００８９】
ステップ５０７ｅは、元のテーブルおよび新しいテーブルを変更して、元のテーブル上のデフォルト値Ｙと新しいテーブル上のＮＵＬＬとを含む隠されたＩＮＦＬＩＧＨＴ列を追加するためのものである。
【００９０】
ステップ５０７ｆは、すべてのデータ操作言語（ＩＮＳＥＲＴ、ＤＥＬＥＴＥ、ＵＰＤＡＴＥ、ＳＥＬＥＣＴ）が適切なテーブルに（最初はすべて元のテーブルに）向けられるように、元のテーブルおよび新しいテーブル上の分散キーに対するチェック制約を変更するためのものである。
【００９１】
ステップ５０７ｇは、SELECT * FROM<original_table_name>_O UNION ALL SELECT * FROM<original_table_name>_N WITH ROW MOVEMENTとして、連結セット中の各テーブルにつき、ＵＮＩＯＮ  ＡＬＬビューを作成するためのものである。
【００９２】
ステップ５０７ｈは、新しいＵＮＩＯＮ  ＡＬＬビューに対して、関連するＭＱＴがあればそれらをリマテリアライズするためのものである。ＭＱＴが現在の連結セット中にある場合は、これをユーザによって維持されるＭＱＴに変換して、これもまた再分散できるようにする（これは即時的な操作である）。
【００９３】
ステップ５０７ｉは、このテーブルを含むすべてのパッケージを無効化して、コンパイラに、新しいテーブル情報を取得させて相応にパッケージを生成させるためのものである。
【００９４】
ステップ５０７ｊは、分散キー中の列を決定するためのものである。
【００９５】
ステップ５０７ｋは、連結セット中の親／ディメンション・テーブルから、分散キーの低い値および高い値を決定するためのものである。複合分散キーの場合は、最も高い濃度（ｃａｒｄｉｎａｌｉｔｙ）（異なる値の数）を有する構成列を選択する。
【００９６】
ステップ５０７ｌは、分散キー範囲にわたる約１００個のステップ／区間を含む反復ループを初期化するためのものである。
【００９７】
ステップ５０７ｍは、データを移動するためのものであり、これについては図８に関して述べる。ステップ５０７ｎは、関連するＭＱＴがあればそれらをアンマテリアライズするためのものである。
【００９８】
ステップ５０７ｏは、連結セット中の各テーブルにつき、関連するＵＮＩＯＮ  ＡＬＬビューを除去し、関連する新しいテーブルの名前を元のテーブル名に変更する（すなわち_N接尾辞を除去する）ためのものである。
【００９９】
ステップ５０７ｐは、各テーブルから未完了列を除去するためのものである（この場合もやはり、構造上の変更は行われず、この操作は即時的である）
【０１００】
ステップ５０７ｑは、名前変更された新しいテーブルに対して、関連するＭＱＴがあればそれらをリマテリアライズするためのものである。
【０１０１】
ステップ５０７ｒは、このテーブルを含むすべてのパッケージを無効化して、コンパイラに、新しいテーブル情報を取得させて相応にパッケージを生成させるためのものである。
【０１０２】
図８を参照すると、副方法ステップ５０７ｍは、各区間につき実施される論理プロセス・ステップ５０７ｍ１〜５０７ｍ９を含む。
【０１０３】
ステップ５０７ｍ１は、このデータ区間の移動を行う（ＩＮＦＬＩＧＨＴ列を使用して）ために、元のテーブル（<tablename>_O）および新しいテーブル（<tablename>_N）のチェック制約を変更するためのものである。
【０１０４】
ステップ５０７ｍ２は、現在の分散キー区間について、元のテーブルから新しいテーブルへのデータ移動を実施するためのものである。
【０１０５】
ステップ５０７ｍ３は、インジケータ列を更新することによって、連結セット中の親／ディメンション・テーブルから新しいテーブル（<tablename>_N）にデータをインクリメンタルに移動するためのものである。
【０１０６】
ステップ５０７ｍ４は、元のテーブル上の未完了インジケータ列を更新するためのものである。例えば、UPDATE <table_name> SET inflight = NULL WHERE<distributionkey> BETWEEN m and m + n //などのデータベース・コマンドを使用する（ここで、nは、所望の数の行、例えば１０，０００行を達成し、mはカウンタである）。
【０１０７】
ステップ５０７ｍ５は、約１０，０００行（例えば）のバッチでデータをコミットすること、および、すべての行が元のテーブルから新しいテーブルに移動されるまでステップ５０７ｍ４にループ・バックすること、のためのものである。
【０１０８】
ステップ５０７ｍ６は、等価なＭＯＶＥ段階を実施して、現在の分散キー区間の連結セット中の関連する各ファクト／子テーブルを新しいテーブルに移動するためのものである。
【０１０９】
ステップ５０７ｍ７は、任意で、ディスク・ストレージを再利用するためのものである。例えば、連結セット中の各テーブルの元のバージョンに対してオンラインＲＥＯＲＧ（再編成）操作を実施して、削除済みの行のディスク・ストレージを再利用することによって、これを行う。
【０１１０】
ステップ５０７ｍ８は、任意で、移動に関する性能統計を取得するためのものである。例えば、連結セット中の各テーブルの新しいバージョンおよび元のバージョンに対してオンラインＲＵＮＳＴＡＴＳ操作を実施することによって、あるいは、元のテーブルからの統計をコピーおよび補間することによって、これを行う。
【０１１１】
ステップ５０７ｍ９は、すべての区間が処理されるまで、ステップ５０７ｍ１で次の区間を処理するためのものである。
【０１１２】
図９に、元のパーティション１、２、および３と、新しいパーティション４とを含む、ＬＩＮＥＩＴＥＭおよびＯＲＤＥＲＳの例の再分散の方法を示す。図によれば、ＵＮＩＯＮ  ＡＬＬビューを通して、連結された結合が達成され、ＵＮＩＯＮ  ＡＬＬビューは、エンド・ユーザに提示されるものである。ＬＩ＿ＯテーブルおよびＯＲ＿Ｏテーブルは、既存のデータベースパーティション１上の元のＬＩＮＥＩＴＥＭテーブルおよび元のＯＲＤＥＲＳテーブルである。ＬＩ＿ＮテーブルおよびＯＲ＿Ｎテーブルは、拡張されたデータベース中ですべてのパーティションにわたってパーティション化された等価な新しいテーブルである。各テーブルに対するチェック制約により、オプティマイザは、エンド・ユーザ１８ＡのＳＥＬＥＣＴステートメントを、基礎をなす適切なテーブルに向けることができる。単にＩＮＦＬＩＧＨＴインジケータ列をＮＵＬＬに更新することによって、並列再分散が達成され、この更新は、元のテーブルから新しいテーブルへの行移動を引き起こす。
【０１１３】
図１０に、各再分散区間で各テーブルの元のバージョンおよび新しいバージョンに対して設定されるチェック制約を要約する。このタイムラインによれば、各区間（この例では、区間のうちの６０区間がある）につき、ＯＲＤＥＲＳテーブルは、親／ディメンション・テーブルであり、最初に移動され、その後にＬＩＮＥＩＴＥＭテーブルが続く。データを元のテーブルから新しいテーブルに再分散させるのに必要とされる実際の行移動は、単に、ＩＮＦＬＩＧＨＴ列の値をＮＵＬＬに更新することによって行われる。この更新により、元のテーブルに対するチェック制約に違反することになり、それにより、ＵＮＩＯＮ  ＡＬＬビューのWITH ROW MOVEMENT文節により、行は新しいテーブルに再配置される。再分散操作のリソース使用プロファイルを最小限に抑え、それにより再分散操作を低影響のバックグラウンド・プロセスにするために、更新は、インクリメンタルに、小さいバッチおよびコミットで実施される。一方、ＵＮＩＯＮ  ＡＬＬビューに対して実施されるデータ操作言語はどれも、チェック制約に基づいて、基礎をなす適切なテーブルに向けられることになる（例えば、選択、更新、挿入、または削除、あるいはそのすべて）。特に、インジケータ列は隠れているのでどのような値もインジケータ列に提供されないことにより、移動されている区間でのどのような挿入操作も、新しいテーブルに向けられることになり、このことは、この区間の再分散中に挿入されたどのようなデータについても、元のテーブルのセカンド・パスを実施する必要がないことを意味する。区間中のすべての行が移動されたとき、チェック制約は、次の区間の開始位置を反映するように調整され、プロセスは、すべての区間が処理されるまで繰り返される。チェック制約の実際の調整は、現在進行中のどのようなデータ処理操作も排除してオプティマイザ・プラン一貫性を維持するために、各テーブルに対する瞬時の排他ロックのみを必要とする。ＤＢＭＳがプロセスを制御しているので、チェック制約は、データが新しい制約に適合することをチェックする必要なしに、変更されてよい。
【０１１４】
図１１および１２で、好ましい実施形態と代替実施形態のそれぞれの場合の、２つのタイプの区間分布を比較する。
【０１１５】
図１１に、区間番号に対応する、分散キー範囲の均等な進行を示す。対応するデータ転送レートが、３７０万と０との間で変動し、不均等なワーク・フローを引き起こすことがわかる。
【０１１６】
図１２に、ＤＢＭＳに組み込まれた作業負荷管理能力を使用してコミット・サイズが動的に調整されるかまたは抑制されるかあるいはその両方がなされる、別の実施形態を示す。ここで、データ・レートは２００万でより均等であり、それに対して、分散キー区間は、５０万〜９８０万〜３千３０万で変動し、ワーク・フローをより均等に維持する。
【０１１７】
図１３に、再分散操作を開始する前の、元のテーブル（９Ａ１および９Ａ２）にわたる単純なＳＥＬＥＣＴ照会の実行プラン・グラフを示す。
SELECT SUM (EXTENDEDPRICE) FROM LINEITEM l,ORDERS o WHERE l.ORDERKEY = o.ORDERKEY AND o.ORDERSTATUS = 'P'
【０１１８】
このグラフは、ＳＥＬＥＣＴ照会実行のボトムアップ・ビューである。グラフの最下部では、テーブル９Ａ１および９Ａ２が矩形の中にあり、これらの上には、テーブルから得られた結果を処理して、グラフの最上部でエンド・ユーザに返される結果セットにするのに必要とされる、様々な演算子がある。グラフからわかるように、ＬＩＮＥＩＴＥＭおよびＯＲＤＥＲＳテーブルは、ハッシュ結合を使用して結合される（９Ａ５−大規模データ・ウェアハウス照会の場合の効率的な操作）。重要なことに、結合は連結され、結合の達成後まで、テーブル・キュー（ＴＱ）操作（ネットワーク相互接続を介してパーティション間でデータを送信することを担う演算子）はない。言い換えれば、結合は連結されている。
【０１１９】
図１４に、３４番目の再分散区間の後の、同じ照会についての実行プランを示す。グラフからわかるように、実行ツリーは今や、２つの主要な分岐に分割されている。左の分岐で、各テーブルの新しいバージョン（９Ｂ１および９Ｂ２）が処理され、並行して、右側の分岐で、元のテーブル（９Ｂ３および９Ｂ４）が処理される。この場合もやはり、テーブル・キュー（ＴＱ）演算子９Ｂ１３および９Ｂ１４は、結合９Ｂ９および９Ｂ１０の実施後まで現れず、したがって、結合が連結されていることをはっきりと示す。照会の推定される実行コスト（リソース使用の単位の抽象概念）が、各演算子形状の下部に示されている。わかるように、全体的な総コストは、２つの分岐のコストの合計を反映し、各分岐上のコストは、すでに再分散されたデータの量と、テーブルが配置されるパーティションの数とに比例する。したがって、左側の分岐の推定コストは、拡張されたデータベース中の４つのデータベースパーティションすべてにわたって新しいテーブルが配置されるので、より低い。重要なことに、各分岐が並行して処理されるので、全体的な実行時間も相応に短縮され、実際の実行時間は、再分散が開始される前の実行時間の約３分の２である。
【０１２０】
図１５にもやはり同じ照会を示すが、今回は、３５番目の再分散区間中であり、データは実際には未完了、すなわち移動されている。今回は、３つの副分岐がある。左側には、元のテーブル（９Ｃ１および９Ｃ２）にわたる連結された結合が示され、右側には、新しいテーブルにわたる連結された結合が示されている。しかし、この再分散区間のデータは今、元のテーブルと新しいテーブルとの間で移動しているので、実際には未完了であるこのデータの結合を実施する第３の分岐（グラフの中央）がある。しかし重要なことに、この第３の分岐中で結合されているデータの量は少量、例えばデータ・セット全体の６０分の１未満であり、したがって、オプティマイザは、この未完了データについてのテーブル間で、ネスト・ループ結合（ＮＬＪＯＩＮ）演算子９Ｃ１８を選ぶ。ＮＬＪＯＩＮ演算子は、選択的であり、テーブル走査（左と右の分岐による大規模なハッシュ結合ではより適切である）ではなくＬＩＮＥＩＴＥＭテーブル上の索引をナビゲートする。このようにして、データ未完了の全体的な影響はごくわずかであり、全体的なコストおよび実行時間に対する影響は無視してよい（この時点の照会の実際の継続時間はそれでもなお、元の再分散前の継続時間の約３分の２である）。
【０１２１】
分散キーは通常、各テーブル上で索引付けされ、このことは、移動フェーズ中の性能の助けとなる。分散キーがまだ索引付けされていない例外的なケースでは、オンライン索引作成操作を使用して自動的に索引がテーブル上で作成されてよく、この索引は、再分散操作の完了後に再び除去される。
【０１２２】
実行プランに対する未完了データの影響を最小限に抑えるために、各区間で移動されている行の数は、全テーブル行のうちの比較的ごく小さい部分（通常は１％）である。このことは、ユーザ照会性能を維持するので、本発明の重要な一面である。実際、上記の例に見られるように、照会の性能は、より多くのパーティションが照会取出しに貢献しつつあるのに伴って、再分散の過程で一貫して向上することになる。
【０１２３】
ＩＮＦＬＩＧＨＴインジケータを使用して、現在の再分散区間中に移動されている行が区別される。区間中の行の数が比較的少ないとすれば、ＩＮＦＬＩＧＨＴ条件述部（ＩＮＦＬＩＧＨＴがヌルでない）のオーバヘッドは無視できる。
【０１２４】
チェック制約が施行される（更新、挿入、および削除のＤＭＬ操作に対して）。通常、施行されたチェック制約を変更することは、制約が有効であることを検証するためにテーブルのデータを走査することを含む。しかし、ＤＢＭＳが再分散データ移動を管理しているので、これらのチェック制約の施行は、データ妥当性検査の走査を不要にすることができ、それによりこの操作を即時的なものにすることができる。
【０１２５】
再分散されているテーブルにわたる区間に及ぶ、長く実行される照会は、読取り固定（ＲＳ：Ｒｅａｄ  Ｓｔａｂｉｌｉｔｙ）分離レベルを使用して、未完了の行による一貫しない結果がないことを保証することができる。
【０１２６】
より複雑な一実施形態は、再分散のための処理ウィンドウを定義することを可能にすることができる。
【０１２７】
本発明によって提供される利点は、以下を含む。
・  連結が保存される。
・  照会性能が全体を通して維持され、照会性能は実際、非常に急速にますます向上していく。
・  テーブルは、全体を通して、ＤＭＬ照会のために完全に利用可能かつオンラインに維持される。
・  再分散操作は、完全にトランザクション・ログされる。例えば、ディスク媒体障害が発生した場合、再分散プロセスは、データベースが回復されたときに、中断した場所からシームレスに再開されることが可能である。
・  未完了のテーブルのためにディスク空間を倍増する必要はない。各反復の後でオンライン再編成操作を発行して、元のテーブルから削除された行の空間を再利用することができる。
・  再分散操作の前に、最中に、または後で、特別なバックアップは必要ではない。標準的なオンライン・バックアップ方法は、再分散プロセスと互換性がある。
・  パーセンテージベースの進行の、信頼性のあるモニタリングを容易にする。すなわち、１００個の反復に分割された場合は、％スループットを見ることができる。
・  再分散は、いつでも一時停止されてよく、挿入選択バッチ／コミット・サイズを縮小することおよび既存の作業負荷管理能力を使用して優先順位を調整することによって、抑制されてよい。
・  親ディメンション・テーブルが常に最初に移動されるので、再分散操作中に外部キー制約が維持される。
【０１２８】
次に、本発明のさらに他の実施形態について述べる。好ましい実施形態の論理プロセス・ステップの全部または一部が、別法として、本方法の論理プロセス・ステップを実施するように構成されたロジック要素を備える１つのロジック装置または複数のロジック装置中で具体化されてもよいこと、および、このようなロジック要素がハードウェア・コンポーネント、ファームウェア・コンポーネント、またはこれらの組合せを含む場合があることは、当業者には明らかであろう。
【０１２９】
好ましい実施形態のロジック・コンポーネントの全部または一部が、別法として、本方法のステップを実施するためのロジック要素を備えるロジック装置中で具体化されてもよいこと、および、このようなロジック要素が、例えばプログラムマブル・ロジック・アレイや特定用途向け集積回路の中の、ロジック・ゲートなどのコンポーネントを含む場合があることも、当業者には等しく明らかであろう。このようなロジック構成はさらに、例えば、固定のまたは伝送可能なキャリア媒体を使用して記憶および伝送され得る仮想ハードウェア記述子言語を使用して、このようなアレイまたは回路中でロジック構造を一時的または永続的に確立するための、イネーブリング要素中で具体化されてもよい。
【０１３０】
さらに他の代替実施形態では、本発明は、コンピュータ・プログラム・コードを展開するステップを含むサービスを展開するコンピュータ実装方法の形で実現されてもよく、このコンピュータ・プログラム・コードは、コンピュータ・インフラストラクチャ中に展開されてそこで実行されたとき、コンピュータ・システムに本方法のすべてのステップを実施させるように動作可能である。
【０１３１】
好ましい実施形態の方法およびコンポーネントが、別法として、並列ソフトウェアを実行するための２つ以上のプロセッサを備える並列コンピューティング・システム中で完全にまたは部分的に具体化されてもよいことは、理解されるであろう。
【０１３２】
本発明の範囲を逸脱することなく、前述の例示的な実施形態に多くの改良および修正を加えることができることは、当業者には明らかであろう。
【図１】
0006410825.tif 000002
【図２】
0006410825.tif 000003
【図３】
0006410825.tif 000004
【図４】
0006410825.tif 000005
【図５】
0006410825.tif 000006
【図６】
0006410825.tif 000007
【図７】
0006410825.tif 000008
【図８】
0006410825.tif 000009
【図９】
0006410825.tif 000010
【図１０】
0006410825.tif 000011
【図１１】
0006410825.tif 000012
【図１２】
0006410825.tif 000013
【図１３】
0006410825.tif 000014
【図１４】
0006410825.tif 000015
【図１５】
0006410825.tif 000016