MERGEBLOCKRATIO - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

テーブルのサイズが、SQL INSERT操作およびバルク データ ロードによって増加するのみで、減少しない場合、データ ブロックの平均サイズは、テーブルを定義したときにDATABLOCKSIZEオプションに対して指定した値に従って許可される最大値の半分から、その最大サイズまでの間になります。DATABLOCKSIZEを参照してください。

ただし、大半のテーブルは、テーブルに対して行なわれる挿入、更新、および削除のワークロードの組み合わせが原因で、存在期間中にサイズが変動します。テーブルから行を削除する場合、データ ブロックが、テーブルに定義された最大値の半分より大幅に小さいサイズまで縮小する場合があります。一度、データ ブロックのサイズが、定義されている最大値の半分未満になると、ほぼ同数の行がテーブルに追加されない限り、小さいまま残ります。テーブルにそのような小さなデータ ブロックが数多く存在する場合、更新および読み取り操作で読み取る必要があるデータ ブロックの数は、ブロックが大きい場合より多くなり、このためにテーブルの更新のパフォーマンスが大幅に低下します。マージ ブロック率の役割は、Teradataファイル システムでそのような小さなデータ ブロックを大きなデータ ブロックに動的にマージできるようにすることですが、テーブルでの全テーブル変更が発生したときに限られます。データ ブロックのサイズが大きく数が少ないと、ディスクから行のセットを読み取る場合に必要とされるI/O操作の数が減少します。

MERGEBLOCKRATIOオプションは、永久テーブルおよび永久ジャーナル テーブルに対するフル テーブル変更操作において、複数の既存の小さいデータ ブロックを組み合わせて1つの大きいデータ ブロックにする手段を提供します。このオプションは、揮発ファイルおよびグローバル一時ファイルに対しては使用できません。ファイル システムは、指定したマージ ブロック率を使用して、テーブル中のデータ ブロック数を少なくします。それによりテーブルの大半が多数の小さいデータ ブロックで構成される状態が回避されます。このような状況で、「小さい」一般的なブロック サイズを定義することはできません。この説明に該当する正確なブロック サイズは主観的なものであり、さまざまなシステム、さまざまなワークロード、およびさまざまな数のアクティブ ユーザーのI/Oパフォーマンスによって異なる場合があります。

新しいデータの挿入によって頻繁に変更されるテーブルでは、平均のブロック サイズは、サポートされる最大複数行ブロック サイズの50%~100%の範囲で変化します。この最大サポート サイズは、テーブル レベルの属性DATABLOCKSIZE、または、テーブルのDATABLOCKSIZE属性の値を設定していない場合は、DBS制御レコードで定義した、テーブルに対するシステムレベルのブロック サイズとして定義されます。マージ ブロック率のデフォルトのパーセンテージは60ですが、最大値は100です(CREATE TABLEでMERGEBLOCKRATIOオプションを使用するか、またはDBS制御フラグMergeBlockRatioを使用して指定)。詳細については、Teradata Vantage™ - データベース ユーティリティ、B035-1102を参照してください。

テーブルから行を削除する場合には、削除した行が含まれていたブロックが、定義されている範囲のサイズよりも小さくなる場合があるうえ、そのブロックの新しいサイズは、ユーザーがテーブル定義を作成、または最後に変更したときに指定したブロック サイズとはかなり異なる場合があります。

データ ブロックをマージすると利点となるブロック サイズ分布の極端な例としては、平均ブロック サイズを64 KBにして作成したテーブルのブロックが、時間の経過とともに平均サイズがわずか8 KBまで縮小または分割されたという場合が挙げられます。このテーブルで ブロックの分割が頻繁に実行された場合、データ ブロックの数が桁違いに増えている可能性があります。リクエストによってテーブル内のすべてのデータ ブロックがアクセスされることはほとんどありません。

テーブル内の複数行が、元の平均ブロック サイズに近いサイズのブロックにリパックできる場合は、テーブル内の大半のブロック、またはすべてのブロックを読み込むクエリーに対する応答時間を短縮できるでしょう。これは、論理的または物理的(あるいはその両方の)読み込み回数が桁違いに減少するためです。

ブロックの自動的なマージは、ALTER TABLE DATABLOCKSIZEオプションが提供する拡張機能です。ALTER TABLE (テーブルの基本的なパラメータ)を参照してください。このオプションにより、小さいデータ ブロックでテーブルがオーバーランしてしまう問題が軽減されますが、次のようないくつかの短所があります。
  • 小さいデータ ブロックの問題を解決するには、DBAが新しいSQLリクエストを手動で実行する必要があります。
  • 問題の解決に必要なSQLリクエストを実行する前に、パフォーマンスの問題を引き起こしているテーブルとブロック サイズを判別する必要があります。例えば、テーブル データ ブロック サイズの統計は、FerretユーティリティのSHOWBLOCKSコマンドを使用するか、SQLインターフェースでCreateFsysInfoTableマクロとPopulateFsysInfoTableマクロを使用して入手することができます。Ferretユーティリティの詳細については、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。CreateFsysInfoTableマクロとPopulateFsysInfoTableマクロの詳細については、<Teradata Vantage™ - SQL演算子およびユーザー定義関数、B035-1210>の「ファイル システム情報のマクロ」を参照してください。
  • 問題を解決するSQLリクエストで実行する操作では、EXCLUSIVEテーブル レベルのロックが必要ですが、これはテーブルの上で同時更新のアクティビティをブロックします。
  • ALTER TABLEのオプションIMMEDIATEを指定した場合、テーブルが更新された際にテーブル内のデータ ブロックが小さくなるのを禁止する方法はありません。ALTER TABLEのオプションIMMEDIATEを指定しない場合、テーブル内の一部のデータ ブロックがしばらく更新されないと、もう一度大きくなるまでに長い時間がかかることがあります。ALTER TABLE (テーブルの基本的なパラメータ)を参照してください。
マージ ブロック率のアプローチでは、このような短所はなく、次のような機能強化が、すべて自動で実現されます。
  • DBAが介入することなく、自動的に実行します。
  • ブロック サイズのヒストグラムを分析する必要がありません。
  • 特定のAMPレベルのロックは必要ありません。
  • 小さいデータ ブロックを継続して検索し、これらのブロックが更新されていない場合でもマージできるようにします。

小さいデータ ブロックがマージされるサイズのしきい値は、MERGEBLOCKRATIOオプションをCREATE TABLE文またはALTER TABLEリクエストとともに使用するか、またはMergeBlockRatio DBS制御パラメータの設定を変更することによって制御できます。ALTER TABLE文またはCREATE TABLEリクエストでMergeBlockRatio DBS制御パラメータ、またはMERGEBLOCKRATIOオプションのいずれかを使用して、マージ ブロック率のパーセンテージを最低で1 %に設定することができます。MERGEBLOCKRATIOのデフォルト値は60です。

各テーブルのデータ ブロックのマージを無効にするには、NO MERGEBLOCKRATIOオプションを指定します。システムのすべてのテーブルのデータ ブロックのマージを無効にするには、DBS制御パラメータDisableMergeBlocksをTRUEに設定します。

非常に小さいデータ ブロック サイズが定義されているテーブルは、小さなデータ ブロックをマージしてもあまりメリットがありません。これは、そのようなテーブルのほとんどのデータ ブロックのサイズが、MERGEBLOCKRATIOで設定される値に近いためです。このため、これらのテーブルではデータ ブロックをマージする機会はほとんどありません。