デッドロックのないトランザクションの例 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLリクエストおよびトランザクション処理

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/arh1512079329802.ditamap
dita:ditavalPath
ja-JP/arh1512079329802.ditaval
dita:id
B035-1142
Product Category
Software
Teradata Vantage

次の例は、同時並行性を最適化する方法を示しています。

例のテーブル定義

次のテーブル定義を想定します。

     CREATE TABLE table_1 (
       column_1 INTEGER,
       column_2 INTEGER)
     PRIMARY INDEX (column_1);

例の問題トランザクション

次の並列に実行するトランザクションを考えてみます。

トランザクション番号 SQLテキスト
1
LOCKING table_1 FOR READ
ALTER TABLE table_1, FALLBACK;
2
SELECT *
FROM table_1;

デッドロックのないトランザクション処理

以下のステップが、この順序で実行されることを想定します。

  1. トランザクション1は、テーブル レベルのREADロックをtable_1に設定します。
  2. トランザクション2も、テーブル レベルのREADロックをtable_1に設定します。
  3. これらのトランザクションが両方ともtable_1にアクセスし、並行して実行されます。
  4. トランザクション1は、トランザクション2のSELECTリクエストと並行してフォールバックを構築しますが、2番目のトランザクションが完了してtable_1のロックを解放するまでは完了しません。次に、トランザクション1はそのロックをEXCLUSIVEに格上げしてALTERを完了します。