17.00 - 17.05 - パーティション化されたテーブルに関するメモリ制限 - Advanced SQL Engine - Teradata Database

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

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

パーティション化されたテーブルの処理時に、さまざまなメモリ制限が課せられることがあります。次の表は、これらの制限のいくつかに関連するエラー メッセージ番号を列挙し、それらの説明および対処方法を提供します。

メッセージ番号 問題 考えられる原因 対処方法
3708 テーブル ヘッダーのサイズ制限を超過しています(<Teradata Vantage™ - データベースの設計、B035-1094>を参照)。

制限はthinテーブル ヘッダーで64 KBで、fatテーブル ヘッダーで1 MBです。

テーブルの列が多すぎます。 可能なら、テーブルの列を減らしてください。
テーブルで圧縮された固有の値が多すぎます。 可能なら、圧縮する値の数を減らしてください。
パーティション式が複雑すぎます。 パーティション式を簡潔にするか、数を減らしてください。

可能なら、CASE_Nではなく、RANGE_NをEACH句とともに使用します。

3710 構文解析プログラムのメモリ サイズ制限を超過しました。

この制限は可変であり、DBS制御のMaxParseTreeSegsパラメータの値によって決まります。

DBS制御のパラメータの現行値は、リクエストを処理するのに十分な構文解析プログラム メモリを割り振っていません。 次のDBS制御パラメータの値を、指定された設定に変更してください。

クエリーの作業負荷の大きさによっては、これらの値をさらに増やす必要があります。

DBS制御レコードのMaxParseTreeSegsの値を変更する方法については、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。
  • ハッシュ インデックスも結合インデックスも付いていないPPIテーブルでこの問題が発生する場合は、MaxParseTreeSegsの値を次の値に変更します。

    2,000 (バイト パック システムの場合)

    4,000 (バイト整合システムの場合)

  • ハッシュ インデックスまたは結合インデックスの付いたPPIテーブルでこの問題が発生する場合は、MaxParseTreeSegsの値を次の値に変更し、Teradataサポートに連絡してください。

    2,000 (バイト パック システムの場合)

    4,000 (バイト整合システムの場合)

パーティション式が複雑すぎます。 パーティション式を簡潔にするか、数を減らしてください。

可能なら、CASE_Nではなく、RANGE_NをEACH句とともに使用します。

3891 パーティションCHECK制約のテキスト サイズ制限を超過したかどうかを調べます。

パーティションCHECK制約テキストは、テーブルまたは結合インデックスのパーティション式から派生されます。

PPI定義のパーティション式のテキストが長すぎます。 パーティション制約のテキストを、16,000文字以下にしてください。

シングルレベル パーティションの場合は、次の制約を定義するために、16,000文字のうちの30文字の文字制限が適用されます。CHECK (partitioning_expression) BETWEEN 1 AND 65,535。このため、パーティション式の制限は16,000 - 30 = 15,970文字になります。

3930 ディクショナリのキャッシュが満杯です。 ディクショナリのキャッシュが小さすぎます。 ディクショナリ キャッシュのサイズを1 MBに増やしてください。

ディクショナリ キャッシュのデフォルト サイズは1MBなので、DBAによってディクショナリ キャッシュのサイズがデフォルトより少ない値に減らされた場合にのみ、サイズを増やすことが必要になります。

これらのエラー メッセージについての詳細は、<メッセージ>を参照してください。

DBS制御ユーティリティ(詳細は<Teradata Vantage™ - データベース ユーティリティ、B035-1102>、<Teradata Vantage™- SQLリクエストおよびトランザクション処理、B035-1142>、および<Teradata Vantage™ - データベースの設計、B035-1094>を参照)のPPICacheThrPパラメータは、複数のパーティションを処理する操作で使用されるキャッシュのしきい値を計算するためにシステムにより使用されるパーセント値を指定します。値は0.10パーセント単位で指定され、0~500の範囲内に設定できます。

また、PPICacheThrPは、列パーティション テーブルの列パーティション値を列パーティションに追加するときに、バッファに割り当てることができるメモリ セグメント数を算出するパーセント値も指定します。

これらのメモリのサイズの合計からオーバーヘッドを引き、列パーティション コンテキストのサイズで割った数が、使用可能な列パーティション コンテキストの数です。列パーティション ターゲット テーブルに、使用可能な列パーティション文脈よりも多くの列パーティションが含まれる場合は、列パーティション セットを処理するためにソース行を介した複数の受渡しが必要です。ここで、各セットの列パーティションの数は、使用可能な列パーティション文脈の数です。この場合、開いているファイル コンテキストは1つのみですが、各列パーティション コンテキストがメモリにバッファを割り当てます。

