博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle为什么有个11g,oracle 11g 体系结构研究
阅读量:6914 次
发布时间:2019-06-27

本文共 2056 字,大约阅读时间需要 6 分钟。

Oracle体系结构

91a0abc983d53732a2c61ee0a28425d4.png

Oracle在在线事务处理上比较强

内存IO能力200倍于普通磁盘

select * from emp where empno=:1绑定变量通过hash value

有索引走索引,无索引走全表扫描

执行计划会计算总成本,选出执行计划最低的

Shared pool到library cache

1)语句找出 从library cache找出最优的执行计划,找出这条语句

2)对象失效 原先表上有100条数据,表上的数据没有变化,继续执行全表扫描

如果表上的数据增加到了100万条,那么执行计划会改变

3)并发控制 有些票务系统会用到

Library cache中缓存了数百万条记录,如何从中找出这条语句的执行计划,11g里面的SQL语句区分大小写,hash每个字母转化为ASCII码,进行hash运算

用hash value定义SQL语句

数据表用lock控制并发

1)计算hash

dbaf0949c37919fe5ca0cf38a65a0a13.png

3个SQL都是相同一个emp表,但是归属于不同的schema,那么就会出现3个是一样的hash

value,但是确是不同的执行计划。

上图的横线就是软解析的整个等待过程,产生的等待事件是latch library cache

从上到下依次是父游标和子游标

增加mutex锁,为了缩短链表长度,提高检索速度

找到父游标的mutex,找到父游标获取mutex,再找到执行计划。

出现mutex等待事件,说明SQL语句版本过多

硬解析

先获取latch,发现没有,释放latch,再申请latch shared pool,获得chunk内存

94f568b3533d91fb2a46eaaf8fff3878.png

语法解析

语义解析 表上数据分布有无索引

硬解析多,会有等待事件:

latch library cache

latch shared pool

数据字典cache,data dictionary cache主要用来做硬解析时候用

还有一个叫软软解析,在library cache执行完软解析后,会有一个指针直接指向heap6,就是代表软软解析

UGA放在PGA

session

cached cursor

library

cache的heap6指针指向heap6

可以参考dsi文档

3194652ab0a19c8a3004a9219566da1a.png

读不阻塞写,但写会阻塞读

当B块正在写的时候,如果A块要去读B块的内容,是无法读的,需要等到

产生了buffer busy waits的等待事件,DML语句产生等待

检查点事件

checkpoint

数据库操作在内存中完成,把数据文件读到内存中去,3000到5000

45e0a27152042140b44351df6d63e556.png

理想情况下,要在断电前把5000写入磁盘,保证数据不丢失

5000;执行commit,代表事务结束

只要commit就把数据写入磁盘,同步写,效率低,性能差。8k一个数据块

但是数据库同步写入磁盘速度太慢。

现在是如果系统重启完了,数据库在启动时候把数据重新构造出来,数据块用异步来写

只写日志,日志先行,commit,先把日志写入磁盘,数据块缓行。

d276c30cce5cf4edb2b7c14d1e2e9340.png

把上面的1、2、3、4用DBWr写入下面的磁盘内

DBWr负责写脏块,3秒一写,充满1/3空间一写,DBWr把1、2、3、4写回磁盘,DBWr去把原先内存中移除掉已经写回到磁盘里面的1、2、3、4日志

checkpoint进程监控数据文件同步

把当前状态写入控制文件,刚好把日志4写入了磁盘,如果实例挂了,就从日志4开始恢复

64001c4bfb57c2f5bf31d66e3a1a9e37.png

Database

buffer cache内存空间总要用完

3秒内BCH就会增加1

会把BCH数值小的清除掉

Shared

pool做解析,到database buffer cache取数据,database dictionary cache用来做硬解析

Redo

log buffer日志先进,先进内存,commit,lgwr写入日志到磁盘

Large

pool:对磁盘操作要做内存缓冲,IO操纵,内存缓冲区在large pool定义,如果没有设置large pool会导致在RMAN恢复的时候导致数据库性能下降,因为RMAN恢复会消耗IO资源,导致占用shared pool资源,使数据库性能下降。

用dbms_mview.explain_rewrite物化视图不能查询重写在这里都能看到

一个表,如果多列数据无关联,执行计划正确,如果出现多列数据相关,会导致数据库的执行计划有偏差,需要增加虚拟列来进行修复

多列统计信息和索引无关

收集统计信息

exec

dbms_stats.gather_table_stats(‘scott’,’T1’,’CASCADE=>TRUE);

数据库采用哪个执行计划?

Profile优于spm,先profile,再spm

Spm:SQL plan baseline

把SQL语句放入baseline

cdf9c13c8bcd7451c858f936fbed84c5.png

当第二个accept变成了yes,才会从两个accept中间进行选择

1.sql tunning advice验证,数据库自动运行

会从两个accept的yes中进行选择

2.envolve手动进行验证

转载地址:http://xnncl.baihongyu.com/

你可能感兴趣的文章
Loadrunner监控Centos
查看>>
转:问题解决:The project cannot be built until build path errors are resolved
查看>>
Python--day25--面向对象之多态
查看>>
submit
查看>>
数据结构-----树状数组
查看>>
mac终端下svn常用命令
查看>>
C++的lambda表达式
查看>>
新手学习python(十六)封装redis
查看>>
vue移动端弹框组件
查看>>
vuex
查看>>
vux 全局使用 loading / toast / alert
查看>>
面向对象数组操作
查看>>
Cocos2d-x之内存管理
查看>>
Sharepoint 列表分页开发
查看>>
当页面是本地页面时,通过ajax访问tomcat里的action,传递的参数在action里并不能识别...
查看>>
RocketMQ Java 客户端实现
查看>>
hdu 1133 Buy the Ticket (大数+递推)
查看>>
java:Java里数字转字符串前面自动补0的实现
查看>>
获取图片颜色的rgb,以供css设计背景颜色
查看>>
org.tinygroup.validate-验证框架
查看>>