Physical read 就是把数据块从 Disk 读到内存
Logical read 就是把数据块从db_cache 读到 server_process的PGA
Logical read = DB block gets + consistent gets
DB block gets 就是 当前的data 读的时候SCN 根据当前最新的current SCN 获得的,一般update前要先获得最新数据
consistent gets 就是 consistent 的data,就是说读的时候SCN 不是根据current SCN获得的,而是根据查询时对应的scn获得的,select
Oracle 每访问一个数据块,就需要一个logical read , 不管是否是当前SCN .也不管是否需要作physical read( 把数据块从 Disk 读到内存 ) , 也就是说,就算已经作了physical read , Oracle 还是需要再作logical read 才能访问到这个数据块(先从Disk 读到SGA, 再从SGA读到PGA)
当然,有一个特例,就是physical read direct , 把数据直接从disk 上读到 PGA里面,中间不通过SGA , 这时候,就是只有 physical read 而没有logical read……
至于 Buffer Hit 的公式
Hit Ratio = (db block gets + consistent gets - physical reads) / (db block gets + consistent gets)
== (logical read - physical read) / (logical read)
== (只走内存的logical read)/(所有logical read) 就是所谓的内存命中率了
Logical read 就是把数据块从db_cache 读到 server_process的PGA
Logical read = DB block gets + consistent gets
DB block gets 就是 当前的data 读的时候SCN 根据当前最新的current SCN 获得的,一般update前要先获得最新数据
consistent gets 就是 consistent 的data,就是说读的时候SCN 不是根据current SCN获得的,而是根据查询时对应的scn获得的,select
Oracle 每访问一个数据块,就需要一个logical read , 不管是否是当前SCN .也不管是否需要作physical read( 把数据块从 Disk 读到内存 ) , 也就是说,就算已经作了physical read , Oracle 还是需要再作logical read 才能访问到这个数据块(先从Disk 读到SGA, 再从SGA读到PGA)
当然,有一个特例,就是physical read direct , 把数据直接从disk 上读到 PGA里面,中间不通过SGA , 这时候,就是只有 physical read 而没有logical read……
至于 Buffer Hit 的公式
Hit Ratio = (db block gets + consistent gets - physical reads) / (db block gets + consistent gets)
== (logical read - physical read) / (logical read)
== (只走内存的logical read)/(所有logical read) 就是所谓的内存命中率了