扩表空间,后台虽然有会话在跑,但是也没太在意,结果添加30g的数据文件花了1小时。
正常情况下3分钟就应该结束的。
怎么这么慢?
看当前活动会话主要是db file async i/o submit事件
-
col name for a35
-
col parameter1 for a15
-
col parameter2 for a15
-
col parameter3 for a15
-
col wait_class for a12
-
select event#,name,parameter1,parameter2,parameter3,wait_class
-
from v$event_name where wait_class='system i/o';
先检查异步 i/o 是否在 linux 平台上工作,linux中,slabinfo 维护有关内存中对象的统计信息。异步 i/o 使用的一些结构体被视为虚拟内存中的对象,因此我们可以在slabinfo 上查找这些结构体。与 aio 相关的那些被命名为 kio*
$ cat /proc/slabinfo | grep kio
如果不为0说明启用了异步io
启用 aio 的 dbw0 进程的示例 strace( 参数 filesystemio_options = asynch)显示:
禁用 aio 的 dbw0 进程示例 strace (
参数 filesystemio_options = none) 显示:
oracle asmlib不会使用kiocb结构。
这里有个小技巧,跟踪进程但又想减少信息输出可以通过 -c 参数
当前参数是setall
当前进程号是14762
开启 -c 跟踪后,另开一个窗口,执行create table t1 as select * from obj$; 然后在跟踪窗口内按下ctrl c 强制断开,就会看到上面的画面。当然重点是看统计结果中有 io_submit 和io_getevents,说明启用了异步io。
下面是设置为 none 的跟踪结果
只能看到pwrite函数。
查看数据库中文件的异步io情况
-
select file_no,filetype_name,asynch_io from v$iostat_file;
设置了setall就显示上面的结果了
关于参数与os命令、等待事件的关系如下:
所以结论是os环境支持(通常都支持)的情况下,设置filesytemio_options=setall 重启实例,再观察。
在15点调整参数为setall,重启实例
后的dbtime统计曲线(红色线是重启时间点),可以看到dbtime大幅降低,有效!
参考:
filesystemio_options=none 时的“db 文件异步 i/o 提交”(文档 id 1274737.1)
如何检查异步 i/o 是否在 linux 上工作(文档 id 237299.1)
blog.csdn.net/wuweilong/article/details/44018521
阅读(3399) | 评论(0) | 转发(0) |