17.00 - 17.05 - メモリ制限 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

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

Rテーブル演算子はudfGPLセキュア サーバーを使用します。cufconfig GDO(Globally Distributed Object)のGPLUDFServerMemSizeフィールドはudfGPLサーバーのメモリを制限するのに使用します。この制限はデフォルトで32MBに設定されていますが、制限は0~3.5 GBに設定できます。使用可能な最大メモリを使用するには、GPLUDFServerMemSizeを0に設定します。ただし、使用できるメモリ量に限りがあるため、ゼロ以外の値が推奨されます。

cufconfigユーティリティについては、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。

2 GBを超える制限を設定すると、警告メッセージが表示されます。
Warning: Although the memory limit is set, it is very high. Your system has high risk of running out of virtual memory. Please consider to set it to a lower value.

3.5 GBを超える制限を設定しようとすると、"範囲外"エラーが表示されます。

Out of range error. Field GPLUDFServerMemSize: 0 - 3758096384

Rテーブル演算子で使用可能な最大メモリ量は、GPLUDFServerMemSize制限によって決定されます。これにはユーザー データ、およびRによってさまざまな保守操作に使用されるその他のメタデータが含まれます。制限を超えて使用しようとすると、プログラム実行時に評価エラーが発生します。エラーは、ユーザー プログラム、R内部呼び出し、またはオペレーティング システム呼び出しのいずれかからのメモリ リクエストによって発生することがあります。

udfGPLサーバーでは、指定された制限を超えるメモリが消費されるように見えます。これは、さまざまなリソースががユーザー プログラムの起動および実行に必要なために予想されます。GPLUDFServerMemSizeの制限のほかに、サーバーで使用されるメモリもあります。例えば、GPLUDFServerMemSizeが32 MBに設定されているとします。udfGPLサーバーの起動時には、103 MBが必要になる場合があります。テーブル演算子では、32 MBのほかに103 MBも使用されます。そのため、合計約135 MBのメモリがユーザー プログラムまたは演算子によって消費されることがあります。メモリは必要な場合は演算子のメモリ使用要件に応じて、テーブル演算子の異なるストリーム(入力と出力)間で等しく分割されます。

GPLUDFServerMemSizeの合計に加えて初期化後のRサーバー自体のメモリ領域が実行時にUINT_MAXより大きくなると、GPLサーバーが起動されないことがあります。この場合、次のエラーが表示されます:
Error 7583 The secure mode processes had a set up error.

Rテーブル演算子が実行されると、一部のメモリがRインタープリターによって保持されます。Rは通常、プログラム オブジェクトによって使用されるすべてのメモリを再利用するわけではありません。多くの場合は、ガーベッジ コレクタを自動的に実行して、そのような未使用メモリを再利用しようとします。そのため、別のRテーブル演算子の次の実行時は、使用可能なメモリはGPLUDFServerMemSizeの制限未満であることがあります。これは、環境の異なるオブジェクトによって使用されるメモリを強制的に解放することにより克服できます。例えば、rm(list=ls())です。