17.00 - 17.05 - トリガーおよび戦術的クエリー - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

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

Teradata Databaseのトリガーは並列化されています。つまり、それらを起動させる文に従った複数文のリクエストとしてインプリメントされます。複数文のリクエストの一部であるということは、トリガーおよびトリガー文が、単一の最適化単位および単一の回復単位になるという意味です。

トリガーの実行には、いくつかの、またはすべてのAMPが関係します。トリガーの存在の結果、実クエリーがいくつかのAMPに合わせて高度に調整される場合でも、クエリーは全AMP操作になります。これは、クエリーとトリガーの両方が同じ最適化プランを共有しているためです。

トリガーの実行は、少数のAMP操作であることもあれば、全AMP操作であることもあります。クエリーとトリガーはどちらも同じリクエストに統合されるので、たとえ少数のAMP用に高度に調整されていても、トリガーの存在によってクエリーが全AMP操作になることもあります。

トリガーされる挿入、更新、および削除文は、修飾条件が、トリガーされるテーブルからプライマリ インデックス値を導出するために役立つ場合、単一AMP操作になります。その他の場合は、全AMPでトリガーされる文ではなく、グループAMP操作が最適化ルーチンによって選択されることがあります。

トリガーの実行がシステム パフォーマンスに与える影響をさらに理解するには、トリガー文に対してEXPLAINを実行します。次の例では、新しいサプライヤーが追加されるたびにトリガーを実行するように指定します。トリガーによるパフォーマンスへの影響の感触をつかむには、INSERTリクエストに対してEXPLAINを実行してください。

     CREATE TRIGGER supp_insert AFTER INSERT ON supplier
     REFERENCING NEW AS n
     FOR EACH ROW
      (INSERT INTO supplog VALUES (n.s_suppkey, n.s_acctbal,   
       n.s_nationkey);
     );

     EXPLAIN
     INSERT INTO CAB.supplier
     VALUES (353,'Fosters','133 Meadow',13,'3108437272',0.00,'new')

Teradata Databaseは、以下のEXPLAINレポートを返します(重要なテキストを太字で強調しています)。

     Explanation
     ------------------------------------------------------------
       1) First, we execute the following steps in parallel.
            1) We do an INSERT into CAB.supplier.
            2)  We do an INSERT into CAB.supplog.
       2) Finally, we send out an END TRANSACTION step to all AMPs involved
          in processing the request.

このレポートで重要な行は、1.2のWe do an INSERT into CAB.supplogです。

このトリガーは、新しいサプライヤー行がデータベースに追加されるたびにサプライヤー ログ テーブルに行を挿入するために設計されています。両方の挿入は、クエリー プランで並列であり、戦術的クエリーには非常に有効です。

特にトリガーが関係する可能性がある場合、戦術的クエリーの一部である単一行更新文を常にEXPLAINする必要があります。