- 遅延モードでは、ODBC Driver for Teradataは追加のクエリーを送信して各LOBを取得します。デフォルトでは、ドライバは遅延モードになります。
- SLOBモードでは、ODBC Driver for Teradataは追加のクエリーを送信することなくLOBを取得しますが、一部のLOBをメモリ内にキャッシュしなければならない場合があります。
ドライバのパフォーマンスを最適化するには、メモリにキャッシュすべきでない大きなLOBを取得する場合は遅延モードを使用し、多数の小さなLOBを取得する場合に多数のクエリーが送信されるのを回避するためには、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です。
- 不連続な順序で列から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のサイズ応じて異なるため、データを処理しながらステートメントごとに設定を調整することを推奨します。
- 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データを遅延モードで取得します。
Use Sequential Retrieval Only(逐次取得のみを使用する)
キー名 | デフォルト値 | 必須 |
---|---|---|
UseSequentialRetrievalOnly | クリア(0) | いいえ |
- 有効 (1): SLOBモードで動作するODBC Driver for Teradataは、取得対象のLOBを検索する間に読み取った別のLOBをキャッシュしません。これは、クエリーが連続的であればODBC Driver for Teradataは単一の経路でLOBを取得できるため、LOBをキャッシュする必要がないからです。
- 無効 (0): SLOBモードで動作するドライバは、取得対象のLOBの検索中に読み取った別のLOBをキャッシュします。このキャッシュ処理により、ODBC Driver for Teradataはどのような順序でもSLOBを正常に取得することができます。
このオプションを使用する代わりにSQL_ATTR_USE_SEQUENTIAL_RETRIEVAL_ONLY文属性を使用することで、接続レベルではなくステートメント レベルでこの設定を指定できます。
ドライバの実装の違い
バージョン16.20以降のドライバでは、ODBC Driver for Teradataには、LOBデータの転送モードを決定するデフォルト設定が用意されています。これらのデフォルト サイズの値は、ほとんどのケースに合うように設定されているため、過去のバージョンでの値と異なる場合があります。
LOBが大きすぎる場合、メモリにSLOBをキャッシュする必要がなければ遅延モードの方が高速であるため、ODBC Driver for Teradataは遅延モードになります。地理空間データを扱うケースなどには、SLOBの方が適しています。
- バージョン16.20以降、ODBC Driver for Teradataは、最大2GBのすべてのSLOBを連続でキャッシュします(またはキャッシュしようとします)。
- バージョン16.10以前のドライバでは、ODBC Driver for Teradataは最大32MBの2つの応答バッファのみをキャッシュします。
- 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をキャッシュします。