Teradataセッション セマンティクスを使用するセッションの場合、グローバル一時テーブルおよび揮発テーブルのLOG/NO LOGおよびDELETE/PRESERVE ON COMMITオプションでの特定の重大なパフォーマンス問題に注意してください。Teradataセッション モード時の、DELETE、INSERT、UPDATEなどの各SQLリクエストは、BEGIN TRANSACTION文とEND TRANSACTION文でトランザクション境界を明示的に定義しない限り、トランザクションとして扱われます。
Teradataセッション モードの暗黙のトランザクション セマンティクスでは、各SQLリクエストを個々のトランザクションとして扱うので、DMLリクエストを明示的なトランザクションに明示的にグループ分けしない限り、大量の全AMP操作がCPUおよびディスクI/Oのパフォーマンス全体に影響を与えます。
以下の4つの揮発テーブルでは、各種テーブル更新操作の記録と実行に関連するパフォーマンスの問題を例示します。
CREATE VOLATILE TABLE vt_ld LOG ( column_1 INTEGER column_2 INTEGER) ON COMMIT DELETE ROWS; CREATE VOLATILE TABLE vt_lp LOG ( column_1 INTEGER column_2 INTEGER) ON COMMIT PRESERVE ROWS; CREATE VOLATILE TABLE vt_nld NO LOG ( column_1 INTEGER column_2 INTEGER) ON COMMIT DELETE ROWS; CREATE VOLATILE TABLE vt_nlp NO LOG ( column_1 INTEGER column_2 INTEGER) ON COMMIT PRESERVE ROWS;
NO LOGまたはON COMMIT DELETE ROWSで定義されたテーブルの場合、それぞれのジャーナリング(LOG)ステップでは、登録項を作成し、アボートの場合にそのテーブルの内容を空にします。これは全AMP操作です。
それぞれの削除ステップでは、トランザクションが終了するときにそのテーブルの内容を削除します。ON COMMIT DELETE ROWSテーブルで行なわれるこの操作は全AMP操作です。
揮発テーブルおよびグローバル一時テーブルの一時ジャーナリング ステップは、一般的に、テーブルごとに、DELETE、INSERT、またはUPDATE操作を含むトランザクションごとに一度生成されます。
揮発テーブルおよびグローバル一時テーブルの削除ステップは、DELETE、INSERT、またはUPDATE操作を含むそれぞれのトランザクションごとに一度生成されます。
例えば、以下の揮発テーブルの定義を考慮する必要があります。
CREATE VOLATILE TABLE vt1 ( f1 INTEGER, f2 INTEGER) ON COMMIT DELETE ROWS; CREATE VOLATILE TABLE vt2 ( f1 INTEGER, f2 INTEGER) ON COMMIT DELETE ROWS; CREATE VOLATILE TABLE vt3 ( f1 INTEGER, f2 INTEGER) ON COMMIT DELETE ROWS;
以下のようにTeradataセッション モードで複数文リクエストを使ったこれらのテーブルの挿入に対するオーバーヘッドは、1つの一時ジャーナル ステップと1つの削除ステップだけです。
INSERT vt1 (1,1) ;INSERT vt2 (1,1) ;INSERT vt1 (2,2) ;INSERT vt3 (1,1) ;INSERT vt2 (2,2);
以下のように明示トランザクションで単一文リクエストを使ったこれらのテーブルの挿入に対するオーバーヘッドは、それぞれのテーブルごとに1つのジャーナル ステップとこれらのテーブルのすべてに対する1つの削除ステップです。
BT;
INSERT vt1 (1,1); ← 1 transient journal step for vt1
INSERT vt2 (1,1); ← 1 transient journal step for vt2
INSERT vt1 (2,2);
INSERT vt3 (1,1); ← 1 transient journal step for vt3
INSERT vt2 (2,2);
ET; ← 1 delete step for all NO LOG or ON COMMIT
DELETE ROWS volatile tables
referenced in the transaction.
揮発テーブルに対する削除、挿入、および更新によって次の処理が実行されます。
テーブル名 | 一時ジャーナル ステップが実行されるか | 削除ステップが実行されるか | トランザクションごとの全AMP操作の数 |
---|---|---|---|
vt_ld | Y | Y | 1 |
vt_nld | Y | Y | 1 |
vt_lp | N | N | 0 |
vt_nlp | Y | N | 1 |
「一時ジャーナル ステップが実行されるか」が「Y」の場合、その操作はトランザクションごとに1つのテーブルあたり1回実行されます。
「削除ステップが実行されるか」が「Y」の場合、その操作はトランザクションごとに1回実行されます。
200の個々のTeradataセッション モードの挿入について以下の比較が永久テーブルと揮発テーブルに対して行なわれました。揮発テーブルは、以下に対するON COMMIT DELETEで更新されて200の挿入が追加されました。
- 200の暗黙的なトランザクション。
- 200すべての個々の挿入をカプセル化するように定義された単一の明示的なトランザクション。
テーブルのタイプ | トランザクション境界セマンティクス | 合計(CPU時間)(秒) | 合計(ディスクI/O) |
---|---|---|---|
永久 | 暗黙的 | 13.49 | 5,761 |
揮発 | 暗黙的 | 48.50 | 31,889 |
明示権限 | 6.03 | 4,702 |
これらの数字は、比較目的のためにのみ表示されています。実際の値は、システムの構成によります。値間の比は、揮発テーブルとグローバル一時テーブルの構成全体にわたって比較できます。暗黙のトランザクションと比較した場合に、明示的なトランザクション境界がパフォーマンスの点で上回る度合いは、その他の要因が一定のものとして、CPU時間とディスクI/Oの両方の測定値のオーダーになることに注意してください。