data file init write等待

发生data file init write的等待是数据文件正在发生扩展,在11g中,这往往和SMCO和Wnnn进程的自动预扩展有关。

在生产环境中,如果在生产高峰期出现预扩展,可能会造成短暂的hang住,或者CPU突然的升高,或者查询dba_free_space的hang住。但是,预扩展这个功能是否好处大于坏处,是否需要关闭,我们用一些测试数据来说明。

在测试库测试了load大量数据到表中,触发SMCO进行自动预扩展,在测试中发现如下:

(1)开启预扩展时(即设置_enable_space_preallocation为默认值3),表空间在接近100%进行扩展,扩展的大小为当时表空间大小的5%。该行为收隐含参数_kttext_warning影响,默认值为5.(详见Doc ID 1459097.1),因此如果原来的表空间越大,那么预扩展的空间就越大,需要的时间也越长。处于data file init write的等待时间也越长。

(2)关于Wnnn进程会造成CPU的突然升高,是Bug 13871316 Wnnn space background process may be periodically CPU bound。但是是否hit中bug还是需要看其pstack和errorstack,看是否有和bug相关的call stack:ktslfsum_cfs<-ktslfsum<-ktslj_check_freespa<-ktslj_segextce<-ktsj_execute_task。做pstack和errorstack的方法见下: (2.1)用循环语句pstack wnnn进程,如Wnnn进程号为19750:

(2.2)errorstack方法:

(3)在我的测试中,由于没有hit BUG 13871316,所以几乎没有看到Wnnn处于data file init write时,对CPU的影响。如下: 处于data file init write的时间:

我们叠加上CPU的趋势,可以看到,在出现Data file init write的时候,绿色的CPU几乎没有受到影响,没有随着Data file init write的出现而出现CPU高峰。

并且观察Wnnn进程的sesstat,”CPU used by this session”在Data file init write也没有看到变化。

(4)对比开启预扩展和关闭预扩展,循环插入100次(插入过程中无预扩展),开启预扩展的时间的插入效率比关闭的高:
(4.1)开启预扩展:

(4.2)关闭预扩展:

(5)对比开启预扩展和关闭预扩展,循环插入1000次,那么insert过程中伴随预扩展的进行,则开启和关闭之间的差距不大。
(5.1)开启预扩展:

(5.2)关闭预扩展:

Oracle在11g推出空间预扩展的功能,是在很大程度上能减轻空间分配争用的问题,对提高效率有好处,建议保留使用该空间预扩展的功能,不设置_enable_space_preallocation为0。因为对于这个新功能带来的好处,是大大多于缺点的。

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据