Statspackとは
Statspack設定
statspackでの情報収集
statspackレポートの出力
便利スクリプト
Oracleチューニング講座
第9章 Oracleメモリー構造とプロセスについて復習する
「
第7章 ストライプ化とは
」、「
第8章 手動によりI/Oを分散してみよう
」でも説明しましたが、OracleデータベースのパフォーマンスはディスクI/Oに大きく影響を受けます。Oracleではディスク・アクセスを減少させるためにメモリー・キャッシュ内に情報を格納しており、Oracleの各プロセスはメモリー・キャッシュ内のデータにアクセスしてデータベース処理を実施しています。Oracleのメモリ・キャッシュのチューニングを考える際には、「SQL」はOracleのメモリー・キャッシュやプロセスがどのような役割を果たして実行されているかを認識する必要があります。
Oracleメモリー・キャッシュ
Oracleシステムにおけるパフォーマンスの目標は、必要なデータがメモリー内に存在する可能性を高くし、プロセスを効率的に動作させ、できるだけ物理I/Oのオーバーヘッドを削減することです。
メモリー・キャッシュのサイズによりパフォーマンスに影響が出るので、以下のメモリーキャッシュをチューニングする必要があります。
■システム・グローバル領域(SGA)
データベースのデータと制御情報を含む共有メモリー領域です。
・共有プール
・REDOログ・バッファ
・データベース・バッファ・キャッシュ
■プログラム・グローバル領域(PGA)
プロセスごとに割当てられる非共有のメモリー領域で、ソート領域などを含みます。
プロセス
Oracleプロセスには、ユーザー・プロセスからの要求を処理するサーバー・プロセスとOracle Serverのためのメンテナンス処理を実行するバックグラウンド・プロセスがあります。
SQLの処理ステップ
ユーザー・プロセスから発行されたSQLがOracleメモリー・キャッシュとサーバー・プロセスとバックグラウンド・プロセスによってどのように処理されるのかをスッテップごとに説明します。
1.SQLの解析(PARSE)
SQLで指定された表や列の定義チェック、アクセス権限のチェックなどが行われます。
このステップで最適な実行計画が選択されます。
2.変数のバインド(BIND)
SQLでバインド変数が使用されている場合、値を代入するためのメモリー領域を確保します。
バインド変数が使用されていない場合は、このステップはスキップされます。
例)SELECT * FROM emp WHERE deptno = :変数 ;
3.SQLの実行(EXECUTE)
SQLを実行します。バインド変数が使用されている場合は、値を代入して実行します。
4.値の取出し(FETCH)
SELECTのみのステップです。選択された対象行が取出されます。
上記ステップを図にしたのが、以下の図1になります。
図1:ファイルを分離していないREDOログ・ファイルの構成図
この図から、以下のような処理が行われていることが分かります。
①ユーザー・プロセスからサーバー・プロセスに処理要求(SQL)が渡されます。
②サーバー・プロセスがSQLを解析し、SQLやアクセス権限のチェック、最適な実行計画の選択などを行い
ます。また解析結果を共有プールに保持します。解析結果を保持することで、再度同じSQLが発行された
場合に不要な解析を繰返す必要がなくなります。
③SQL処理に必要なターゲットのデータを、データベース・バッファ・キャッシュ上で探します(③-1)。
見つからなかった場合は、サーバー・プロセスがデータ・ファイルから対象ブロックを読込みます
(ディスクI/O発生)(③-2)。
④
【DML文だった場合】
変更履歴をREDOログ・バッファに格納し、データの変更をデータベース・バッファ・キャッシュ上で行います。
【SELECT文だった場合】
データベース・バッファ・キャッシュ上でデータ・ブロックから必要なデータを取出し(FETCH)、ユーザー・プロセスに返します。
サーバー・プロセスによって生成されたREDOレコード、変更されたデータ・ブロックはバックグラウンド・プロセスによって、これらの処理の後Oracleデータベースに書込まれます。
このように、SQLの処理ステップを理解した上で次章に進みましょう。
次章では、共有プールのチューニングについて学習します。
第10章 共有プールのチューニングを学ぶ