DBC.TableSizeVには、スキューのあるテーブルの識別に役立つ情報が含まれています。プライマリ インデックスが不適切な場合にはテーブルのスキューが生じます。次のように、スキューのあるテーブルを参照する問合わせは、特定のAMP上で他のAMP上より多くの行を処理しようとして、領域を使い果たす可能性があります。
- アクセスされるオブジェクトにスプール領域の制限が定義されている場合には、SELECT文によりスプール領域が使い果たされる可能性がある。
- INSERT文やUPDATE文により固定領域が使い果たされる可能性がある。
- DBC.TableSizeVでスキューのあるテーブルを検出するには、次のSQL文を使用します。
SELECT vproc AS "AMP", TableName (FORMAT 'X(20)'), CurrentPerm FROM DBC.TableSizeV WHERE DatabaseName = 'database' ORDER BY TableName, "AMP" ; AMP TableName CurrentPerm --- -------------------- ----------- 0 employee_upi_onempid 18,944 1 employee_upi_onempid 18,944 2 employee_upi_onempid 18,944 3 employee_upi_onempid 19,968 0 employee_nupi_ondept 4,096 1 employee_nupi_ondept 30,208 2 employee_nupi_ondept 15,360 3 employee_nupi_ondept 12,288
この例で、応答セットは2つのテーブルに関するAMP別の領域割り当てを表示します。次の点に注意する必要があります。
- employee_upi_onempidでは、すべてのvproc間でCurrentPermは類似しています。固定領域は、システム内のすべてのAMPに相対的に均等に分散されています。
- Employee_nupi_ondept表は十分に分散されていません。CurrentPermの数値は、異なるAMP上で4,096バイトから30,208バイトまでの範囲に及んでいます。
- 検出された、スキューのあるテーブルのプライマリ インデックスを再定義します。
プライマリ インデックスの選択を参照してください。