UJP - 技術情報

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

     

Oracleプロセス

Oracleプロセス


0.更新履歴

  • 2001.01.21 新規作成
  • 2001.01.27 NTのスレッドの追加
  • 2001.01.29 サーバマネージャからの確認方法追加
  • 2001.10.03 若干の表記間違いの修正と,情報追加.

1.はじめに

 このドキュメントは,Oracleのバックグラウンドプロセスについて記述するものである.

2.バックグラウンドプロセスとその説明

プロセス名 略称? 内容
プロセスモニタ PMON
  • ユーザプロセス(SQL*Plus等)が異常終了した際に回復処理を行う.
  • 異常終了の通知を受けたOracleは,ユーザリソースの開放等のクリーンナップを行う. たとえば,表のロック,データベースバッファキャッシュの開放である.
  • ディスパッチャ(Dnnn)とサーバプロセスの監視も行い,これが異常終了した場合は再起動させる.
  • PMONは3秒に1回稼働している.
システムモニタ SMON
  • データベースが起動するときに,必要に応じてインスタンスの回復を行う.
  • I/Oエラーが発生して以上終了したような場合に,データの整合性の回復を行う.
  • ユーザプロセスが利用しなくなったリソースを開放を行う.
  • データベース中で空いているエクステントを結合して連続領域を作成する.
  • ORDER BY等,テンポラリとして指定された表領域のクリアを行う.
データベース
ライター
DBWR
  • データベースバッファ(SGA内の」領域)で変更された内容をデータベースファイルに書き込む.
  • DBWRはバッファを持っており,最低使用頻度(LRU)アルゴリズムによってあふれたバッファを書き出す事になる.
  • ログスイッチが発生した段階で,チェックポイント処理を行うが,初期パラメータによってタイミングを設定できる.
ログライター LGWR
  • REDOログバッファ(SGA内の領域)からオンラインREDOログ(ファイル)に情報を書き込む.
  • LGWRはREDOログバッファに書き込み,トランザクションのコミットと一緒に書き出して,バッファを空ける.
  • REDOログバッファの1/3が一杯になった,3秒毎,トランザクションがコミットされた,DBWRがチェックポイントを行ったタイミングで処理を行う.
チェックポイント CKPT
  • チェックポイント,つまりメモリ中のデータをファイルに書き出す作業を発生させるプロセス. 実際の処理はDBWRが行う.
  • あらかじめ決められた頻度で発生するチェックポイントイベント時にDBWRにシグナルを送ってデータベースファイル,と制御ファイルにヘッダ情報を更新する.
  • CKPTプロセスが起動していない場合はLGWRプロセスが代行する.
アーカイバ ARCH
  • データベースがARCHIVELOGモードで実行しているときにREDOログをアーカイブディレクトリにコピーする.
  • ARCHIVELOGモードの場合,ログファイルを再利用する前にinit.oraファイルで設定されたLOG_ARCHIVE_DESTにログを複写する.
リカバラー
(回復)
RECO
  • Oracleで分散トランザクションオプションを利用する際に動作する.
  • ネットワークおよびノードの障害のために保留されている分散トランザクションがある場合にコミット,ロールバックを行って整合性を保つ.
  • init.oraファイルのDISTRIBUTED_TRANSACTIONSを0よりも大きい値に設定することで実行される.
ディスパッチャ Dnnn
  • サーバをマルチスレッド構成にしている時に起動される.
  • 使用する通信プロセスに付き最低1つ起動する.
  • ユーザプロセスからの要求を利用可能(CPUが空いている等)な共有サーバプロセスに渡し,その応答をユーザプロセスに返す.
サーバ Snnn
  • 接続しているユーザプロセスから要求をユーザプロセスに変わって処理する.
  • 専用サーバ構成では,1つのサーバプロセスが1つのユーザプロセスの要求を処理する.
ロック LCKn
  • Oracleのパラレルサーバオプションを使っているときにインスタンス間ロックを処理する.
  • 最大10個のLCKnプロセスによって内部インスタンスロックを制御する.

3.サンプル

 Solaris2.6上で稼動するOracle8i 8.1.5では,次のようなプロセスが稼動している.

Solaris上でのOracleプロセス
db1% ps -ef | grep ora_
  oracle   319     1  0 14:31:07 ?        0:00 ora_pmon_o8i
  oracle   321     1  0 14:31:07 ?        0:01 ora_dbw0_o8i
  oracle   323     1  0 14:31:07 ?        0:06 ora_lgwr_o8i
  oracle   325     1  0 14:31:08 ?        0:00 ora_ckpt_o8i
  oracle   327     1  0 14:31:08 ?        0:03 ora_smon_o8i
  oracle   329     1  0 14:31:08 ?        0:00 ora_reco_o8i
  oracle   331     1  0 14:31:08 ?        0:00 ora_s000_o8i
  oracle   333     1  0 14:31:08 ?        0:00 ora_d000_o8i
  oracle   562   560  0 19:07:39 pts/1    0:00 grep ora_
db1%

 また,サーバマネージャを使い,システムテーブルを参照することでプロセスIDとプロセス名を確認することができる.

サーバマネージャでバックグラウンドプロセスを確認する(Solaris)
db2% svrmgrl

Oracle Server Manager Release 3.1.5.0.0 - Production

(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.5.0.0 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.5.0.0 - Production

SVRMGR> connect internal
Connected.
SVRMGR> select spid,name from v$process,v$bgprocess where paddr = addr;
SPID      NAME
--------- -----
23650     PMON
23652     DBW0
23654     LGWR
23656     CKPT
23658     SMON
23660     RECO
6 rows selected.
SVRMGR>

 WindowsNTの場合,バックグラウンドプロセスは,OracleServiceというサービスが管理するORACLE8x.EXEのスレッドとして稼動するので,プロセス一覧に表示されることはない.


Windows2000上でのOracle8i 8.1.6のスレッド(0〜8までのスレッド)

 NT版でも,サーバマネージャを使うことによって,プロセス番号と名前を表示させることができる. 

サーバマネージャでバックグラウンドプロセスを確認する(Windows)
D:\>svrmgrl

Oracle Server Manager Release 3.1.6.0.0 - Production

Copyright (c) 1997, 1999, Oracle Corporation.  All Rights Reserved.

Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production

SVRMGR> connect internal
Connected.
SVRMGR> select spid,name from v$process,
     2> v$bgprocess
     3> where paddr = addr;
SPID      NAME
--------- -----
1688      PMON
1880      DBW0
1244      LGWR
1988      CKPT
684       SMON
1912      RECO
6 rows selected.
SVRMGR>


広告スペース
Google