Oracle 実行計画の読み方
コメントあれば、よろしくお願い致します。
0 recursive calls
0 db block gets
7,800,000 consistent gets --select文でアクセスしたバッファキャッシュのブロック数。ディスクとメモリへの総アクセス数 A
3,500,000 physical reads --ディスク上のデータファイルにアクセスしたデータ要求の総ブロック数 B
0 redo size
219,000,000 bytes sent via SQL*Net to client
7,100,000 bytes received via SQL*Net from client
500,000 SQL*Net roundtrips to/from client
100 sorts (memory) --メモリ内でソートした回数 C
0 sorts (disk)
9,200,000 rows processed --処理対象となった行数 D
一番、重視しなければいけないのは、A だと思っています。
780万回もアクセスされていますが、
ブロック数が 8K に設定されている環境であったとして、
1024*8*780万 = 63,897,600,000約 63GB の i/o が一つのSQLで発生
B に関しても一応計算してみると、
1024*8*350万 = 28,672,000,000約 28GB の i/o が一つのSQLで発生
D に関しては、920万行という結果は分かるが、1行辺りの幅が分からないので、
幅を別途SQLから計算し、どういった負荷を与えている文なのかを分析する必要がある。
select statement optimizer=choose
からの数十行には、
(FULL)が、(UNIQUE INDEX)に比較して、10倍ぐらい表示されていると仮定します。
それぞれの検索テーブルの件数ははっきりしていたとして(1件~2000万件ぐらい(400万件以上が5テーブル))、
何をどうするのがSQLチューニングでしょうか。
お礼
有り難う御座居ます。 読ませていただきました。 上のMMは最近購読を始めたので、昔の記事も色々読んでみようと思います。