关于SQL语句解析过程的一些简单总结

1 一个SQL语句进入到oracle以后都经过哪些步骤?  
    客户端输入sql语句
    sql语句通过网络到达数据库实例
    server process接收sql语句先进入共享池
           1.解析:消耗很多资源:CPU、IO
           2.sql--解析成执行计划,然后oracle才能执行
    共享池:找是否有缓存sql语句以及其所对应的执行计划,如果没有会开始解析 
    数据库缓存区:用来缓存dbf文件的数据,当一个进程访问数据时,server process首先到buffer cache中找,如果没有就去dbf中找,然后取出来放到buffer cache中,在从buffer cache返回给用户。
2 server process执行sql语句时,要去访问某个表,首先读buffer cache找是否有这个表的数据,如果有直接从buffer cache读,这个叫逻辑读,也叫内存读。如果找不到就去dbf读,这个叫磁盘读,也叫物理读。
3 SQL语句的更新过程
     首先server process将sql语句读到内存中,在内存中对这个表进行修改,会产生日志写到日志缓冲区里。修改完内存中的数据与dbf中的数据不一样了,所以通过DBWR进程要将内存中修改的数据写入dbf文件中,LGWR将修改的日志写入磁盘log文件中。
4 归档日志:默认有三块日志,都写满后又从第一块开始覆盖,发生日志切换时将被覆盖的日志文件复制到归档存储器
5 shared pool中有三块区域:(解析的过程用到这个)
         free空间
         library cache库缓存:缓存sql语句以及其执行计划
         row cache数据字典:存储oracle数据库自身的信息
6 SQL语句的解析类型
   server process首先会拿着SQL语句进入shared pool的library cache找这个SQL语句以前有没有被解析过,如果有就不需要解析(其实还是需要解析,不过叫做软解析);如果没有,oracle会进行硬解析。
   硬解析步骤:首先会判断这个SQL语句语法有没有错误;
                      然后看这个语句中涉及的对象存不存在;
                      执行这条SQL语句的用户对这个表和相关的对象有没有权限;
                      在执行方案中找最优的方案作为执行计划(最消耗资源)
   软解析步骤:SQL语句语法
                      检查用户权限
7 shared pool内存块组成
   只能设置总体的shared poor大小,但是library cache和row cache大小是oracle自动生成。
   free空间内存:是一个个小的内存块(chunk),用各个链(chan)连着挂起来,不同链挂着内存块大小不同,越往下越大。
                         硬解析需要从free里找chunk
              chan:可以将特性类似的内存块串起来;可以遍历(latch锁用来保护链)
   library cache内存:也有大量的链,每个链都是有编号的,当从free空间将执行计划挂到library cache上时,通过将SQL语句转换成ASCII码,再进行计算得到一个对应链的编号,接着查找对应编号的链,将其挂在上面,如果后面再次执行了这条SQL语句,就会锁住那个链在那个链上进行遍历找到chunk,找到以后就不会发生硬解析了,发生软解析。
8 为了减少解析,需要SQL共享,SQL共享需要:
          1). SQL语句完全相同;
          2). 使用绑定变量共享SQL:
                declare v_sql varchar2(50);
                begin for i in 1..10000 loop
                v_sql := ' insert /*hello*/ into test values (:1);   // :1 占位符
                execute immediate v_sql using i;
                end loop;
                commit;
                ent;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值