最適化ルーチンは、パーティション化されたテーブルへのアクセスの時点で使用できる利用可能なファイル文脈の数を決定するためにも、DBS制御パラメータPPICacheThrPを使用します。

PPICacheThrPによって決まる利用可能なファイル文脈の数 Teradata Databaseが利用可能と判断するファイル文脈の実際の数
< 8 8
> 256 256

Teradata Databaseは、ファイル文脈の数を、列パーティション テーブルに対して利用可能な列パーティション文脈の数として使用します。

Teradata Databaseは、一部の操作ではファイル文脈を各列パーティション文脈に関連付けることがあります。その他の場合には、各列パーティション文脈にバッファを割り当てることがあります。

理想的には、列パーティション文脈の数を、最低でも、1つのリクエストでアクセスする必要のある列パーティションの数と同じにしてください。それより少ないと、必要な列パーティションのすべてを一度に読み取ることができないため、パフォーマンスが低下することがあります。

PPICacheThrPを高く設定し過ぎると、パフォーマンスとメモリ使用量が影響を受けます。これは、メモリ スラッシングやシステム クラッシュにつながることがあります。反対に、DBS制御パラメータPPICacheThrPの値を不必要に低く設定すると、パフォーマンスが大幅に低下し、パーティション化する利点がなくなる恐れがあります。

大部分のワークロードに対してはデフォルト値が適切と想定されますが、バランスをとるために調整が必要になることがあります。

PPIキャッシュしきい値(PCT)は、AMPごとのファイル システム キャッシュの値が100 MB未満のバイト パック形式システムおよびバイト整合形式システムでは次のように定義されます。


PCT式(ファイル システム キャッシュ < 100 MB)

PCTは、AMPごとのファイル システム キャッシュの値が100 MBを超えるバイト整合形式システムでは次のように定義されます。


PCT式(ファイル システム キャッシュ > 100 MB)

デフォルトは10。これは1.0パーセントを表わします。これは1.0パーセントを表わします。最初にクエリー ワークロードでの変更の影響を十分に分析せずに、この値を変更しないでください。

PPICacheThrPは、パーティション化されたテーブルの操作についてメモリの使用を制御します。値が大きいほどこれらの操作のパフォーマンスが向上します。ただし、以下は例外です。
  • データブロックはメモリに常駐させる。

    ディスクにスワップされる必要がある場合、パフォーマンスが低下し始めることがあります。

  • コンテキストの数は、処理されている空でない、非除去パーティションの数を超えることはありません。

    この場合、各パーティションにはコンテキストがあり、追加のコンテキストが使用されることはないので、PPICacheThrPの値を大きくしてもパフォーマンスは向上されません。

バイト整合形式システムの場合のみ、PPICacheThrPの設定にかかわらず、割り当て可能な最大PPIキャッシュは100MBになります。
PCT値は、パーティション化されたテーブルに対する以下の操作で使用されます。
  • パーティション化されたテーブルでの結合。
  • パーティション化されたテーブルの集約。

これらの種類の操作中にメモリの競合が発生する場合は、PPICacheThrPを減らす必要があります。

パーティション化されたテーブルでの結合。

パーティション化されたテーブルまたはスプールのプライマリ インデックスで結合が実行され、他方のテーブルまたはスプールがパーティション化されていない場合、パーティション テーブルまたはスプールから一度に処理されるパーティションの最大数は、以下のように計算されます。


処理されたパーティションの最大数(結合を実行)

結合が2つのパーティション化された関係のプライマリ インデックスで行われた場合、この関係から一度に処理されるパーティションの最大数は、以下のように計算されます。


処理されたパーティションの最大数(結合を実行)

説明


""

処理中のパーティションごとに1つのデータ ブロックが常にメモリに常駐します。

この等式での変数の定義は、以下のとおりです。

等式要素 指定内容
f1 最適化ルーチンにより定義されているように、結合の左側の関係から一度に処理されるパーティション数。
f2 最適化ルーチンにより定義されているように、結合の右側の関係から一度に処理されるパーティション数。
db1 結合の左側の関係の、推定される平均データブロックサイズ。
db2 結合の右側の関係の、推定される平均データブロックサイズ。

パーティション化されたテーブルの集約

パーティション化されたテーブルのプライマリ インデックスをシステムが集約する場合、テーブルから一度に処理されるパーティションの最大数は以下のように計算されます。


処理されたパーティションの最大数(集約)

処理中のパーティションごとに1つのデータ ブロックが常にメモリに常駐します。