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する必要があります。