fm98888 发表于 2020-9-14 22:24:30

9月14日内存结构--sga

今日整理标准文档: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 testid=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、无

页: [1]
查看完整版本: 9月14日内存结构--sga