zoukankan      html  css  js  c++  java
  • SQL语句的执行过程

    1、sql的执行过程

    客户端发起请求-》oracle(server process)接收-》放入到SGA中SHARE pool存放-》通过CPU解析相应的执行计划-》执行计划存放在SHARE POOL中-》在从buffer cache中把相应的数据取出来,如不存在,从数据文件中把数据调入到buffer cache中取出来

    中间的过程进程都是server process完成,包括sql解析、执行、读取数据、把返回给用户、修改数据等。是跟用户交互的进程

    2、详细讲解SELECT取数据硬解析

    客户端发起请求-》进去oracle(server process)-》放入到SGA中SHARE pool中的library cache,检查SQL语句[微软用户1] ,寻找相应的解析计划[微软用户2] -》解析计划在librarycache不存在-》通过CPU去解析,消耗CPU、IO资源; 需要大量的资源比较出来那一套执行计划为最优存放到library cache中。

    命中率=逻辑读/(逻辑读+物理读);命中率低,性能一定有问题,命中率高,不能确定性能是否存在问题

    Linux 查看物理读

     VMSTAT 1 10

    IOSTAT 1 10

    Blk_read/s:每秒物理读的块数

    Tps:每秒的传输数据,数据越大,说明物理读越多

    BLK_READ:读的总数

    3、详细解读insert过程

    客户端发起请求-》进去oracle(server process)-》放入到SGA中SHARE pool中的library cache,从数据文件中把数据取到buffer cache后,修改buffer cache的内容,相应修改的内容写入到redo log buffer。通过Lgwt进程写入到REDO LOG,buffer cache中的内容通过DBWN进程写入到数据文件中,并且更新控制文件和数据文件的头,通过CKPT进程。


     [微软用户1]

    语法是否没有问题

    对象(表、视图、同义词)是否存在

    权限是否存在,都需要通过数据字典查询,数据字典存在row cache中

     [微软用户2]把相应的SQL语句没有字母都转化为ASCI码,在hash算法加密后,找到数据的chain链中,在把这个chain遍历,是否存在chunk中相同的值,如相同,之前已经有解析存在,只需要软解析,不用硬解析。

  • 相关阅读:
    docker启动:Got permission denied while trying to connect to the Docker daemon
    Centos7上安装docker
    Docker个人理解总结
    IDEA 的Class not found: "..."Empty test suite
    启动总是提示:Process finished with exit code 0
    配置xml:url is not registered
    MD5加密与Hash加密
    java线程安全问题之静态变量、实例变量、局部变量
    Dockerfile 常用指令
    通过 Service 访问 Pod
  • 原文地址:https://www.cnblogs.com/gull/p/2954894.html
Copyright © 2011-2022 走看看