设为首页 收藏本站
查看: 815|回复: 0

[经验分享] Oracle sql 高级编程学习笔记(二)SQL执行理论

[复制链接]

尚未签到

发表于 2016-8-4 15:41:57 | 显示全部楼层 |阅读模式
  一,共享池 SGA
  1,执行过的每一条SQL语句在共享池中都存有解析后的内容,存储这些语句的地方称为库高速缓存(library cache).不管多少用户要执行同样的语句sql,Oracle都会只解析一次;
  
  2,数据字典高速缓存(dictionary cache)存储所有的系统参数等数据库信息;
  
  3,分配给共享池的内存是有限,当新语句执行时,oracle用最近最少用算法(LRU)管理共享池的内存,将最近执行频率成高的覆盖执行频率低的sql内容。
  
  4,软解析和硬解析:解析包括验证语句的语法,检验提交的对象以及确认对象的用户权限,如果检查通过,再去检查该语句是否执行过,如果是,oracle重用直接解析过的内容,称为软解析;否则oralce将执行所有的工作来为当前的sql语句生成执行计划,并将它存在缓存中以便后续重用,此解析称为硬解析;
  
  5,可以通过查询v$sql 试图来查询当前存放在库高速缓存的SQL语句。
  
  6,在执行sql时,即使是代表同一个功能的语句,大小写不一样,有无注释,Oracle都将视为不同的sql语句,如select * from employee 和 SELECT * FORM EMPLOYEE;oracle将为之生成不同的执行计划;
  7,条件查询时,如果使用常量查询,如select * from employee where employee_id = 101 和 select * from employee where employee_id = 102,oracle将进行硬解析。但是如果采用绑定变量,则可以重用,如:select * from employee where employee_id =:v_empl_id.
  
  8,锁存器:用来保护库高速缓存避免被两个同时进行的会话修改,也就是说如果oracle为了检查你要执行的sql语句是否已经存在而要在库高速缓存中获取一个锁存器,检查锁存器是否空闲。如果空闲则获取锁存器并做它的工作,否则会迭代轮询锁存器是否空闲 spinning. 故,正确编写代码使其较少使用锁存器也是非常重要的.
  
  9,SGA-缓存区缓存   在数据库从硬盘读取数据出来后或者写入硬盘之前,缓存区缓存用来存储数据块。块是oracle进行操作的最小单位,验证块是否在缓存区都必须获取锁存器,写sql获取数据应该尽可能的访问尽可能少的数据块。如果数据库在缓存区,访问该数据块是一次逻辑读取,否则为物理读取。
  
  二, 查询转换  
  1,在sql语句通过语法权限检查后,查询就进入了转换为一系列查询快的转换阶段。查询转化器可能会改变你最初所写查询的结构,但是不会改变最终的结果集。查询转换的目的就是确定如果改变查询结构的写法是否会提供更好的查询计划。
  2,试图合并
  3,谓语前推
  4,使用物化试图进行查询重写
  
  
DSC0000.jpg
 
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252905-1-1.html 上篇帖子: smon_scn_time表回滚异常导致ORACLE宕机 下篇帖子: Oracle--创建函数隐藏IP地址的最后一项
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表