17.10 - BLOCKCOMPRESSION - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)

このオプションでは、テーブルの温度に基づくブロック圧縮の状態を設定します。

Teradata Virtual Storageは、データの温度をテーブル レベルではなくシリンダ レベルで追跡します。ファイル システムは、その温度情報をTeradata Virtual Storageから取得し、温度関連の圧縮をシリンダ レベルで管理します。<Teradata Vantage™ - Teradata® Virtual Storage、B035-1179>を参照してください。

Teradata Virtual Storageは、温度に基づくブロック レベル圧縮が有効な場合、すべてのテーブルについてシリンダの温度基準を追跡します。温度はシステム全体で有効であり、Teradata Virtual Storageでは、システム上のどのデータがどの特定の温度に関連付けられているかを決定するときに、すべての温度を考慮します。

ファイル システムは、テーブルで温度ベースのブロック レベル圧縮が使用されているかどうかを判別し、シリンダの温度に基づいて選択的圧縮または圧縮解除を適用します。例えば、DBS制御パラメータのTempBLCThreshがCOLDに設定されているとすると、COLDに定義されているしきい値がシステム内のすべてのテーブルに適用されます。AUTOTEMPテーブルのシリンダが定義済みのCOLDバンド内にある場合、それらのシリンダはブロック レベル圧縮の対象となります。温度に基づくブロック レベル圧縮が無効でも、ブロック レベル圧縮が有効の場合、データベースはAUTOTEMPテーブルをMANUALテーブルと同様に管理します。

ファイル システムは、通常のブロック レベル圧縮または温度に基づくブロック レベル圧縮のいずれを使用しても、MANUALテーブルのシリンダを圧縮できません。代わりに、FerretコマンドのCOMPRESSまたはUNCOMPRESSを使用して、既存のMANUALテーブルまたはサブテーブルの圧縮ステータスを手動で変更する必要があります。BlockCompressionクエリー バンドを使用して、適切なブロック レベル圧縮を使用する新しいMANUALテーブルまたはサブテーブルに行をロードすることもできます。

ALTER TABLE文を使用して、新しいMANUALテーブルに対し温度に基づくブロック レベルの圧縮をアクティブ化して、そのBLOCKCOMPRESSION定義をMANUALからAUTOTEMPに変更できます。次のTVSTemperatureクエリー バンドのいずれかを使用して、新しいAUTOTEMPテーブルまたはサブテーブルにデータをロードすることもできます。
  • TVSTEMPERATURE_PRIMARY
  • TVSTEMPERATURE_PRIMARYCLOBS
  • TVSTEMPERATURE_FALLBACK
  • TVSTEMPERATURE_FALLBACKCLOBS

また、FerretコマンドのCOMPRESSとUNCOMPRESSを使用して、AUTOTEMPテーブルの状態を手動で変更することもできます。これらのパラメータを変更すると、Ferretから警告メッセージが返されます。Ferretユーティリティの詳細については、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。

テーブルのBLOCKCOMPRESSIONオプションがAUTOTEMPに設定されており、データの圧縮状態が温度と見合っていない場合、Ferretを使用して行なったブロック レベル圧縮の変更は時間の経過とともにファイル システムによって元に戻されます。このため、テーブル全体に一貫して圧縮が必要であると考えられるテーブルに対しては、温度に基づくブロック レベルの圧縮を使用しないことが最善の方法です。

通常のブロック レベル圧縮により圧縮できる一連のサブテーブルと同じサブテーブルが、温度に基づくブロック レベル圧縮により圧縮されます。
  • プライマリおよびフォールバック実テーブル
  • プライマリおよびフォールバックCLOBデータ サブテーブル

次の表に、BLOCKCOMPRESSIONに指定できるオプションをリストします。

オプション 説明
AUTOTEMP AUTOTEMPは、ブロック レベル圧縮をデータの温度に基づいて自動的に管理する必要があるテーブルを識別します。ファイル システムは、テーブル内のデータのブロック圧縮状態を、そのTeradata Virtual Storage温度に基づいていつでも変更できます。

