日本語PDF

5 Microsoft Transaction Serverのパフォーマンス・チューニング

これらのトピックでは、Microsoft Transaction Serverのパフォーマンス・チューニングについて説明します。

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統合」を参照してください。

Microsoft Transaction Server接続の管理

.NETまたはCOMコンポーネントがOracle Databaseでのセッションを終了しても、接続はすぐには終了しません。かわりに、接続は接続プールでアイドル状態になり、他のコンポーネントがOracle Databaseに新たに接続するときに再利用されます。

接続プールのレジストリ・パラメータ

アイドル期間中に接続の再利用が可能になることで、新規接続のオープン時にかかるリソース・コストが軽減されます。接続が接続プール内で再利用可能なアイドル状態で待機する時間の長さは、いくつかのレジストリ・パラメータの設定によって決まります。これらのパラメータは、クライアントの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であることがわかっている場合、またはオペレーティング・システム認証による接続を使用する場合は、このオプションを使用しないでください。

トランザクション・タイムアウト・パラメータ値の増加

トランザクション要求が完了する前にタイムアウトしてしまう場合は、トランザクション・タイムアウト・パラメータの設定が低すぎる可能性があります。トランザクション・タイムアウト・パラメータ値を増やして、トランザクションの完了に十分な時間を設定します。

トランザクション・タイムアウト・パラメータ値を増やすには、次のようにします。

  1. Microsoft Transaction ServerがインストールされているWindowsコンピュータにログオンします。
  2. 「スタート」→「プログラム」→「管理ツール」→「コンポーネント サービス」を選択します。

    「コンポーネント サービス」ウィンドウが表示されます。

  3. 「コンポーネント サービス」ウィンドウで、「コンソール ルート」をダブルクリックして、ツリー構造を展開します。
  4. 「コンポーネント サービス」をダブルクリックします。
  5. 「コンピュータ」をダブルクリックします。
  6. 「マイ コンピュータ」を右クリックします。

    いくつかのオプションとともにメニューが表示されます。

  7. 「プロパティ」を選択します。

    「マイ コンピュータのプロパティ」ダイアログ・ボックスが表示されます。

  8. 「オプション」タブを選択します。
  9. 「トランザクション タイムアウト」フィールドに値を入力し、「OK」をクリックします。

    トランザクション・タイムアウト値が増加します。通常の環境では、60秒に設定すれば十分です。ただし、トランザクションが多数の同時トランザクションと競合している場合は、この値では低すぎることがあります。

初期化パラメータの設定の変更

Microsoft Transaction ServerでOracle Databaseを使用するには、初期化パラメータをいくつか変更する必要がある場合があります。これらのパラメータに設定する必要のある値は、データベース処理負荷の環境によって異なります。

初期化パラメータ・ファイルの値を確認するには、次のようにします。

  1. SYSDBA権限があることを確認します。
  2. Oracle Databaseがインストールされているコンピュータにログオンします。
  3. SQL*Plusを起動します。
    C:\> sqlplus /NOLOG
    
  4. データベースにSYSDBAとして接続します。
    SQL> CONNECT / AS SYSDBA
    
  5. SESSIONSパラメータの値を確認します。
    SQL> SHOW PARAMETER SESSIONS
    
  6. PROCESSESパラメータの値を確認します。
    SQL> SHOW PARAMETER PROCESSES
    

    通常、Microsoftアプリケーション・デモの実行には、SESSIONSおよびPROCESSパラメータの両方とも現在の値が適しています。.NETまたはCOMベースのアプリケーションを作成してデプロイする場合、これらのパラメータの値は、データベース環境の予想される処理負荷によって異なります。たとえば、Oracle Databaseに対して100の同時接続があると予想される場合は、どのようなシステム負荷にも対応できるように両方の値を200に設定します。これらの設定はリソースの使用量を大きく左右するため、パラメータ値の設定を高くしすぎないでください。

  7. 次の初期化パラメータに、ここに記載した値以上を設定します。
    • SESSIONS = 200(高い負荷が予想される場合はさらに大きい値)

    • PROCESSES = 200(高い負荷が予想される場合はさらに大きい値)

  8. Oracle Databaseを停止します。
    SQL> SHUTDOWN
    
  9. Oracle Databaseを再起動します。
    SQL> STARTUP
    
  10. SQL*Plusを終了します。
    SQL> EXIT

    関連項目:

    これらのパラメータについては、『Oracle Databaseリファレンス』を参照してください。

その他のパラメータ

レジストリ変数ORAMTS_ABORT_MODEを使用して、新しい接続が常に強制終了を実行するか、または事前に登録済の接続を使用して強制終了を実行するかを制御します。つまり、強制終了が同期か非同期かを制御します。

デフォルトでは、事前に登録された接続がトランザクションの強制終了を実行します(可能な場合)。

レジストリ変数: ORAMTS_ABORT_MODE

値:

  • ORAMTS_ABORT_MODE_NEW_CONN_ONLY: 非同期の強制終了になります。データベースへの新しい接続は、トランザクションの強制終了を実行するために開かれています。

  • その他の値は、デフォルトの動作を示します。

MSDTCの起動

Oracle Services for Microsoft Transaction Serverと通信するには、Microsoft分散トランザクション・コーディネータ(MS DTC)が実行されている必要があります。

MS DTCを起動するには、次のようにします。

  1. Microsoft Transaction Serverがインストールされているコンピュータで、「スタート」→「プログラム」→「管理ツール」→「コンポーネント サービス」を選択します。

    「コンポーネント サービス」ウィンドウが表示されます。

  2. 「コンポーネント サービス」ウィンドウで、「コンソール ルート」の下の「コンポーネント サービス」を展開します。
  3. 「コンポーネント サービス」の下の「コンピュータ」を展開します。
  4. 「マイ コンピュータ」を右クリックします。

    いくつかのオプションを含むメニューが表示されます。

  5. 「MS DTC開始」を選択します。

    MS DTCが開始されます。