从Oracle 9i开始,参数db_block_checksum的默认值为true,虽然这个设置大大减少了数据中断发生未通知的概率,但是使用该参数仍有一定的性能代价。
如果该参数为true,每次数据块或日志文件块写入磁盘的时候,进程首先执行计算并将checksum保存在块头中。同样的原理,每次从磁盘读取的时候,进程将立刻重新计算并验证checksum。如果该参数为false,则仅仅计算system表空间中的块,文件头块,和控制文件块。如果验证失败,将发生ORA-01578, ORA-00368 or ORA-00227等错误,具体依赖于影响的方面。
checksum是块中所有数据的一个XOR操作,并且只占很少的时间但是聚集时间会达到可观的cpu时间。对于每个io操作都要执行计算。写需要的时间比读更少,因为写通常由DBWn和LGWR在后台完成,而前台进程不会等待这些服务。而读时前台进程必须等待并因此影响了相应时间。
虽然Oracle文档指示平均增加的负载为1-2%,但是在高i/o查询并且高cpu使用率的系统中通常会情况更差。Oracle推荐是将该参数保持为true,并且通常可用。但是如果应用程序如果是i/o很大的并且可用cpu不多,可以考虑将其设置为false。
阅读(825) | 评论(0) | 转发(0) |