Oracle|親カーソル・子カーソルについて

Oracleの親・子カーソルの調査方法についてのメモです。

調査で使用するSQL

親カーソル数のカウント

子カーソル数のカウント

子カーソルが再利用されなかった理由を確認

親カーソル・子カーソルとは

解析済のSQL文には、1つの親カーソルと1つ以上の子カーソルがあります。
親カーソルにはSQLのテキストが格納され、子カーソルには実行計画などが格納されます。

僕の理解では、SQLを発行する際にキャッシュされている実行計画の再利用のため

  1. 親カーソルに一致するSQL文があるか確認。不一致の場合は、新たに親カーソルを生成する。
  2. 一致する親カーソルが存在する場合、その子カーソルの実行計画が使用できるか確認。
  3. 2で子カーソルが使用できないと判断した場合、新たな子カーソルを生成する。(使用出来ないと判断した理由は、V$SQL_SHARED_CURSOR に記録される。)

というような流れで処理される認識です。

親カーソルとは

  • 親カーソルにはSQLのテキストが格納されます。
  • SQL文が異なる場合、別の親カーソルが作成されます。(大文字・小文字の違いだけでも、親カーソルは新たに生成されます。)
  • 親カーソルが格納されるテーブル(V$SQLAREA)

子カーソルとは

  • 親カーソルには必ず1つ以上の子カーソルが生成されます。
  • 子カーソルには、実行計画・バインド変数などの情報が含まれます。ただし、SQLのテキストは格納されません。
  • 子カーソルが格納されるテーブル(V$SQL)
  • 子カーソルが共有されなかった理由(V$SQL_SHARED_CURSOR)

参考にさせていただいたサイト

15 カーソル共有によるReal-World Performanceの改善

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする