第三講--SQL文のハード解析とソフト解析

3216 ワード

このセクションではshared poolのメモリ構造について説明します
 
SQL文の実行は、次の3つの段階に分けられます.
1.SQLの解析(parse);
2.SQLの実行(exec);
3.SQL結果の取得(fetch).
Shared poolはメモリプールで、最も主要な役割はSQL文とSQL文の実行計画をキャッシュすることです.Sharedpoolは主にparse段階で機能する.
 
Shared pool自体は多くの部分に分かれています.
1.free,shared poolの空きスペース;
2.library cache、ライブラリキャッシュ、キャッシュはSQL文とSQL文に対応する実行計画である.
3.row cache辞書キャッシュ、oracleデータベース自体の情報はすべてデータ辞書の中に存在して、例えばデータベースがどれだけの表があって、どれだけのユーザーなど.データベースを管理するには、データベースに何があるかを知る必要があります.これらはデータ辞書の情報です.
 
library cacheのサイズを確認します.
SQL> select * from v$sgastat a wherea.NAME='library cache';
 
POOL        NAME                           BYTES
------------ ------------------------------------
shared pool library cache                5538864
 
フリースペースの大きさを確認します.
SQL> select * from v$sgastat a wherea.pool='shared pool' and a.NAME='free memory';
 
POOL        NAME                           BYTES
------------ ------------------------------------
shared pool free memory                 58521616

row cacheスペースの大きさを確認します.
SQL> select * from v$sgastat a wherea.NAME='row cache';
 
POOL        NAME                           BYTES
------------ ------------------------------------
shared pool row cache                    7480368

oracleの解析は3つに分けられ,ここでは硬解析,軟解析の2つだけを述べる.
ハード解析:
1本のSQLが入ってきたら、sharedpoolのlibrary cacheの中で同じSQLとSQLに対応する実行計画があるかどうかを探して、library cacheの中にキャッシュがなければ、ハード解析を行います.
ハード解決プロセス:
1.server processはSQL文法に誤りがあるかどうかを判断する.
2.server process SQL文に関連するオブジェクトが存在しないことを検出する.
3.server processは、ユーザが実行するオブジェクトに権限があるかどうかを判断する.
4.実行案を生成する;
5.SQLはN個の実行シナリオを生成することができ、N個の実行シナリオの中からSQLの実行計画として最適なシナリオを選択する必要がある.これはハード解析が最も重要であり、最も資源を消費するステップ(70%)である.
ソフト解析:
SQLが入ってきたら、sharedpoolのlibrary cacheで同じSQLとSQLに対応する実行計画を見つけて、ソフト解析を行います.
プロセス:
1.ソフト解析も文法をチェックする.
2.対象権限を検査する;
ソフト解析は通常検査のみであり,ハード解析のようにN個の実行案の中から最適案を実行計画として選出することはない.ソフト解析には、最もリソースを消費するステップはありません.
 
ハード解析とソフト解析では、権限情報、オブジェクト情報など、データベースの多くの情報が辞書情報に属しています.解析はデータ辞書へのアクセスが頻繁なので、shared poolのrow cacheにデータ辞書情報を入れます.row cacheとlibrary cacheを連携させます.
Oracle解析の統計を表示するには、次の手順に従います.
SQL> select name,value from v$sysstatwhere name like 'parse%';
 
NAME                                                                 VALUE
--------------------------------------------------------------------------
parse time cpu                                                         233
parse time elapsed                                                    1185
parse count (total)                                                   7595
parse count (hard)                                                    1129
parse count (failures)                                                   0<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

parse count(total):データベースが起動してから発生した解析回数(7595)、ソフト解析とハード解析を含む.
parse count(hard):ハード解析の回数(1129)、ソフト解析=total-hard;
parse count(failures):解析に失敗しました.
failuresとhardの回数が大きい場合、問題があります.