首页 > 应用开发 > IT综合 > Redo wastage产生的原因
在v$sysstat中有一个统计是redo wastage,这个究竟是什么意思,为什么汇产生这个问题哪?reod wastage会对系统的性能产生影响吗?
1、为什么会产生redo wastage?
我们都熟知产生的redo会先写入到redo buffer中,然后Oracle中的LGWR进程会根据某些触发条件将redo buffer中的redo写入到redo文件中。redo文件一般块是512,除去每个块有16字节的块头,真正能够使用的部分512-16。而redo文件在逻辑上是有redo record组成。LGWR写入redo的时候,会在redo文件中留下一些没有使用的空间,例如图:
这部分看见的产生主要愿意是因为在LGWR写入redo文件的时候,需要释放redo allocation latch,而在释放之前,由于系统的事务需要不停进行,既然要进行就需要不停产生事务redo,而这些redo也是需要不能中断写入到redo buffer中,如果不能这样的话,系统就会等待,就会停滞。所以在释放之前必须给随后的redo写一个新的buffer空间的起始位置。而这个其实位置就是存放在SGA中的fixed area中的一个index(应该是一个指针)。这个index就是告诉Oracle redo buffer写的起始位置。在分配这个index的时候,oracle会跳过当前已经使用块,在下一个没有使用的块上分配,而LGWR写的时候也是一块一块写入到redo文件中,相应的这部分没有完全使用的块也是按照原来的情况写入到redo文件中,这就造成现在这种redo wastage的状态。
2、redo wastage过多的原因
redo wastage的产生是正常的现象,但是如果redo wastage过多的情况产生的话就可以有问题了,这就说明LGWR过于频繁。而LGWR过于频繁的结果是需要过多的再如redo latch和redo写的IO。因为LGWR写的触发条件是:
n 1/3 buffer被使用
n commit
n redo size > 1M
n DBWR写
可以从redo buffer的大小和commit次数来着手。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/222350/viewspace-972511/ ,如需转载,请注明出处,否则将追究法律责任。