接続で一度に使用できる準備文の最大数を制限するリソース・ガバナーを制御します。
整数
50
個々の接続または PUBLIC グループに設定できます。すぐに有効になります。どの接続に対しても、このオプションを設定するには DBA 権限が必要です。
準備文を使用するアプリケーションは、準備文が不要になった後で明示的に削除されなかった場合、「準備文のリソース・ガバナーが制限を超えています。」というエラーを受け取ることがあります。max_statement_count オプションはリソース・ガバナーであり、これを使用することにより、DBA は 1 つの接続で使用される準備文の数を制限できます。接続の制限を超える操作が行われると、リソースのガバナーを超過していることを示すエラーを出力します。
接続がストアド・プロシージャを実行する場合、プロシージャはプロシージャ所有者のパーミッションのもとで実行されます。ただし、プロシージャが使用するリソースは、現在の接続に割り当てられています。
データベース・サーバには、接続によって作成される準備文ごとにデータ構造体が用意されます。アプリケーションがデータベース・サーバに準備文が不要になったことを通知するか、接続が切断されるまで、これらの構造体は解放されません。接続ごとの準備文の数を減らすためには、DROP STATEMENT 要求に相当する処理を実行する必要があります。次の表は、SQL Anywhere でサポートされる API で実行できるコマンドを示しています。
インタフェース | 文 |
---|---|
ADO | RecordSet.Close |
ADO.NET | SADataReader.Close または SADataReader.Dispose |
Embedded SQL | DROP STATEMENT |
Java | resultSet.Close、Statement.Close |
ODBC | SQLFreeStmt( hstmt, SQL_DROP ) または SQLFreeHandle( SQL_HANDLE_STMT, hstmt ) |
Java と .NET では、文を明示的に削除することをおすすめします。言語ルーチンは文リソースの割り付けを解除するサーバ呼び出しを発行しないため、ガーベジ・コレクションを使用して文を削除しないでください。また、ガーベジ・コレクション・ルーチンが実行される時点について保証はありません。
サーバにおいて接続のいずれかの時点でデフォルトの最大数を超える準備文のサポートが必要になった場合は、max_statement_count をデフォルトより大きな値に設定する必要があります。ただし、アクティブな準備文が多くなると、サーバ・メモリの使用量が増加します。max_statement_count オプションを 0 (ゼロ) に設定し、準備文リソース・ガバナーを無効にすることもできますが、この方法は推奨できません。このようにすると、アプリケーションが準備文を適切に解放しない場合、データベース・サーバがメモリ不足によって異常終了しやすくなります。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |