カーソルについての理解メモ

参考資料

Oracle Database SQLチューニング・ガイド
12c リリース2 (12.2)
カーソル共有によるReal-World Performanceの改善

プライベートSQL領域について

  • プライベートSQL領域には、解析済のSQL文に関する情報と、処理に使用するその他のセッション固有の情報が保持される。
  • サーバー・プロセスでSQLまたはPL/SQLのコードが実行される場合、プロセスではプライベートSQL領域を使用してバインド変数値、問合せ実行状態情報、問合せ実行作業領域が格納される。# Private SQL Area の中身って確認できないのかな。
  • 文の各実行におけるプライベートSQL領域は共有されず、異なる値やデータが含まれている可能性がある。

カーソルについて

  • カーソルは、特定のプライベートSQL領域の名前またはハンドル
  • カーソルには、バインド変数の値や結果セットなどのセッション固有の状態の情報が含まれている。 f:id:spaceman076:20201206113641j:plain
  • Client のデータ領域は、PGA のプライベートSQL領域を指しているカーソル。
  • PGA のプライベートSQL領域は、共有プール内にあるライブラリキャッシュ、またその中にある共有SQL領域内の解析済みSQL等を指すカーソル。

親カーソルと子カーソル

  • すべての解析済みのSQL文には、親カーソル子カーソルが存在する。
  • 親カーソルにはSQL文のテキストが保存される。2つのSQLのテキストが同一の場合、これらのSQLは同じ親カーソルを共有する。
  • 2つのSQLのテキストが異なる場合、データベースは別の親カーソルを作成する。
  • スキーマが別でSQL文が同一の場合も、親カーソルを共有する。(SQL文が同一なので)
  • 子カーソルには、実行計画、バインド変数、問合せで参照されるオブジェクトに関するメタデータオプティマイザ環境およびその他の情報が含まれている。親カーソルとは異なり、子カーソルにはSQL文のテキストは格納されていない。