LOB取得モード - ODBC Driver for Teradata

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

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

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

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

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

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

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

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

接続レベルでSLOBモードの設定を構成するには、DSNまたは接続文字列で関連するドライバ オプションを指定します。このように指定した設定は、該当する接続内で実行されるすべてのクエリーと操作に適用されます。接続レベルの設定は、文属性により上書きできます。ステートメント レベルでSLOBモードの設定を構成するには、次の文属性を設定します。
  • SQL_ATTR_MAX_SINGLE_LOB_BYTES: SLOBモードでドライバが取得可能なLOBの最大サイズ(バイト単位)を指定するには、この属性を使用します。このサイズを超えるLOBは、遅延モードにより取得されます。この属性は、ドライバのMax Single LOB Bytes(単一LOBの最大バイト数)設定MaxSingleLOBBytesに相当します。
  • SQL_ATTR_MAX_LOB_BYTES_PER_ROW: SLOBモードでドライバが取得可能な1行ごとのLOBデータの最大サイズ(バイト単位)を指定するには、この属性を使用します。ある行に含まれるLOBデータの総量がこのサイズを超える場合、ドライバは遅延モードによりその行の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)モードでドライバが取得可能な1行ごとのLOBデータの最大サイズ(バイト単位)を指定します。ある行に含まれるLOBデータの総量がこのサイズを超える場合、ドライバは遅延モードによりその行のLOBを取得します。

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

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

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

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

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

ドライバの実装の違い

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

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

旧ドライバと新ドライバでは、SLOBの実装について以下のような違いがあります。
  • 新ドライバは、1行ごとに最大で2GBのSLOBをキャッシュします(またはキャッシュしようとします)。
  • 旧ドライバがキャッシュするのは2つの応答バッファのみであり、最大サイズは32MBです。
新ドライバには、次の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をキャッシュします。