深入了解游标与共享SQL区、私有SQL区的问题?
今天在网上查到一篇关于游标的文章:
http://bigboar.itpub.net/post/8411/225320
这里面有这样一段话:
从这一节我们可以看到,SQL语句执行的步就是创建游标:
Stage 1: Create a Cursor
A program interface call creates a cursor. The cursor is created independent of any SQL statement: it is created in expectation of any SQL statement. In most applications, cursor creation is automatic. However, in precompiler programs, cursor creation can either occur implicitly or be explicitly declared.
然后,就是把SQL语句交给Oracle来解析,此时如果在shared pool的library cache发现一个和该SQL语句一样的shared SQL area,那么,直接拷贝一份作为private SQL area来执行,此叫做发生一次soft parse;如果没有找到,那么就要解析该SQL,也就是要得到该SQL的parse tree和execution plan,分配内存,存储这些信息为一个shared SQL area,然后拷贝一份做为private SQL area然后再执行,此为发生一次hard parse。
这一段话里提到要将shared SQL area中解析过的语句拷贝一份到private SQL area。我不明白的就是这里,私有SQL区中难道也要保存解析树、执行计划等这些信息吗?
文档中有说过:
游标的私有 SQL 区又可以被分为两个区域,这两部分的生命周期有所不同:
1. 持续数据区(persistent area),包含绑定信息(bind information)之类的数据。此区只在游标关闭时才会被释放。
2. 运行时区(run-time area),当游标执行结束就会被释放。
我的问题是:私有SQL区中,有没有解析树、执行计划这些已经在共享SQL中的信息。
相关文章