Shared SQL Areas和Private SQL Areas
Oracle 用Shared SQL Areas和Private SQL Areas描述每个SQL语句。当两个用户使用相同SQL语句时,Oracle可以在Shared SQL Areas中识别出来,并且重复利用。但是每个用户必须在Private SQL Areas拥有自己的一份SQL语句拷贝。
Shared SQL area包含了用于执行SQL语句的计划,Shared SQL area为了节省内存,保存一些常用的SQL语句。
当一条SQL语句解析出来时,Oracle从shared area分配内存,分配内存的大小由解析的语句决定。如果所有的shared area已经用完,Oracle会根据LRU逻辑释放足够的内存。再次碰到这些SQL语句,就需要重新解析一次。
1)shared sql area:
当一个sql语句第一次被执行的时候,那么数据库就会使用shared sql area 去处理折条语句,这个区域是共享的,可以被其他用户所访问,其中包含了语句的执行分析树以及执行计划。在这个区域中每个shared sql area为一个唯一的语句存在。(详细内容将在sga和shared pool中进行说明)
2)private sql area
当一个会话执行一个sql语句的时候,这个私有sql area 就会在pga中进行分配了。每个session都会有一个private sql area,如果执行同一个sql那么会指向同一个shared sql area。
eg:我执行了select * from t在一个session中执行20此和在10个不同的session执行同样这条语句,那么会共享同样的sql语句执行计划。但是private area 可能是不能够被共享的,因为其中可能存储的不同的变量值和数据。
其实我们在进行dml以及ddl操作的时候隐含的都是打开cursor,每个游标都作为客户端一边指向服务端的一条指针,每个游标打开都会分配相应的private sql area。因此在应用开发的过程中应该及时释放关闭游标,释放内存占用,以提高内存使用率。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29997949/viewspace-1612893/
,如需转载,请注明出处,否则将追究法律责任。