LOB取得モード - ODBC Driver for Teradata

ODBC Driver for Teradata® ユーザー ガイド

Product
ODBC Driver for Teradata
Release Number
17.10
Published
2021年6月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/wxs1608578396899.ditamap
dita:ditavalPath
ja-JP/wxs1608578396899.ditaval
dita:id
B035-2526
Product Category
Teradata Tools and Utilities
データベース インスタンスによっては、BLOB(バイナリ ラージ オブジェクト)やCLOB(文字ラージ オブジェクト)などのLOBデータ型が入っていることがあります。バージョン16.20のドライバ以降、ODBC Driver for Teradataでは、LOBを取得する2つの方法(遅延モードスマートLOBモード)がサポートされています。適切な取得モードを構成することによって、ドライバのパフォーマンスが最適化されます。
  • 遅延モードでは、ODBC Driver for Teradataは追加のクエリーを送信して各LOBを取得します。デフォルトでは、ドライバは遅延モードになります。
  • SLOBモードでは、ODBC Driver for Teradataは追加のクエリーを送信することなくLOBを取得しますが、一部のLOBをメモリ内にキャッシュしなければならない場合があります。

ドライバのパフォーマンスを最適化するには、メモリにキャッシュすべきでない大きなLOBを取得する場合は遅延モードを使用し、多数の小さなLOBを取得する場合に多数のクエリーが送信されるのを回避するためには、SLOBモードを使用します。例えば、地理空間データを取得する場合は、SLOBモードを使用するとドライバのパフォーマンスを向上させることができます。

適切に構成せずにSLOBモードを使用すると、ドライバのパフォーマンスが低下する可能性があります。

SLOBモードの使用ガイドライン

SLOBモードが適しているのは、以下のサイズ制限が満たされている場合のみです。
  • 取得するLOBは、Max Single LOB Bytes(単一LOBの最大バイト数)設定(MaxSingleLOBBytes)で指定されているサイズよりも小さくする必要があります。このサイズよりも大きいLOBを取得する場合、ODBC Driver for Teradataは遅延モードの使用にフォール バックします。この設定のデフォルト値は4000です。
  • 1行から取得するLOBの総量が、Max Total LOB Bytes Per Row(行ごとの最大総LOBバイト数)設定MaxTotalLOBBytesPerRowで指定するサイズよりも大きい場合、ODBC Driver for Teradataはまずこのサイズ制限までSLOBモードでLOBを取得してから、遅延モードで該当行にある残りのLOBを取得します。この設定のデフォルト値は65536です。
SLOBモードを有効化する前に、以下の条件に注意してください。
  • 不連続な順序で列からLOBを取得する可能性がある場合は、Use Sequential Retrieval Only(逐次取得のみを使用する)設定(UseSequentialRetrievalOnly)を有効にしないでください。例えば、このオプションを有効にした状態で、テーブルの3番目の列、1番目の列、5番目の列の順にLOBを取得するクエリーを実行してはいけません。このオプションを有効にしてから不連続な順序でLOBを取得した場合、ODBC Driver for TeradataはSLOBモードで返されたLOBを破棄し、遅延モードを使用してそれらのすべてのLOBをもう一度取得することになります。
  • Use Sequential Retrieval Only(逐次取得のみを使用する)設定(UseSequentialRetrievalOnly)が無効になっている場合、ODBC Driver for Teradataは取得対象のLOBの検索中に見つけた別のLOBをキャッシュします。大量のデータをメモリ内にキャッシュすると、パフォーマンスが低下する可能性があります。この問題を回避するには、ODBC Driver for Teradataが大きなLOBにはSLOBモードを適用しないように、サイズ制限を設定します。SLOBモードの制限値を満たしていないLOB値は、SLOBモードではなく遅延モードで取得されるため、キャッシュされません。

SLOBモード設定のスコープの管理

SLOBモードの設定は、接続レベルまたはステートメント レベルで構成します。最適な設定は、取得するLOBのサイズ応じて異なるため、データを処理しながらステートメントごとに設定を調整することを推奨します。

接続レベルでSLOBモードの設定を構成するには、DSNまたは接続文字列で関連するドライバ オプションを指定します。このように指定した設定は、該当する接続内で実行されるすべてのクエリーと操作に適用されます。接続レベルの設定は、文属性により上書きできます。ステートメント レベルでSLOBモードの設定を構成するには、次の文属性を設定します。
  • SQL_ATTR_MAX_SINGLE_LOB_BYTES: SLOBモードを使用してODBC Driver for Teradataが取得可能なLOBの最大サイズ(バイト単位)を指定するには、この属性を使用します。このサイズを超えるLOBは、遅延モードを使用して取得されます。この属性は、ドライバのMax Single LOB Bytes(単一LOBの最大バイト数)設定(MaxSingleLOBBytes)に相当します。
  • SQL_ATTR_MAX_LOB_BYTES_PER_ROW: SLOBモードを使用してODBC Driver for Teradataが取得可能な1行ごとのLOBデータの最大サイズ(バイト単位)を指定するには、この属性を使用します。ある行に入っているLOBデータの総量がこのサイズを超えている場合、ODBC Driver for Teradataは代わりに遅延モードを使用して、その行のLOBを取得します。この属性は、ドライバのMax Total LOB Bytes Per Row(行ごとの最大総LOBバイト数)設定(MaxTotalLOBBytesPerRow)に相当します。
  • SQL_ATTR_USE_SEQUENTIAL_RETRIEVAL_ONLY: 列のLOBデータを順番に取得するかどうかを指定するには、この属性を使用します。この属性は、ドライバのUse Sequential Retrieval Only(逐次取得のみを使用する)設定UseSequentialRetrievalOnlyに相当します。

