キュー テーブルの最初の列は、キュー挿入タイムスタンプ(QITS)列として定義されています。この列の値によってキュー中の行の順序が決まり、その結果、おおむね先入れ先出し(FIFO)順になります。
行がキュー テーブルに挿入された時刻をその行のQITS値とするには、特定の値を指定するのではなくデフォルト値(CURRENT_TIMESTAMPの結果)を使用します。FIFO順としての行の位置を制御するには、QITS列にTIMESTAMP値を設定することができます。
QITS列に値が指定されていない複数のINSERTリクエストを含む複文リクエストの場合、挿入するどの行についてもQITS値は同じになります。
- すべてのINSERTリクエストで、QITS列のためのTIMESTAMP値を指定する。
- 複文リクエストに、QITS列の値が指定されていない複数のINSERT文を含めないようにする。
- QITS列値に指定する現行タイムスタンプにはオフセットを加算するようにし、そのオフセットをINSERTリクエストごとに増加させる。
例:
INSERT shopping_cart(CURRENT_TIMESTAMP + INTERVAL '0.001', 100) ;INSERT shopping_cart(CURRENT_TIMESTAMP + INTERVAL '0.002', 200) ;INSERT shopping_cart(CURRENT_TIMESTAMP + INTERVAL '0.003', 300);
- システムがCPU消費型でないなら、応答時間には影響しない。
- メモリ内の内部キューの更新が必要になるため、基本テーブルへのINSERTよりもコストが高い。
キュー テーブルとキュー テーブルのキャッシュの詳細については、<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「CREATE TABLE」を参照してください。
反復リクエストによるキュー テーブルへの挿入
反復リクエストの中でINSERTリクエストを使用してキュー テーブルに行を挿入する場合、テーブルに対して設定される行ハッシュ レベルのWRITEロックの数を最小限にするため、また、それらのロックと、キュー テーブルが内部キュー テーブル キャッシュを更新するのに使用する内部行収集処理で設定される全AMPテーブル レベルのREADロックとの間でのリソースの競合の結果としてデッドロックが発生する可能性を最小限にするため、リクエストごとのデータ レコードの数を制限することが必要かもしれません。
反復リクエストでINSERTリクエストを使用してキュー テーブルに行を挿入する際の状況 | THEN … |
---|---|
以下の条件がすべてtrueの場合、
|
リクエストごとにパックするデータ レコードの数は問題になりません。 |
以下の条件のいずれかがtrueの場合、
|
リクエストごとに最大4個のデータ レコードをパックします。 例えば、BTEQを使用してデータ行をキュー テーブルにインポートする場合は、BTEQ .SET PACKコマンドで最大値として4を使用します。 これらの条件により、キュー テーブルが内部キュー テーブルキャッシュを更新するのに使用する内部行収集処理が引き起こされます。 |
キュー テーブルとキュー テーブルのキャッシュの詳細については、<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「CREATE TABLE」を参照してください。