5 Microsoft Transaction Serverのパフォーマンス・チューニング
これらのトピックでは、Microsoft Transaction Serverのパフォーマンス・チューニングについて説明します。
5.1 Microsoft Transaction Serverアプリケーションのパフォーマンス向上
プログラミング方法を最適化すると、アプリケーションのパフォーマンスが向上します。たとえば、特定のトランザクションのコードをすべて1つのComponent Object Model(COM)コンポーネントに配置した場合、そのコンポーネントをトランザクションとして指定する必要がなくなります。これにより、Microsoft Transaction Serverの処理によるオーバーヘッドがなくなります。その後、Oracleのコミットやロールバックの機能を利用して、コンポーネント内のトランザクションを制御できます。Oracle Call Interface(OCI)を使用している場合でもORAMTSSvcGet()
を使用できますが、ORAMTS_CFLG_NOIMPLICIT
フラグも使用できます。複数のOracle Databaseインスタンスにまたがって更新する場合は、データベース・リンクを使用して、COMコンポーネントから1つのデータベースに接続します。
関連項目:
ORAMTSSvcGet()
の使用方法の詳細は、「Microsoft Transaction ServerとのOCI統合」を参照してください。
5.2 Microsoft Transaction Server接続の管理
.NETまたはCOMコンポーネントがOracle Databaseでのセッションを終了しても、接続はすぐには終了しません。かわりに、接続は接続プールでアイドル状態になり、他のコンポーネントがOracle Databaseに新たに接続するときに再利用されます。
5.2.1 接続プールのレジストリ・パラメータ
アイドル期間中に接続の再利用が可能になることで、新規接続のオープン時にかかるリソース・コストが軽減されます。接続が接続プール内で再利用可能なアイドル状態で待機する時間の長さは、いくつかのレジストリ・パラメータの設定によって決まります。これらのパラメータは、クライアントのMicrosoft Transaction Serverコンポーネントがインストールされているコンピュータ上のファイルHKEY_
LOCAL_MACHINE
\SOFTWARE\ORACLE\
HOMEID
の中で変更できます。
ORAMTS_CONN_POOL_TIMEOUT
クライアント側の接続プール内で、接続がタイムアウトして解放されるまでに、アイドルで再利用可能な状態である時間を秒単位で表します。このパラメータのデフォルト値は120
秒です。
ORAMTS_SESS_TXNTIMETOLIVE
OraMTSSvcGet()
を使用して確立した接続が、OraMTSSvcRel()
コールにより解放された後、クライアント側の接続プールで有効である時間を秒単位で表します。ORAMTS_CONN_POOL_TIMEOUT
の値とORAMTS_NET_CACHE_TIMEOUT
の値の合計は、接続が完全に終了するまでに実際にかかる時間を表します。このパラメータのデフォルト値は120
秒です。
ORAMTS_NET_CACHE_TIMEOUT
Oracle Services for Microsoft Transaction Server内に実装されたリソース・ディスペンサが、Oracleデータベースにプール済の接続を確立します。これらの接続が使用されなくなると、ORAMTS_CONN_POOL_TIMEOUT
で指定されたタイムアウト後、ユーザー・セッションは切断されます。ただし、基礎となるOracle Net接続は、このパラメータで指定された期間キャッシュされます。ミリ秒で示されたこの時間が経過した後、データベースへのキャッシュ済Oracle Net接続は終了します。このパラメータのデフォルト値は120000ミリ秒です。このパラメータには、ORAMTS_CONN_POOL_TIMEOUT
の値よりも大きな値を設定することをお薦めします。ORAMTS_CONN_POOL_TIMEOUT
とORAMTS_NET_CACHE_TIMEOUT
に指定された時間の合計は、接続が完全に終了するまでに実際にかかる時間を表します。
ORAMTS_NET_CACHE_MAXFREE
所定の時間にクライアント側の接続プールで維持している必要がある最大空きサーバー接続数。このパラメータのデフォルト値は5
です。
ORAMTS_OSCREDS_MATCH_LEVEL
init.ora
ファイルのOS_ROLES
初期化パラメータがtrue
の場合に実装されるWindowsセキュリティ・チェックのレベル。
ユーザーがCONNECT
コマンドを使用して、Oracle Databaseへの接続を確立すると、Windowsのユーザー名は特定のデータベース・ロールと権限に関連付けられます。ユーザーが切断するとこの接続はプールされ、利用可能なアイドル状態になります。別のユーザーがCONNECT
コマンドを入力したときに、このユーザーのWindowsユーザー名が1人目のユーザーと同一である場合、2人目のユーザーは1人目のユーザーと同じデータベース・ロールと権限を取得できます。2人目のユーザーがCREATE SESSION
およびRESOURCE
データベース・ロールしか持っていないにもかかわらず、1人目のユーザーのDBA
権限を取得してしまうと、セキュリティ上重要な問題となります。
デフォルトでは、ORAMTS_OSCREDS_MATCH_LEVEL
パラメータの値はOS_AUTH_LOGIN
で、ユーザー名とパスワードがNULL
の場合のみ、Windowsセキュリティ・チェックが実行されます。
このパラメータの最も安全な設定はALWAYS
です。これにより、Windowsセキュリティ・チェックが必ず実行され、NULLを除く同一のWindowsユーザー名が原因のセキュリティ違反がチェックされます。
Windowsのセキュリティ・チェックには多くのリソース・コストがかかるので、このパラメータの値をNEVER
に設定することもできます。ただし、OS_ROLES
がtrue
であることがわかっている場合、またはオペレーティング・システム認証による接続を使用する場合は、このオプションを使用しないでください。
5.3 トランザクション・タイムアウト・パラメータ値の増加
トランザクション要求が完了する前にタイムアウトしてしまう場合は、トランザクション・タイムアウト・パラメータの設定が低すぎる可能性があります。トランザクション・タイムアウト・パラメータ値を増やして、トランザクションの完了に十分な時間を設定します。
トランザクション・タイムアウト・パラメータ値を増やすには、次のようにします。
5.4 初期化パラメータの設定の変更
Microsoft Transaction ServerでOracle Databaseを使用するには、初期化パラメータをいくつか変更する必要がある場合があります。これらのパラメータに設定する必要のある値は、データベース処理負荷の環境によって異なります。
初期化パラメータ・ファイルの値を確認するには、次のようにします。
5.5 追加のパラメータ
レジストリ変数ORAMTS_ABORT_MODE
を使用して、新しい接続が常に強制終了を実行するか、または事前に登録済の接続を使用して強制終了を実行するかを制御します。つまり、強制終了が同期か非同期かを制御します。
デフォルトでは、事前に登録された接続がトランザクションの強制終了を実行します(可能な場合)。
レジストリ変数: ORAMTS_ABORT_MODE
値:
-
ORAMTS_ABORT_MODE_NEW_CONN_ONLY:
非同期の強制終了になります。データベースへの新しい接続は、トランザクションの強制終了を実行するために開かれています。 -
その他の値は、デフォルトの動作を示します。
5.6 MSDTCの起動
Oracle Services for Microsoft Transaction Serverと通信するには、Microsoft分散トランザクション・コーディネータ(MS DTC)が実行されている必要があります。
MS DTCを起動するには、次のようにします。