今日整理标准文档: 1、oracle内存结构:SGA和PGA (1)SGA (1)share pool(共享池) 一条sql语句执行流程:客户端--实例--发送sql语句--oracle实例接收语句--解析sql--产生执行计划(n条)--数据库实例中的优化器选择最优的执行计划--执行sql--返回结果给客户 软解析和硬解析 (1)硬解析:shara pool 会根据执行计划去硬盘读数据,并存放在内存里; (2)软解析:shara pool 会先查检有没有完全一样的sql语句(严格区分大小写和空格),有的话就直接去内存里读取之前的数据; 硬解析:发生物理IO,读取速度慢;软解析:发生逻辑IO,读取速度快;软解析优先于硬解析执行 共享池作用: 1)存放sql语句 2)解析sql语名 3)产生执行计划 4)数据字典高速缓存--提升查询效率 哪些情况会导致SQL操作失败: ①test表不存在 数据库会自动维护数据字典--》包含对像名称信息,为了提升查询数据字典的性能,会缓存在内存里供进程访问; ②id字段,name字段不存在 数据字典中会缓存表结构中基本的字段信息; ③zhangsan不存在 查询数据的操作是在表中完成的; ④权限不足; 为了提高SQL的执行效率,数据库会自动维护数据字典信息,用于SQL对像确认,权限验证等操作; oracle因为执行的sql语句多了,内存里存了大量的sql语句,这样软解析就多了,硬解析就少了,所以数据库运行越久,性能就越稳定。 SQL>show parameter block; (2)buffer cache(缓存区高速缓存) 1)buffer 用于缓存来自于硬盘的数据库文件里数据块; 2)数据块是在建库初期就已经定义好了,一般是8k,一但建库成功完成后不能更改; 3)硬盘里的数据信息会加载到内存里的buffer cache里面,用于查询和修改操作; 4)内存数据块与硬盘的数据块不一致,我们称这个叫脏块(脏数据) 硬盘id=99 updata test id=100 where name=’zhangsan’ 5)oracle使用redo来保证脏块数据安全,redo的空间是固定的,按照时间顺序保存用户操作信息,如果因停电,引起系统停机可以用数据页+redo重新构建脏页; 6)事务结束的标志: commit 提交修改的数据 rollback 撤消执行过程中的操作 7)undo的作用: a)支持事务做rollback操作; b)RC undo 解决脏读问题; 8)buffer cache里的脏块是异步落盘,redo是顺序落盘,在某种情况下,实例会将某些数据块刷新到硬盘; (3)redo log cache(重做日志缓存) 1) 脏块落盘性能太差,引入redo log的机制来代替脏块直接落盘; 2) 在现在的传统关系型数据库中,保证数据持久性,都是通过redo机制来保证的; 3)日志数据量小于数据块数据量; 4)顺序IO(日志落盘)性能高于随机IO(脏块落盘) (4)large pool(大型池) 共享服务器 一对多的工作场景,监听进程的工作机制相关。 服务器进程 一对一的工作场景,一个服务器进程使用一块PGA空间,为一个用户会话提供服务 大型池和oracle的备份恢复操作有关 (5)java pool(java池) 和 stream pool(流池) 今日收获(已学到、已解决): 1、了解了SGA的模块,重点了解shara pool,buffer cache,redo log 今日困惑(未完成、为解决): 1、无
|