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中相同的值,如相同,之前已经有解析存在,只需要软解析,不用硬解析。

posted @ 2013-03-12 00:00  gull  Views(426)  Comments(0Edit  收藏  举报