Max Single LOB Bytes(単一LOBの最大バイト数)

キー名 デフォルト値 必須
MaxSingleLOBBytes 4000 いいえ

Max Total LOB Bytes Per Row(行ごとの最大総LOBバイト数)

キー名 デフォルト値 必須
MaxTotalLOBBytesPerRow 65536 いいえ

このオプションでは、スマートLOB(SLOB)モードでODBC Driver for Teradataが取得可能な1行ごとのLOBデータの最大サイズ(バイト単位)を指定します。ある行に含まれるLOBデータの総量がこのサイズを超える場合、ODBC Driver for Teradataは遅延モードによりその行のLOBを取得します。

このオプションを0に設定した場合、SLOBモードは無効化され、ODBC Driver for TeradataはすべてのLOBデータを遅延モードで取得します。

このオプションを使用する代わりにSQL_ATTR_MAX_LOB_BYTES_PER_ROW文属性を使用することで、接続レベルではなくステートメント レベルでこのサイズ設定を指定できます。

Use Sequential Retrieval Only(逐次取得のみを使用する)

キー名 デフォルト値 必須
UseSequentialRetrievalOnly クリア(0) いいえ
このオプションは、列からのLOBデータの取得を、連続した順序または不連続な順序のどちらで行なうかをODBC Driver for Teradataに指示します。スマートLOB(SLOB)モードで動作している場合、ODBC Driver for TeradataのLOBデータの読み取りとキャッシュの挙動は、この設定に応じて変化します。
  • 有効 (1): SLOBモードで動作するODBC Driver for Teradataは、取得対象のLOBを検索する間に読み取った別のLOBをキャッシュしません。これは、クエリーが連続的であればODBC Driver for Teradataは単一の経路でLOBを取得できるため、LOBをキャッシュする必要がないからです。
  • 無効 (0): SLOBモードで動作するドライバは、取得対象のLOBの検索中に読み取った別のLOBをキャッシュします。このキャッシュ処理により、ODBC Driver for Teradataはどのような順序でもSLOBを正常に取得することができます。
不連続な順序で列からLOBを取得する可能性がある場合には、このオプションを有効化しないでください。例えば、このオプションを有効化して、テーブルの3番目の列、1番目の列、5番目の列の順にLOBを取得するクエリーは実行しないでください。このオプションを有効化して不連続にLOBを取得すると、 ODBC Driver for TeradataはSLOBモードで返されたLOBを破棄してしまうため、遅延モードですべてのLOBの取得をやり直さなければならなくなります。

このオプションを使用する代わりにSQL_ATTR_USE_SEQUENTIAL_RETRIEVAL_ONLY文属性を使用することで、接続レベルではなくステートメント レベルでこの設定を指定できます。

ドライバの実装の違い

バージョン16.20以降のドライバでは、ODBC Driver for Teradataには、LOBデータの転送モードを決定するデフォルト設定が用意されています。これらのデフォルト サイズの値は、ほとんどのケースに合うように設定されているため、過去のバージョンでの値と異なる場合があります。

LOBが大きすぎる場合、メモリにSLOBをキャッシュする必要がなければ遅延モードの方が高速であるため、ODBC Driver for Teradataは遅延モードになります。地理空間データを扱うケースなどには、SLOBの方が適しています。

各ドライバでのSLOBの実装の違いを以下に示します。
  • バージョン16.20以降、ODBC Driver for Teradataは、最大2GBのすべてのSLOBを連続でキャッシュします(またはキャッシュしようとします)。
  • バージョン16.10以前のドライバでは、ODBC Driver for Teradataは最大32MBの2つの応答バッファのみをキャッシュします。
16.20以降、ODBC Driver for Teradataには次の3つの新しい構成パラメータがあります。
  • 1- Enable SLOB Random Access(SLOBランダム アクセスの有効化)
  • 2- Max size of one SLOB(SLOBの最大サイズ)
  • 3- Max size of all SLOBs in a Row(行内の全SLOBの最大サイズ)

パラメータ#1がTrueに設定されている場合、ドライバはパラメータ#3のサイズ(最大2GB)までSLOBをキャッシュします。