外部プロシージャを非保護モードで実行するべき状況 - Advanced SQL Engine - Teradata Database

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

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

外部プロシージャは保護モードで開発するべきですが、これは新しい外部プロシージャを作成するときのデフォルトです。保護モードおよびセキュア モードは、プロシージャの各インスタンスを別個のプロセスで実行する状態です。保護モード サーバーとセキュア モード サーバーの違いは、保護モード サーバー プロセスが事前定義OSユーザーtdatuserの下で実行されるのに対し、セキュア サーバー プロセスはUDFのEXTERNAL SECURITY句で指定されるOSユーザーの下で実行されるという点です。この点を除けばどちらのプロセスも同じです。

これにより、データベースのクラッシュ、メモリ リークによる問題、他の潜在的な障害の原因となる無効なポインタ、破壊されたスタック、ゼロ除算エラーなどの不正な計算をはじめとする多くの一般的なプログラミング エラーからシステムを保護できます。

これらの問題はすべて、非保護モードで生じるとデータベースのクラッシュの原因となります。保護およびセキュア モードでも、外部プロシージャがデータベースのクラッシュを引き起こすことがあります。これは、プロシージャがデータベースと保護またはセキュア モードのプロシージャとの間の共有データ領域を破壊した場合に生じます。

保護モードおよびセキュア モードは次の目的での使用のためだけに用意されています。
  • 開発中のすべての外部プロシージャのテスト。
  • OSでシステム リソースを消費する外部プロシージャの実行。

    これには、OSによるシステム コンテキストの割振りを引き起こすものすべて、たとえば、オープン ファイル、パイプ、セマフォー、トークン、スレッド(プロセス)などが含まれます。

  • Javaプロシージャの実行。

OSによるシステム リソースの消費の原因となる操作をプロシージャがない場合は、実働使用の必要条件を満たした時点で、その保護モードをEXECUTE NOT PROTECTEDに変更する必要があります(ALTER PROCEDURE (外部形式)を参照)。

OSによるシステム リソースの消費の原因となる操作をプロシージャが実行does場合は、十分にデバッグによって実働レベルの必要条件をすべて満たした後でも常に保護モードで実行するべきです。

実働準備が整った外部プロシージャの情報を以下の表にまとめます。

外部プロシージャ 実行モード
OSでシステム リソースを消費しない 非保護モード。
OSでシステム リソースを消費する操作を実行する
  • 事前定義OSユーザーtdatuserの下では保護モード

または

  • 次の任意ののユーザーの下ではセキュア モード

    tdatuser

    EXTERNAL SECURITY句によって指定されるOSユーザー。

Javaで記述されている場合 保護モード。

これはオプションではありません。Javaで記述されたプロシージャは必ず保護モードで実行する必要があります。

外部プロシージャを非実働のテスト システムで開発およびテストすることが最善です。新規に作成した外部プロシージャは数百回実行して、システムがクラッシュしないことを確認すると共に、プロシージャの設計を変更したりコーディング技法を改善することで回避できるパフォーマンス上の問題を判別してください。

cufconfigユーティリティ(<Teradata Vantage™ - データベース ユーティリティ、B035-1102>および<Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147>を参照)を使用すると、保護モードまたはセキュア モードのサーバーの数をデフォルト値のAMPまたはPE vprocにつき2から最大値の20に拡張できます。最小値は0です。

保護モードのサーバーで消費されるディスク リソースは次の式によって計算されます。



非保護モードでは、外部プロシージャは別個のプロセスで実行されるのではなく、データベースによって直接呼び出されます。OSにシステム コンテキストの割振りを要求しない新規のプロシージャは、十分にテストして強固さとパフォーマンス上の影響とを評価してから、非保護モードで実行するように変更してください。新規に作成したCPU操作専用のUDFが品質尺度に適合して、実働で使用する準備が整った後に、UDFを変更して非保護モードで実行するようにします。

UDF用のJavaサーバーごとに、約30 MBのスワップ領域用のメモリが必要になります。各ノードには、そのようなJavaサーバーが2つ存在できます。 非セキュア モードのJavaプロシージャのためのJavaマルチスレッド サーバーは、最小でもさらに30 MBのメモリを使用します(必要量は、ユーザーのJARのサイズに応じて大きくなることがあります)。そのため、すべてのサーバー フレーバーが使用されている場合、各ノードには約100 MBのスワップ領域が必要になります。