oracle sql语句解析过程

来源:互联网 发布:淘宝猫粮店推荐 编辑:程序博客网 时间:2024/06/05 12:42

       oracle数据库的性能问题,除了服务器存储或者 架构(RAC还是单实例)上不够给力以外。还需要考虑OS参数配置比如linux内核参数设置的是否合理 和oracle参数配置信息,但最主要的问题还是出在sql上。你写的SQL到底好不好很关键。sql优化很复杂,除了学好sql编程以外,还需要我们掌握最基础的知识,比如说sql解析过程、执行计划、统计信息等基础信息。

       今天主要是总结一下sql的解析。如果写了的sql能够重复的利用,能够使用软解析,肯定比硬解析从性能上来讲要好很多。

     首先sql解析的类型:

     1、硬解析

     2、软解析 (跟共享池有关)

     3、软软解析 (跟PGA有关)

      什么叫硬解析呢?

      sql从解析到执行总共有4个步骤。

     1、语法分析  

         select * fro  emp;

         首先分析出fro少了m,语法上不符合,直接报错

      2、语法分析通过后,进行语义分析。

           select emp_id from emp,还需要分析当前用户下有无emp这个表,如果有,当前用户对emp有无权限。 对象存在并且有权限的情况下,执行第三步

       3、查询sql的hash value是否在共享池中存在,如果不存在,需要生成解析树,根据统计信息,生成执行计划。

       4、生成最有的执行计划后,执行SQL.

      什么叫软解析?

       可以想象在OLTP场景下,很多短查询都需要硬解析的话,CPU使用率非常高的。生成解析树和选择并生成最优的执行计划是非常耗费CPU的。 那怎么办,如果在计算出sql的hash value时,在共享池中查询,有相同的hash value的sql语句,那么sql就不需要再生成解析树和执行计划了,那么最好费CPU的步骤省略了,这样相当于sql解析过一次,再执行相同的sql不用解析,是不是从查询效率有很大的提升。这个从共享池中找到sql 解析过程是软解析。

       什么叫软软解析?

        大家知道我们一般使用独享模式方式连接数据库,就像我们去饭店做的是包间,不是打听一样,有单独的服务员给我们服务。也就是说PGA上存了我们整个解析。

现在可以把共享池认为是大堂经理,整个饭店有啥事都可以招呼他,而我们包间的服务员是包间独享的。在饭店吃饭的时候,我们水壶的水没了,我们是直接找大堂经理速度快,还是找我们服务员速度快。软软解析就是省略掉查询共享池的操作,因为在共享池中及时查到了相同的hash value,也得看你有没有权限使用。但是在PGA中查到了,你肯定可以使用。所以不需要做语义检查的。也就是说你找大堂经理,给你找个人倒水,如果这个人是对面房间的服务员 ,你没有权限使用,如果你直接找你包间的服务员,说一声他就得做。所以软软解析的效率更高。

       弄清楚硬解析、软解析、软软解析,我们就有个疑问,在什么情况下能用到呢?

       DDL: create drop alter 肯定硬解析,就像你盖房子,拆房子,能再来一遍吗?房子没了怎么再拆。

      DML: insert delete select update 可以通过软解析 就像你打扫房间,当然可以打扫很多次。  

    怎么用呢?

    绑定变量是个好办法。

对于解析这块只是,如何查询hash value等等,都有对应系统sql语句。这块以后再更新。


   



0 0
原创粉丝点击