shared pool:是缓存sql语句以及sql语句对应的执行计划
server process(前端进程):找shared pool中是否已经缓存了sql语句和执行计划,
如果没有,则解析执行计划并放入shared pool中,如果有,则执行使用shared pool中缓存
的执行计划,减少了解析sql语句所花费的CUP和IO。
bufffer cache:就是缓存的dbf的数据
读取一条sql:客户发送请求,服务器创建数据库连接(连接池分配一条),server process
oracle即前端进程会处理这条连接发过来的sql语句,先到buffer cache中查找sql语句,有
执行使用buffer cache中的执行计划和sql语句,没有则从dbf中去读(消耗CUP、IO),先
读到buffer cache中,再从内存中返回给前端进程返回用户。
缓存命中,命中率低肯定有问题,但是命中率高不一定没有问题,如物理IO一万条,逻辑IO十万条,
虽然命中率高,但是物理IO也是一万次,非常影响性能。
写一条sql:也是先写到buffer cache,然后由DBWR进程写到DBF。
BUFFER CACHE中有-已连接区(PING区)、空闲或未使用区、干净区、脏区
已连接区:server process连接buffer cache的一瞬间,该区域就是已连接区