17.00 - 17.05 - データ ブロック サイズの管理 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - データベースの管理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Release Date
2020年6月
Content Type
管理
Publication ID
B035-1093-170K-JPN
Language
日本語 (日本)
データ ブロック サイズのグローバル設定は、以下のDBS制御ユーティリティの設定を使っ
て制御されます。
  • PermDBAllocUnit
  • PermDBSize

個々のテーブルのデータ ブロック サイズをCREATE TABLE文またはALTER TABLE 文の
DATABLOCKSIZEオプションとMERGEBLOCKRATIOオプションを使って調整することもできます。

PermDBAllocUnitとシステム パフォーマンス

テーブルを変更すると、行が追加、削除、および変更されます。データ ブロックは、テーブルの現在の内容に合わせて動的に拡大または縮小します。ただし、データ ブロック サイズはPermDBAllocUnitの単位でしか変更できません。したがって、ほぼ常に、データ ブロックの最後に未使用の領域が存在することになります。テーブルの各変更が比較的均等である場合、データ ブロック サイズは徐々に増えるように変化し、平均で割り当て単位の約半分の領域が各データ ブロックで無駄になります(これはおおまかな推定概算であり、データベースごとに異なるさまざまな要素によって決まります)。

新しい行が頻繁にテーブルに追加されたり、可変長の行を持つテーブルが頻繁に大きくなる環境では、割り当て単位を大きくすることで、システム パフォーマンスが多少向上する場合があります。割り当て単位を大きくすると、追加の変更に対応できるスペースがあらかじめ確保されるので、データ ブロックを頻繁に拡大する必要がなくなります。ただし、新しい行が頻繁には追加されない環境では、各ブロックの領域が大きくなると、平均I/Oサイズが増加してパフォーマンスが低下する場合があります。

この設定は一度に大幅には変更せず、実動システムに変更をコミットする前に、その影響について慎重に判断してください。割り当て単位は、頻繁に変更されるテーブルの平均行サイズの倍数に設定します(最も近いセクターに切り上げる)。

割り当て単位を大きくしたときの利点は、多くの場合、その結果として無駄になる平均領域が増えることで相殺されるので、PermDBAllocUnitはデフォルトの設定のままにしておくことを推奨します。

PermDBSizeとシステム パフォーマンス

データベースのパフォーマンスは、データ ブロック サイズと、データベースでよく実行される作業のタイプとの関係に影響される場合があります。

  • データベース問合わせが、1つまたは少数のテーブルの行を使用する戦術的なものである場合、データ アクセスを高速にするためには、データ ブロックごとに格納される行を少なくした方が有利です。オンライン トランザクション処理(OLTP)がこのタイプの作業の一例です。
  • データベース問合わせが、テーブルごとに多数のテーブルの行を使用する複雑な問合わせによる戦略的なものである場合、データI/O操作の負荷を最小限にするためには、各データ ブロックに多数の行を格納した方が有利です。意思決定支援ソフトウェア(DSS)や複雑なレポートの生成がこのタイプの作業の例です。

PermDBSizeは、永久テーブルの複数行データ ブロックに対してシステムで使用するデフォルトの最大サイズを設定します。データベースが主に戦略的な作業に使用される場合はより大きな値を、データベースが主に戦術的な作業に使用される場合はより小さな値を使用します。

雑多な作業を行なう環境では、データベースでよく実行される作業の種類に基づいて、PermDBSizeの値を決定します。別のタイプの作業に使用されるテーブルについては、CREATE TABLE文およびALTER TABLE SQL文のDATABLOCKSIZEオプションを使用して、テーブルごとにPermDBSizeを上書きできます。

テーブルのDATABLOCKSIZE の調整

以下のオプションを使って、個々のテーブルの複数行データ ブロックのデフォルト サイズを制御でき
ます。
  • DATABLOCKSIZEオプション
  • MERGEBLOCKRATIOオプション

これらをCREATE TABLEやALTER TABLE文で、次のとおり指定します。

指定内容 結果
CREATE TABLEでDATABLOCKSIZEを指定 PermDBSize(の「PERMDBSize」を参照)ではなくDATABLOCKSIZEで指定したサイズが、データブロックのサイズの上限になる。

テーブルに含まれるすべての行について、システムは、要求されたデータブロックのサイズ分の領域を割り当てる。

ALTER TABLEでDATABLOCKSIZEを指定 DATABLOCKSIZEで指定したサイズが、データ ブロックのサイズの上限になる。

新しいサイズになるよう長期間にわたって徐々に調整するかどうかは、IMMEDIATE句の有無によって指定される。

CREATE TABLEでMERGEBLOCKRATIOを指定 結果のサイズが、複数行データブロック サイズのパーセント指定値より大きい場合は、制限のため、ブロックの組み合わせが試行される。
ALTER TABLEでMERGEBLOCKRATIOを指定 複数の既存ブロックをマージしているとき、結果のブロックサイズには上限がある。

この制限は、論理的に隣接しているブロックが、変更されている単一のブロックとマージ可能であるかどうかで決まります。

DATABLOCKオプションで指定されたブロック サイズやPermBDSizeの指定で、引き続きブロックが最初にロードできます。フル テーブルの変更中にのみ、マージが動作します。

MERGEBLOCKRATIOと複数行データブロックのデフォルト サイズは関係ありません。

