キュー テーブルへの挿入 - Teradata Database - Teradata Vantage NewSQL Engine - キュー テーブルへの行の挿入の使用上の注意

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

キュー テーブルの最初の列は、キュー挿入タイムスタンプ(QITS)列として定義されています。この列の値によってキュー中の行の順序が決まり、その結果、おおむね先入れ先出し(FIFO)順になります。

行がキュー テーブルに挿入された時刻をその行のQITS値とするには、特定の値を指定するのではなくデフォルト値(CURRENT_TIMESTAMPの結果)を使用します。FIFO順としての行の位置を制御するには、QITS列にTIMESTAMP値を設定することができます。

QITS列に値が指定されていない複数のINSERTリクエストを含む複文リクエストの場合、挿入するどの行についてもQITS値は同じになります。

キュー テーブルの行ごとに固有の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);
パフォーマンスに関しては、キュー テーブルへのINSERT操作には次の効果があります。
  • システムがCPU消費型でないなら、応答時間には影響しない。
  • メモリ内の内部キューの更新が必要になるため、基本テーブルへのINSERTよりもコストが高い。

キュー テーブルとキュー テーブルのキャッシュの詳細については、<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「CREATE TABLE」を参照してください。

反復リクエストによるキュー テーブルへの挿入

反復リクエストの中でINSERTリクエストを使用してキュー テーブルに行を挿入する場合、テーブルに対して設定される行ハッシュ レベルのWRITEロックの数を最小限にするため、また、それらのロックと、キュー テーブルが内部キュー テーブル キャッシュを更新するのに使用する内部行収集処理で設定される全AMPテーブル レベルのREADロックとの間でのリソースの競合の結果としてデッドロックが発生する可能性を最小限にするため、リクエストごとのデータ レコードの数を制限することが必要かもしれません。

反復リクエストでINSERTリクエストを使用してキュー テーブルに行を挿入する際の状況 THEN …
以下の条件がすべてtrueの場合、
  • キュー テーブルが空でない
  • 最後のシステム リセット以来に、キュー テーブルからINSERTリクエストまたはSELECT AND CONSUMEリクエストのいずれかが既に実行済み
  • 挿入操作中にキュー テーブルの行が更新されたり削除されたりしない
リクエストごとにパックするデータ レコードの数は問題になりません。
以下の条件のいずれかがtrueの場合、
  • キュー テーブルが空
  • 最後のシステム リセット以来、キュー テーブルからINSERTリクエストまたはSELECT AND CONSUMEリクエストのいずれもまだ実行されていない
  • 挿入操作中にキュー テーブルの行が更新されたり削除されたりする
リクエストごとに最大4個のデータ レコードをパックします。

例えば、BTEQを使用してデータ行をキュー テーブルにインポートする場合は、BTEQ .SET PACKコマンドで最大値として4を使用します。

これらの条件により、キュー テーブルが内部キュー テーブルキャッシュを更新するのに使用する内部行収集処理が引き起こされます。

キュー テーブルとキュー テーブルのキャッシュの詳細については、<Teradata Vantage™ SQLデータ定義言語 - 構文規則および例、B035-1144>の「CREATE TABLE」を参照してください。