管理の手引き


表のデータを再配分する方法

表のデータの再分配を行うときは、ユーティリティーは以下のことを行います。

  1. SYSTABLES カタログ表にあるその表の行をロックする。
  2. この表に関連するパッケージすべてを無効にする。 表に関連付けられた区分化マップ ID は、 表の再分配が行われるので変更されることになります。 パッケージが無効にされたので、コンパイラーは表に関する新しい区分化情報を取得して、 それに応じてパッケージを生成する必要があります。
  3. 排他モードで表をロックする。
  4. DELETE および INSERT を使って表のデータを再配分する。
  5. 再配分操作が正常に終了したら、ユーティリティーは次のことを行う。
    1. 表に対して COMMIT を出す。
    2. 続いて、ノード・グループ内の次の表の処理を行う。

    表が完全に再配分される前に操作が失敗した場合は、 ユーティリティーは次のことを行う。

    1. 表に加えた更新に対して ROLLBACK を出す。
    2. 再配分操作全体を終了して、エラーを戻す。

データの配分時にログ・スペース所要量の見積もりを行うことは重要です。 ログは、データを再配分する各データベース区画ごとの INSERT 操作および DELETE 操作を受け入れるのに十分の大きさでなければなりません。 ロギング所要量は、 最多のデータを失うデータベース区画、 または最多のデータを獲得するデータベース区画で最も大きくなります。 より多くのデータベース区画に移動しようとしている場合は、 現行データベース区画の、新しいデータベース区画数に対する比率が、 INSERT 操作および DELETE 操作の数を決定する助けになります。

たとえば、4 つのデータベース区画から 5 つのデータベース区画への移動の場合、 元の 4 つのデータベース区画の約 20 パーセントのデータが、 新規データベース区画に移動します。 これは、 元の 4 つのデータベース区画が、 各データベース区画のデータの合計に基づいて、 それぞれ 20 パーセントの DELETE 操作を行うことを意味します。 新規データベース区画では、 すべての INSERT 操作 (つまり、 元の 4 つのデータベース区画すべてで行った DELETE 操作と同じ数に相当する操作) を行います。

上記の例は、 均等なデータの配分が行われることを前提としています。 区分化キーに多数の NULL 値が存在する場合のような、 データの配分が均等に行われない場合もあります。 このような場合、 すべての行は、あるデータベース区画では以前の区分化体系により、 また別のデータベース区画では新規の区分化体系により存在します。 その結果、 これら 2 つのデータベース区画で必要とされるログ・スペースの量が増え、 おそらく、均等な配布を想定した場合の計算量を超えることになります。

実際の計算を行うときは、 (20 パーセントなどの) 変更のパーセンテージに、 最大の表のサイズを乗算しなければなりません。 これを行うのは、 各表の再配分が、 単一のトランザクションとして実行されるためです。
注:ただし、最大の表は均等に配分されているが、 (たとえば) 2 番目に大きな表には 1 つまたは複数の膨張したデータベース区画が存在する場合もあります。 そのような場合には、 最大の表ではなく、 2 番目に大きな表の使用を検討することをお勧めします。

データベース区画で挿入および削除されるデータの最大量を計算した後、 その数を 2 倍して、 活動ログのピーク・サイズを判別します。 このサイズが活動ログ限界の 32 GB を超える場合、 複数のステップでデータ再配分を行わなければなりません。 "makepmap"というユーティリティーを使用すれば、各ステップで 1 つずつ、 一連のターゲット区分化マップを生成することができます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]