goo blog サービス終了のお知らせ 

へたれエンジニア日記(旧跡地)

こちらへ引っ越しました。http://d.hatena.ne.jp/toritori0318/

ORACLE小話その15 共有サーバプロセス

2007-08-19 14:06:03 | ORACLE・MSDE・Postgres
こないだは共有サーバプロセス関連で
トラブルがあったみたいです。

現象としては共有サーバプロセスが
MAX_SHARED_SERVERS接続数まで使い切っちゃって
全然応答が返ってこなくなった、
というもの。

根本的な原因は、MAX_SHARED_SERVERSの設定値が低かった(40)
という基本的なことなんですけどね。



Oracleのマニュアルも見たんですけど、
そもそも共有サーバプロセスの見積もりって結構難しいらしい。
以下はマニュアルの抜粋。
まず、psコマンドなどでシステムの使用可能なRAM容量を調べて
追加できる共有サーバプロセスの数を見積もる。
その後、少しずつMAX_SHARED_SERVERSの値を増加していって
スワッピングが発生したところが一杯一杯なので
そこから最適な設定を見つけだす




こんな感じで書かれてました。
普通そこまでするの?



あと、共有サーバープロセスについて
ちょっと疑問があるんですよね。
それは
 1つのセッション(SQL文)に対し、
 1つのサーバープロセスが対応するのか?

というもの。要は1対1になっているか。

コネクション自体はディスパッチャで
複数の接続に対応してくれるのはわかるけど、
その後、要求キューに入れられた1つの処理は
1つのサーバープロセスが対応するものなの?
とすると結局、重いSQL処理がMAXまで(今回の場合は40個)発行されて
すべての共有サーバプロセスがお仕事中だとしたら、
その後に入ってきたSQLは待たされちゃうって事?
それもなんだかなぁって感じがするんだけど…


また、Oracleマニュアルには
「ユーザーが比較的少数の要求しか行わない場合、
 10~20ユーザーに対し1つの共有サーバプロセスで十分」
と記述されております。


今回共有サーバプロセスが溢れた時は約200セッションだったんですけど
すべてのセッションが要求中だったとしても
共有サーバプロセスは20で十分っていう計算なんですけど…
まあ要求が重かったからって事ですかね。


さっきも書きましたけど、個々のシステムによって最適な
プロセスの数があるみたいですしね。
こんなに単純な計算では行かないって事か。


■共有サーバの診断
V$SHARED_SERVER_MONITOR
V$SHARED_SERVER
V$SESSION
V$CIRCUIT

■ディスパッチャの診断
V$DISPATCHER
V$DISPATCHER_RATE
V$QUEUE


最新の画像もっと見る