結合インデックスの保守は、行ハッシュまたは行キー レベルのローカライズ ロッキングをできるだけ使用するよう最適化されます。スプール マージなど、全AMP操作を使用して保守が実行される際には、テーブル レベルのロックが適用されます。
更新されるテーブルに結合インデックスが含まれる場合、UPDATEリクエストのEXPLAINは、更新時に全AMP操作とテーブル レベルのロッキングが使用されるか、単一AMP操作と行ハッシュ レベルのロッキングが使用されるかを示します。
以下に、基本テーブルが1行ずつ更新されるときに結合インデックスに対する単一AMP更新と行ハッシュ レベルのロッキングがサポートされる条件をリストします。カーディナリティの見積もりが低信頼性で行なわれる場合、またはインデックスがすべての結合条件とともに、非固有および非インデックス列に基づいて3つ以上テーブルで定義される場合、複雑なインデックスにはこれらの最適化が適用されないことがあります。
基本テーブルでINSERTが行単位で実行される場合、テーブルの一部の非プライマリ インデックス列と別のテーブルのプライマリ インデックス列の間が結合されたテーブルのプライマリ インデックス列セットに等号制約を指定する挿入は、行ハッシュ レベル ロックを使用するように最適化されています。
修飾する行の数がAMP数しきい値の10%以内であり、結合操作の結果として生じる行の数もそのしきい値内であれば、このINSERTリクエストのためにテーブル レベルのロックになることはありません。
テーブルに単一テーブル非カバー結合インデックスが定義されている場合、修飾された行を複製して別のテーブルと結合することによって処理される結合は、以下のように処理されます。
- 等価条件を使用して最初のテーブルから取得した単一AMP検索結果がSpool 2に入ります。Spool 2は、等価条件の右側の式によってハッシュが再配置され、グループAMPスプールと見なされます。
- Spool 2から結合インデックスへの少数AMP結合が等価条件に基づいて行なわれ、その結果がSpool 3に入ります。Spool 3は最初のテーブルのROWID条件によって再配置され、グループAMPスプールとしても適格となります。
- 少数AMP結合がSpool 3から最初のテーブルのROWIDに戻ります。
結合を修飾する行の数がしきい値の10%以内であれば、DELETEリクエストでテーブル レベルのロックになることはありません。
詳細については、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
- 結合インデックスのプライマリ インデックスの値を、リクエストのWHERE句述部で指定する必要があります。
- UPDATEリクエストで結合インデックスのプライマリ インデックスを変更することはできません。
- 影響を受ける結合インデックス行にアクセスするのにNUSIを使用するとコスト効率がよい場合は、行ハッシュ ロックと直接更新ステップを使用してそれが行なわれます。ごく少数の行のみ更新される場合は(少数AMP操作)、読み取られるインデックス行のNUSIサブテーブルに行ハッシュREADロックが掛かります。行ハッシュ ロックは、インデックス行から抽出されたrowID値を使用する実テーブルにも適用されます。
詳細については、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
- 結合インデックスのプライマリ インデックスの値を、DELETEリクエストのWHERE句述部で指定する必要があります。
- 削除される行は、CREATE JOIN INDEX文での外部結合の内部テーブルの行であってはなりません。ただし、以下の場合は例外です。
- 結合インデックスの外部結合条件が内部テーブルのUPI列に対して指定されている。
- 結合インデックスの外部結合条件が内部テーブルのNUPI列に対して指定されている。
- 影響を受ける結合インデックス行またはハッシュ インデックス行にアクセスするのにNUSIを使用するとコスト効率がよい場合は、行ハッシュ レベルのロックと直接削除ステップを使用してそれが行なわれます。ごく少数の行のみ削除される場合は(少数AMP操作)、読み取られるインデックス行のNUSIサブテーブルに行ハッシュ レベルのREADロックが掛かります。行ハッシュ レベルのロックは、インデックス行から抽出されたrowID値を使用する実テーブルにも適用されます。
他のすべての条件下では、単一行UPDATE操作で結合インデックスにテーブル レベルのWRITEロックが掛かります。
EXPLAINテキストでテーブル レベルのロックが報告された場合は、別の方法として、1つ以上のセカンダリ インデックスを使用する集合処理アプローチを検討してください。
詳細については、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
戦術的クエリーの場合に結合インデックスにどのようにロックが掛かるかについては、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
結合インデックスを削除してTeradata MultiLoadまたはTeradata FastLoadバッチ ロードを使用できるようにする場合、そのインデックスにアクセスするすべてのリクエストが処理を完了するまでは、その操作を行なうことはできません。リクエストがアクセスする結合インデックスにREADロックが掛けられ、ロックされたインデックスに対するDROP JOIN INDEXリクエストの処理は、データベースにより、READロックがすべて解除されるまで先送りされます。