1.shared pool(共享池)
share pool 是由library cache和data dictionary cache 构成
共享池是对sql,pl/sql程序语法分析,编译执行的内存区域。
seared pool 的作用:
1.用于存储:
•最近执行的SQL语句
•最近使用的数据定义
2.它由两个关键性能相关的内存结构组成:
•库缓存
•数据字典缓存
3.根据参数调整大小
libarary cache缓存
library cache(库缓存):library cache是shared pool的一部分,它几乎是oracle内存结构中最复杂的一部分,主要存放shared curosor 和plsql对象的信息,以及这些对象所依赖的table,index,view等对象的信息。
1.存储了所有编译过得sql语句,pl/sql语句
2.由所有用户共享使用
3.发起一条sql时,首先检查library cache 中是否有一条已经解析过且准备执行相同语句,若有,oracle就使用library cache的这个语句版本,从而减少更多的处理时间,我们称之为软解析。soft parse
4.如果oracle在library cache 有此sql代码的执行版本,则必须建立新的可执行代码,称为硬解析 hard parse
5.使用最近最少使用的算法进行管理(lru)
data dictionary cache (数据字典的缓存)
1.主要包含对象定义,用户名,角色,权限等信息。
2.当执行一段sql代码时:
oracle首先需要检查你是否具有执行该操作的权限。在data dictionary cache中查看是否有相关信息,若无,oracle 把信息从数据字典表读到data dictionary cache 中,
3.数据字典未命中——即oracle未在data dictionary cache 中发现数据,那莫需要花费额外的成本进行数据处理。
4.没有直接调整library cache 和data dictipnary cache 大小的方,只能通过增加或减少shared pool。
sql在oracle内部的处理流程
sql处理的第一阶段就是sql解析。当应用程序发出sql语句时,该应用程序向数据库发出一个解析调用,以准备执行该语句,解析调用会打开或创建一个游标,他是一个特定于会话私有的sql区的句柄,器中包含了已解析的sql语句,和其他处理信息。游标和私有sql区位于pga中。
redo log buffer(重做日志缓冲区)
1.是sga中的一个循环使用的缓冲区,它保存有关更改的信息。此信息存储在redo条目中。redo条目通过插入,更新,删除,创建,更改,和删除操作重新构造或重做数据库更爱所需的信息。
2.redo条目记得不仅是sql语句的本身,还包括执行后对数据库中某个文件某个块的修改,包括dml,ddl操作。
3.重做条目占用缓冲区中连续的,顺序的空间。后台进程lgwr将重做入职缓冲区写到磁盘上的活动重做日志文件。
4.记录所有redo条目,目的是用于数据库的恢复。
redo log buffer 特点
lgwr会在什么情况下将信息写入磁盘
1.当一个用户执行commit语句时
2.每三秒执行一次
3.当rode log buffer 满三分之一时
4.当一个dbwn进程向磁盘写入时
redo log buffer
lgwr 将redo条目从redo log buffer 写入redo log file,那么服务器进程可以将新的日志项覆盖写入,因此数据库给redo log huffer 分配了较小的内存,大约5mb。
较小的Redo log buffer将减少redo log file 的IO操作,但是提交处理将花费较多的时间。
间。
较大的Redo log buffer将会在成LGWR归于繁忙的进进行写入,会造成系统CPU压力。
nologging选项。该选项可以绕过redo log不进redo log记录。减少资源争用。
查看log buffer
show parameter log_buffer 查看
select name,bytes,resizebale from v$sgainfo