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进程。