私有SQL区和共享SQL区的关系?
私有SQL区和共享SQL区的关系不太清楚,上网找了一下,发现了两段矛盾的话:
说法1:
用户发出一条语句,应该先打开一个private sql area,也就是一个cursor。而private sql area包含两个子区——persistent area和run-time area。oracle这个时候到shared sql area查看是否有已经存在的适合这条语句执行的parsed statement,执行计划等等。如果有的话,copy一份到private sql area,没有的话则先在shared sql area parse,然后再拷贝到private sql area;
说法2:
若执行的共享sql在解析的时候并不存在,则先在 pga 中完成解析然后拷贝到共享池中,然后执行。 若解析前发现sga中存在,则从sga中拷贝到pga中执行。 若在执行过程中(如长时间查询操作) sga中被老化了,则必须拷贝pga中的到sga中去
说法1中提到,"没有的话则先在shared sql area parse,然后再拷贝到private sql area;"
说法2中提到,"若执行的共享sql在解析的时候并不存在,则先在 pga 中完成解析然后拷贝到共享池中"
当SQL语句找不到时,一个说在共享SQL区解析,一个说在PGA中解析,到底哪一个对呢?
另外,说法2中"若在执行过程中(如长时间查询操作) sga中被老化了,则必须拷贝pga中的到sga中去",此句不是太明白。
请教高人指点?
相关文章