集約UDFが使用する集約キャッシュの適切な管理は、その関数のパフォーマンスを最適化するために重要です。キャッシュのページングが多過ぎると、集約UDFのパフォーマンスが大きく低下します。
UDFが使用するキャッシュの最大バイト数(つまり、その関数の一時集約キャッシュのサイズ)は、最小値の1バイトから最大値の64,000バイトまでの間の値に指定できます。
集約キャッシュに最適なサイズを割り振ることは、関数が使用するグループ キャッシュを割り振ることになるので重要です。たとえば、集約キャッシュ サイズを64Kバイトに指定する場合、一時グループ キャッシュ エントリの最大数は15になります。これは、次のように決定されます。
集約で15よりも多くのグループ キャッシュ エントリを必要とする場合は、集約キャッシュの割振りがより小さいときよりも、それらのエントリをさらに頻繁にディスクにフラッシュすることが必要になります。
集約UDFは、SUMおよびMAXなどのシステム定義集約関数と同じ集約処理機能を使用します(<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>を参照)。集約処理では一時グループ エントリが作成され、同じ集約グループに関連付けられた行の間に集約情報を保持します。システムはこれらの一時グループ エントリをキャッシュしてパフォーマンスを強化しますが、一時グループ数が集約キャッシュを含む容量を超えるような場合は、最も以前に使用されたエントリがディスク上のスプール ファイルにページされます。システムは、集約処理の最終ステップまで、スプールからの一時グループ エントリの取得または組み合わせを行なおうとはしません。
最適なパフォーマンスを得るには、グループごとの集約フェーズの数を最小限にして、すべての一時グループ エントリをキャッシュに保管することを目指します。集約UDFの集約キャッシュ使用状況を向上させる最良の方法は、集約一時グループのサイズ(集約記憶サイズ)を 多くも少なくもなく、必要なサイズに厳密に調整することです。集約記憶サイズをどのように指定しても、集約は正常に行われますが、集約UDFを作成または置き換えるときにCLASS AGGREGATE interim_sizeオプションを使用して一時記憶サイズを調整すれば、パフォーマンスを最適化できます。
集約キャッシュを共有できるキャッシュ エントリの数を最大にすることと、必要な集約タスクを処理するために十分なメモリを割り振ることとの間のトレード オフを最適化することが課題です。
集約キャッシュがオーバーフローしない限り、グループごとに最大(number_of_AMPs - 1)の集約フェーズがあります。ただし、集約キャッシュがオーバーフローした場合、大量の集約フェーズが発生して、パフォーマンスに悪影響を及ぼします。
集約記憶サイズの調整に関して、考慮すべき変数が3つあります。
変数 | 説明 |
---|---|
集約キャッシュ サイズ | この値は、データベースでは1 MBに固定されています。 |
集約記憶サイズ | この値は、CLASS AGGREGATE interim_sizeオプションで指定されます。 集約記憶サイズは、最低1バイトから最高64KBの範囲で指定できます。デフォルト値は64バイトです。 |
一時グループ キャッシュ エントリの数 | この値は集約記憶サイズによって変わり、次のように計算されます。 |
集約UDFの一時集約グループは、UDF定義で指定される集約記憶サイズの直接関数です。次の表では、3つの規模の順序にわたる顕著な2つの例を示しています。
集約記憶サイズ | キャッシュに含むことができる一時グループの数 |
---|---|
64バイト | 15,625 |
64 KB | 15 |
前述のとおり、一時グループ数が、関数に対して定義された集約キャッシュに含むことができる数を超えた場合、キャッシュがオーバーフローして、最も以前に使用されたエントリの一部がスプールにフラッシュされます。この集約グループのページングにより、処理できるグループ数に制限がなくなりますが、スプールに書き込まれる各集約キャッシュ エントリの追加集約フェーズにかかるコストに加えて、ディスク上のスプール ファイルへの書き込みおよびスプール ファイルからの読み取りのためにパフォーマンスが影響を受けます。