17.00 - 17.05 - デッドロックのないトランザクションの例 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
ユーザー ガイド
Publication ID
B035-1142-170K-JPN
Language
日本語 (日本)

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

例のテーブル定義

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

     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を完了します。