ホームページ >php教程 >PHP开发 >オラクルプロセス

オラクルプロセス

黄舟
黄舟オリジナル
2016-12-15 10:21:191139ブラウズ

ORACLEプロセス
ORACLE クライアントとサーバー間の対話中のプロセスは、ユーザープロセスとORACLEプロセスに分かれています。ユーザーが PRO*C プログラムや ORACLE ツール (SQL*PLUS など) などの ORACLE クライアント アプリケーションを実行すると、ユーザーが実行しているアプリケーションのユーザー プロセスが作成されます。 ORACLE プロセスは、サーバー プロセスとバックグラウンド プロセスの 2 つのカテゴリに分類されます。サーバー プロセスは、インスタンスに接続されているユーザー プロセスからのリクエストを処理するために使用されます。
アプリケーションと ORACLE がネットワーク経由ではなく同じマシン上で実行されている場合、システムのオーバーヘッドを削減するために、ユーザー プロセスとそれに対応するサーバー プロセスは通常、単一のプロセスに結合されます。ただし、アプリケーションと ORACLE が異なるマシンで実行されている場合、ユーザー プロセスは別のサーバー プロセスを通じて ORACLE と通信します。次のタスクを実行できます:
(1) アプリケーションによって発行された SQL 文の構文分析と実行
(2) 必要なデータ ブロックをディスク データ ファイルから SGA の共有データベース バッファに読み込みます (ブロックはバッファ内にありません) ) いつ)
(3) 処理のために結果をアプリケーションに返します。
最高のパフォーマンスを達成し、複数のユーザーを調整するために、システムはバックグラウンド プロセスと呼ばれる、マルチプロセス システムでいくつかの追加プロセスを使用します。多くのオペレーティング システムでは、インスタンスの起動時にバックグラウンド プロセスが自動的に作成されます。
ORACLE インスタンスには複数のバックグラウンド プロセスがあります。つまり、DBWR (データベース書き込みプロセス)、LGWR (ログ書き込みプロセス)、CKPT (チェックポイント プロセス)、SMON (システム監視プロセス)、PMON (プロセス監視プロセス)、ARCH (アーカイブ プロセス) です。 、RECO(回復プロセス)。各バックグラウンド プロセスは、ORACLE データベースの異なる部分と対話します。最初の 5 つのプロセスは必須で、最後の 2 つのプロセスはオプションです。
以下はバックグラウンドプロセスの機能の簡単な紹介です。
1. DBWR プロセス
このプロセスの機能は、バッファをデータ ファイルに書き込むことです。これは、バッファ ストレージ管理を担当する ORACLE バックグラウンド プロセスです。バッファ内のバッファが変更されると、そのバッファは「ダーティ」としてマークされます。DBWR の主なタスクは、「ダーティ」バッファをディスクに書き込み、バッファを「クリーン」に保つことです。
未使用のバッファの数は、キャッシュのバッファがデータベースをいっぱいにするか、ユーザープロセスによってダーティになるにつれて減少します。未使用のバッファ領域が非常に少なくなり、ユーザープロセスがディスクからメモリ記憶領域にブロックを読み込むときに未使用のバッファ領域を見つけることができない場合、DBWR がバッファ記憶領域を管理し、ユーザープロセスは常に
バッファゾーンを使用して未使用のバッファ領域を取得します。
ORACLE は、LRU (LEAST RECENTLY USED) アルゴリズム (最も最近使用されていないアルゴリズム) を使用して、最近使用されたデータ ブロックをメモリ内に保持し、I/O を最小限に抑えます。 DBWR は、次の状況でダーティ バッファをディスクに書き込みます。
(1) サーバー プロセスがバッファを「ダーティ」テーブルに移動し、そのダーティ テーブルがクリティカルな長さに達すると、サービス プロセスは DBWR に書き込みを行うよう通知します。クリティカル長は、パラメータ DB-BLOCK-WRITE-BATCH の値の半分です。
(2) サーバー プロセスが LRU テーブルで DB-BLOCK-MAX-SCAN-CNT バッファを検索し、未使用のバッファが見つからない場合、サーバー プロセスは検索を停止し、DBWR に書き込むように通知します。
(3) タイムアウトが発生すると (毎回 3 秒)、DBWR はそれ自体を通知します。
(4) チェックポイントが発生すると、LGWR は DBWR に通知します。
最初の 2 つのケースでは、DBWR はダーティ テーブル内のブロックをディスクに書き込みます。一度に書き込むことができるブロックの数は、初期化パラメータ DB-BLOCK-WRITE-BATCH によって指定されます。ダーティ テーブルに指定されたブロック数を持つバッファがない場合、DBWR は LUR テーブルから別のダーティ バッファを探します。
DBWR が 3 秒間非アクティブになると、タイムアウトが発生します。この場合、DBWR は LRU テーブルで指定された数のバッファを検索し、見つかったダーティ バッファをディスクに書き込みます。データベースがアイドル状態の場合、DBWR は最終的にバッファ ストア全体をディスクに書き込みます。
チェックポイントが発生すると、LGWR は、変更されたバッファー テーブルをディスクに書き込む必要があることを指定します。 DBWR は、指定されたバッファをディスクに書き込みます。
一部のプラットフォームでは、1 つのインスタンスに複数の DBWR を含めることができます。このような場合、一部のブロックは 1 つのディスクに書き込まれ、他のブロックは別のディスクに書き込まれる可能性があります。パラメータ DB-WRITERS は、DBWR プロセスの数を制御します。
2. LGWR プロセス
このプロセスは、ログ バッファをディスク上のログ ファイルに書き込みます。ログ バッファの管理を担当する ORACLE バックグラウンド プロセスです。 LGWR プロセスは、最後にディスクに書き込まれた以降のすべてのログ エントリを出力します。 LGWR プロセスは、次の条件でログ バッファの内容をディスクに書き込みます。
(1) ユーザープロセスがトランザクションをコミットしたときにコミットレコードを書き込みます。
(2) ログバッファを3秒ごとに出力します。
(3) ログバッファが1/3いっぱいになったらログバッファを出力します。
(4) DBWRが変更バッファをディスクに書き込むと、ログバッファが出力されます。
LGWR プロセスは、アクティブ ミラー オンライン ログ ファイル グループに同期的に書き込みます。グループ内のファイルが削除されたり、使用できなくなった場合でも、LGWR はグループ内の他のファイルへの書き込みを続行できます。
ログ バッファは循環バッファです。 LGWR がログ バッファー内のログ エントリをログ ファイルに書き込んだ後、サーバー プロセスは新しいログ エントリをログ バッファーに書き込むことができます。 LGWR は通常、非常に高速に書き込みを行うため、ログ バッファーに新しいログ エントリを書き込む余地が常に確保されます。トランザクションがコミットされると、
にシステム変更番号 (SCN) が割り当てられ、トランザクション ログ エントリとともにログに記録されます。
3. CKPT プロセス
プロセスが実行のために起動されると、すべてのデータ ファイルのヘッダーが変更され、チェックポイントが示され、ダーティ データ ブロックをデータ ファイルに書き込むように DBWR に通知されます。
4. SMON プロセス
このプロセスの役割は、ORACLE インスタンスの起動時にインスタンスのリカバリを実行することであり、使用されなくなった一時セグメントをクリーンアップする責任もあります。
5. PMON プロセス
このプロセスは、ユーザー プロセスが失敗したときにプロセスの回復を実行し、プライベート ストレージ領域をクリーンアップし、プロセスが使用していたリソースを解放します。たとえば、アクティブなトランザクション テーブルの状態をリセットし、ブロックを解除し、アクティブなプロセス テーブルから失敗したプロセス ID を削除します。
6. RECOプロセス
このプロセスは、分散トランザクションの障害を自動的に解決する分散オプションがある場合に使用されるプロセスです。
7. ARCH プロセス
このプロセスは、いっぱいになったオンライン ログ ファイルを指定されたストレージ デバイスにコピーします。 ARCH プロセスは、ログが ARCHIVELOG に使用される場合にのみ存在し、自動的にアーカイブできます。

上記は ORACLE プロセスの内容です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。