逻辑读与物理读

来源:互联网 发布:淘宝开店经历 编辑:程序博客网 时间:2024/05/09 03:21

通常,当执行了set autotrace traceonly statistics,然后执行sql语句,就会返回下面的统计数据:

recursive calls:递归调用。一般原因:dictionary cache未命中;动态存储扩展;PL/SQL语句

db block gets:从buffer中读取的数据块数量。也就是即时读,通常是执行DML操作的时候,需要对数据块添加行锁,以免其他会话对同样的数据块数据行进行访问;

consistent gets:也就是一致性读。从buffer cache中读取的undo数据的block的数量。通常是除了for update之外的select 语句。

physical reads :也就是,物理读。从磁盘上读取的block数量。当内存中没有该数据块的时候,就会从磁盘中读进数据。

redo size :bytes,写到redo logs的数据量。

bytes sent via SQL*Net to client

bytes received via SQL*Net from client
SQL*Net roundtrips to/from client
sorts (memory) :内存排序次数
sorts (disk) :磁盘排序次数;与sort_area_size有关

另外,逻辑读是指,从内存中读取的数据块的数量,也就是logical read【逻辑读】 = db block gets 【即时读】+ consistent gets【一致读】。一致性读就是为了保证数据的一致性。在Buffer Cache中的数据块上都会有最后一次修改数据块时的SCN。如果一个事务需要修改数据块中数据,会先在回滚段中保存一份修改前数据和SCN的数据块,然后再更新Buffer Cache中的数据块的数据及其SCN,并标识其为“脏”数据。当其他进程读取数据块时,会先比较数据块上的SCN和自己的SCN。如果数据块上的SCN 小于等于进程本身的SCN,则直接读取数据块上的数据;如果数据块上的SCN大于进程本身的SCN,则会从回滚段中找出修改前的数据块读取数据。通常,普通查询都是一致性读。
由此,自然也就得出了cache命中率的公式:
Hit Ratio = (db block gets + consistent gets - physical reads) / (db block gets + consistent gets)
OR
Hit Ratio = 1 – (physical reads/(db block gets + consistent gets))



原创粉丝点击