温度に基づくブロック レベルの圧縮では、テーブル全体に一度に直接圧縮が適用されないため、AUTOTEMPテーブルでは通常、圧縮状態が混在します。テーブル内のさまざまなシリンダの温度は、時間の経過に従って上昇または下降するため、ファイル システムはTeradata Virtual Storage温度に応じてそれらのシリンダを圧縮または圧縮解除します。

AUTOTEMPテーブル内のシリンダが温度に基づくブロック レベル圧縮または圧縮解除に対して適格となるのは、それらのシリンダが指定されたTempBLCThreshオプションに定義されたしきい値に達したか、しきい値より低くなったか、またはしきい値を超過したときのみです。

  テーブル内のすべてのデータを一度にブロック圧縮(または圧縮解除)するには、テーブル内のすべてのシリンダが指定されたTempBLCThreshオプションのしきい値に達したか、それを超過したことをTeradata Virtual Storageで認識する必要があります。このことが発生するのは、テーブル内のすべてのシリンダが過去にアクセスされたことがなく、他のすべてのシリンダとの関係で、圧縮の場合はCOLD、圧縮解除の場合はHOTと分類されている場合のみです。

温度に基づくブロック レベルの圧縮では、テーブル全体に一度に直接圧縮が適用されないため、AUTOTEMPテーブルでは通常、圧縮状態が混在します。テーブル内のさまざまなシリンダの温度は、時間の経過に従って上昇または下降するため、ファイル システムはTeradata Virtual Storage温度に応じてそれらのシリンダを圧縮または圧縮解除します。

Teradata Virtual Storageは、温度に基づくブロック レベル圧縮が、テーブル レベルではなくシリンダ レベルで有効な場合に、すべてのテーブルについてシリンダの温度基準を追跡します。ファイル システムはその温度情報をTeradata Virtual Storageから取得するため、シリンダ レベルでの温度関連の圧縮も処理します。温度はシステム全体で有効であり、Teradata Virtual Storageでは、システム上のどのデータがどの温度に関連付けられているかを決定するときに、すべての温度を考慮します。

この決定を行なった後、ファイル システムは、テーブルで温度に基づくブロック レベル圧縮を使用するかどうかを判断します。使用する場合、シリンダの温度に基づく選択的圧縮または圧縮解除を適用します。たとえば、DBS制御パラメータのTempBLCThreshがCOLDに設定されているとすると、COLDに定義されているしきい値がシステム内のすべてのテーブルに適用されるため、AUTOTEMPテーブルのシリンダがCOLDバンド内にある場合、それらのシリンダはブロック レベル圧縮の対象となります。

AUTOTEMPテーブルのブロック レベル圧縮の温度に基づくしきい値は、次のように機能します。
  • データ ブロックが最初はブロック レベルで圧縮され、圧縮に定義されたしきい値よりも温度が高くなった場合、ファイル システムではそれらのデータ ブロックを圧縮解除する。
  • データ ブロックが最初はブロック レベルで圧縮されておらず、圧縮解除に定義されたしきい値よりも温度が低くなった場合、ファイル システムではそれらのデータ ブロックを圧縮します。

温度に基づくブロック レベル圧縮が無効でも、ブロック レベル圧縮が有効の場合、データベースはAUTOTEMPテーブルをMANUALテーブルと同様に扱います。

このオプションの場合、TVSTemperatureクエリー バンド オプションやFerretコマンドを発行できるが、データの圧縮状態が温度と見合っていないなら、時間の経過とともにファイル システムによってそのような変更は元に戻されます。このため、テーブル全体に一貫して圧縮が必要であると考えられるテーブルに対しては、温度に基づくブロック レベルの圧縮を使用しないことが最善の方法です。