IMMEDIATE句 テーブルの既存のデータ ブロックすべてに含まれる行は、新規に指定したサイズで再パックされる。大規模なテーブルの場合、この処理に時間がかかることがある。その場合、再構築の処理中にテーブルのコピーを2種類維持するためにスプールが必要になる。

IMMEDIATE句を指定しない場合、既存のデータ ブロックは変更されない。テーブルの個々のデータブロックがユーザー トランザクションの結果として変更されるときに、DATABLOCKSIZEの新規の値が使用される。そのようにして、時間と共に新しいブロック サイズが反映されるようテーブルが変更される。

テーブルの実ブロック サイズを評価するためには、FerretユーティリティのSHOWBLOCKSコマンドを実行できます。このコマンドの実行に関する詳細は、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。グローバルなデータ ブロック サイズを指定するには、PermDBSize(<Teradata Vantage™ - データベース ユーティリティ、B035-1102>の「PERMDBSize」を参照)を使用します。

SQLマクロを使用してSHOWBLOCKSに類似した情報を生成することもできます。PopulateFsysInfoTableマクロは、CreateFsysInfoTableマクロによって作成されるテーブルにファイル システム データを生成します。PopulateFsysInfoTable_ANSIマクロは、CreateFsysInfoTable_ANSIマクロによって作成されるテーブルにファイル システム データを生成します。詳細については、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>のファイル システム情報のマクロのセクションを参照してください。

最大データ ブロック サイズ

最大ブロック サイズを設定する方法には次の2通りがあります。

操作 コメント
DBS制御を使ってPermDBSizeを設定する システム レベルで最大ブロック サイズを設定すると、テーブルはその値を、システム全体で新しい値が設定されるまでの間だけ使用します。
CREATEコマンドまたはALTER TABLEコマンドを使用する テーブル レベルで最大ブロック サイズを設定すると、この値は、ALTER TABLEコマンドを使って変更されるまで変わりません。

ブロック サイズを大きくすると、1回の入出力で選択される行数が増えるのでフル テーブル スキャン操作が増強されます。DSSの目的とするところは、入出力操作の回数を最小限におさえて、トランザクションに要する全体的な時間を短縮することにあります。

ブロック サイズを小さくして最も効果があるのは、必要最小限の検索のみを行なうことでオーバーヘッドを最小化しようとするトランザクションを中心としたシステムの場合です。

データ ブロック サイズの詳細については、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>の「PermDBSize」を参照してください。行はブロック境界をまたぐことはできません。INSERTまたはUPDATEが原因で、定義されている最大ブロック サイズをブロックが超えてしまった場合、以下に応じてそのブロックは2つまたは3つのブロックに分割されます。

状況 および 結果
新しい行または変更された行がブロックの先頭または末尾にある。 その行だけを収めたブロックが、テーブルで定義されている最大サイズのブロックよりも大きい。 その行は、単独でブロック内に置かれる。
新しい行または変更された行がブロックの中間にある。 その行だけを収めたブロックが、テーブルで定義されている最大サイズよりも大きい。 3方式ブロック分割が実行される。

既存のブロックは、変更されている行がある場所で、2つのブロックに分割され、ブロックの間に、変更行だけを含む、新しいブロックが作成されます。

既存のブロック サイズは変更が収まるように変更でき、テーブルの定義最大サイズをまだ超えていない。 該当なし 既存の行と新しい(変更)行がある、単一の新しいブロックが作成される。
既存のブロック サイズは変更が収まるように変更できず、テーブルの定義最大サイズを超えていない 該当なし 変更が適用され、各部分がテーブルの定義最大値より大きくならないように、必要な数(最小限)のブロックに分割される。
上記のルールよりも優先される付加的な特別規則があります。例えば、次のようになります。
  • 別々のサブテーブルに属する行が、データ ブロック内に共存することはない。
  • スプール テーブルは、一度にすべて、スプール用に定義された最大サイズ(十分な行がある限り)で、ほとんど常にブロック全体として、多くの行とともに作成される。

データ ブロック マージの使用

データ ブロック マージ操作は、論理的に隣接したデータ ブロックを結合することにより、テーブルにある非常に小さいデータ ブロックの数を減らします。この結果、Teradataファイル システムでは複数の小さいデータ ブロックを単一の大きいデータ ブロックに自動的にマージできます。ブロックが少ないと、ディスクから大量行を読み取り、変更するために必要な、I/O処理数が減ります。マージには以下のような特徴があります。
  • 自動的に動作します。
  • ブロック サイズのヒストグラムの手動調査は必要ありません。
  • 特定のAMPレベルのロックは必要ありません。
  • マージするために小規模ブロック(更新する必要がないブロックを含む)を継続的に検索します。
  • データを変更するワークロードの性能のみに影響します。ワークロードのみの読み取り、新しいサブテーブルへの挿入操作、プライマリ キーの変更リクエストは影響を受けません。

    さらに、マージ データブロックは、永久テーブルと永久ジャーナル テーブルにのみ適用でき、グローバル一時テーブルや揮発テーブルには適用できません。

データブロック マージをサポートするDBS制御フィールドについては、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。

複数の既存ブロックをマージしているとき、結果のブロック サイズを定義するMergeBlockRatioオプションについては、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE TABLE」および「ALTER TABLE」を参照してください。

ジャーナル データ ブロック サイズ

ジャーナル データ ブロック サイズは、入出力の使用量に影響します。ジャーナル サイズを大きくすると、入出力数は減りますが、データベース上に無駄なブロック領域が生じます。以下を実行できます。詳細は、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。