マルチスレッド・サーバの調整

Oracleの各種構成

専用サーバプロセス
ユーザプロセスとサーバプロセスが1:1に対応。バッチ処理や管理作業のために(リカバリなどはこのモードでないと行えない)。
マルチスレッド・サーバ・プロセス
ディスパッチャを介してユーザプロセスとサーバプロセスがn:1に対応。通常の処理にはこちら。

専用サーバ構成時には以下のパラメータを設定しない。

マルチスレッド・サーバで使用する初期化パラメータ

名称 説明 設定値
SHARED_POOL_SIZE SQL統計情報やプロシージャを格納する。セッション情報もここにはいる。 接続するユーザごとに1kを追加(と「管理者ガイド」には書いてあるが、実際には2M程度が必要)
MTS_LISTENER_ADDRESS リスナー・プロセスのアドレス リスナーの構成ファイルと同じ記述内容を、プロトコルごとに指定。
MTS_SERVICE リスナーに対応付けるサービス名。 なるべくSIDと同じ物を使用。設定されなければDB_NAMEが使用される。
MTS_DISPATCHERS インスタンス起動時に起動されるディスパッチャ・プロセスの数。プロトコルごとに設定。 CEIL(最大同時セッション数 / ディスパッチャあたりの接続数)
MTS_MAX_DISPATCHERS 起動可能な最大ディスパッチャプロセス数(各プロトコルの合計) 最大同時セッション数 / ディスパッチャあたりの接続数。デフォルト値は5。
MTS_SERVERS インスタンス起動時に起動される共有サーバプロセス数。常に起動されている最小値でもある。 なるべく少なめに設定する。設定しないか0の場合、共有サーバは起動されない。また、プロセスが増加した場合、MTS_MAX_SERVERSを上限として自動的に追加される。
MTS_MAX_SERVERS 起動可能な最大共有サーバプロセス数 実験で決定。デフォルト値は20。

プロセスの変更・チューニング

ディスパッチャ・プロセス

各ディスパッチャがサポートできる接続の最大数は、以下のSQL文によって表示される。

SELECT maximum_connections FROM v$mts;

この値は、SQL*Net定数やその他の情報を使用して起動時に決定される。

プロトコルごとのディスパッチャプロセスの使用率は、以下のSQL文によって表示される。

SELECT network                              "PROTOCOL",
       SUM(busy) /(  SUM(busy) + SUM(idle)) "Total Busy Rate"
  FROM v$dispatcher
  GROUP BY network;

使用率が50%以上であれば、ディスパッチャプロセスを追加することを考える。

また、応答キューの待機時間は、以下のSQL文によって示される。

SELECT network                              "PROTOCOL"
       DECODE( SUM(totalq), 0, 'No Responses',
           SUM(wait)/SUM(totalq) || ' hundredths of seconds')
                                            "Average Wait Time per Response"
  FROM v$queue q, v$dispatcher d
  WHERE q.type = 'DISPATCHER'
    AND q.paddr = d.paddr
  GROUP BY network;

特定のプロトコルの応答時間が時間につれて悪化する場合には、ディスパッチャプロセスを追加することを考える。(ディスパッチャプロセスは自動的には追加されない)。

ディスパッチャプロセス数の変更は、以下のSQL文によって実行される。

ALTER SYSTEM SET MTS_DISPATCHERS = '[プロトコル名],[プロセス数]';

共有サーバプロセス数

要求キューの待機時間は、以下のSQL文によって示される。

SELECT DECODE( totalq, 0, 'No Requests',
           wait/totalq || ' hundredths of seconds')
                                 "Average Wait Time per Response"
  FROM v$queue
  WHERE type = 'COMMON';

また、現在起動中の共有サーバプロセス数は、以下のSQL文によって示される。

SELECT COUNT(*) 
  FROM v$shared_server
  WHERE status = 'QUIT';

起動中の共有サーバプロセス数がMTS_MAX_SERVERSに達し、なおも要求キューの待機時間が増加する場合、MTS_MAX_SERVERSを増加することを考える。また、最小値を変更する、あるいはマルチスレッド構成を一時的に使用禁止にする場合は、以下のSQL文を発行する。

ALTER SYSTEM SET MTS_SERVERS = [プロセス数、使用禁止にするときは0];
トップページに