DEFAULT DEFAULTは、温度ベースのブロック レベル圧縮がDBS制御パラメータDefaultTableModeによって決定されるテーブルを識別します。詳細については、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。
DefaultTableModeの値は、CREATE TABLEまたはALTER TABLE文の一部としてテーブル定義に保存されることがありません。そのため、BLOCKCOMPRESSION=DEFAULTに設定したテーブルは、後でDefaultTableModeパラメータが変更されたときに影響を受けます。
MANUAL MANUALは、AUTOTEMPテーブルのように自動的に管理されるのではないテーブルを識別します。

行を空のテーブルにロードする前に、TVSTemperatureクエリー バンド オプションを指定して、データのブロック レベル圧縮状態を決定できます。

テーブルにデータが取り込まれた後で、テーブルのデータの圧縮状態がファイル システムによって変更されるのは、ユーザーがFerretコマンドを使用してそのための具体的な操作を実行する場合に限られます。

温度と無関係のBlockCompressionクエリー バンドを使用して、空のテーブルに温度と無関係のデータをロードし、ブロック レベル圧縮を実行できます。
NEVER NEVERは、クエリー バンドまたは該当するDBS制御パラメータのデフォルト設定に関係なく、温度に基づくブロック レベル圧縮または圧縮解除を行なわないテーブルを識別します。ファイル システムでは、DBS制御ブロック レベル圧縮設定の内容に関係なく、テーブルまたはサブテーブルのデータを圧縮または圧縮解除しません。

したがって、テーブルのデータを手動で圧縮するFerretコマンドはデータベースによって拒否されるが、テーブルのデータを圧縮解除するFerretコマンドは有効です。

混合ブロック レベル圧縮状態でも、テーブルの機能に何の影響もありませんが、ブロック圧縮の一貫性が失われます。このため、テーブル全体に一貫して圧縮が必要であるテーブルに対しては、AUTOTEMPオプションも、どのような形式の温度に基づくブロック レベルの圧縮も使用しないことが最善の方法です。

テーブルのブロック レベル圧縮ブロックを変更する際に、そのテーブルのBLOCKCOMPRESSIONオプションをMANUALに変更するためにALTER TABLE文を実行すると、新しく作成したブロックが圧縮されます。テーブルがNEVERに変更されていた場合は、テーブルの圧縮ブロックを変更すると、新しく作成したブロックはファイル システムによって圧縮解除されます。BLOCKCOMPRESSIONオプションがMANUALまたはNEVERに変更されていた場合に、テーブルの非圧縮ブロックを変更すると、新しく作成したブロックは非圧縮状態のままになります。

BLOCKCOMPRESSION=AUTOTEMPが定義されていないテーブルについては、ユーザーがFerretコマンドを使用してテーブルのブロック レベルの圧縮状態を制御する必要があります。または、テーブルに行が入っていない場合は、いずれかのTVSTemperatureクエリー バンドを使用して、新しくロードされる行に使用するブロック レベル圧縮のタイプを指定できます。温度に基づくブロック レベル圧縮が無効でも、ブロック レベル圧縮が有効の場合、データベースはAUTOTEMPテーブルをMANUALテーブルと同様に扱います。

AUTOTEMPテーブルで、テーブル内のすべてのデータを一度にブロック圧縮または圧縮解除するには、テーブル内のすべてのシリンダがDBS制御パラメータTempBLCThreshによって指定されたしきい値に達していることをTeradata Virtual Storageで認識する必要があります。例えば、TempBLCThreshのしきい値がWARMに設定されているとします。

テーブル内のすべてのシリンダ 適格性
WARMまたはCOLDのしきい値に達したか、それを下回った場合 ブロック レベル圧縮。
HOTしきい値に達したか、それを超えた場合 圧縮解除。

一貫性のあるブロック圧縮を実現するために必要な操作については、BLOCKCOMPRESSIONを参照してください。

圧縮率を上げるために、同一のテーブルに対して複数値圧縮、アルゴリズム圧縮、およびブロック レベル圧縮を組み合わせることができます。ただし、一般的なルールとして、アルゴリズム圧縮とブロック レベル圧縮を組み合わせることはしないでください。他のワークロードについてパフォーマンスが低下する恐れがあります。