Tag Archives: DBIO_EXPECTED

关于 Oracle 的 IO 响应能力: 10 毫秒的来历

最近在 ITpub 上有几个讨论 IO 的帖子很热闹,其中一个讨论中 Biti 说”响应时间在 10ms 左右能达到的最大 IOPS 能力,是系统 IO 能力的一个最重要指标” ,下面好多网友不知道这个 10ms 怎么来的,以及为什么是 10ms .

其实如果你熟读 Oracle 手册的话,你会发现 10g 中已经涉及到这个 “10ms” 的信息了,而且,侧面透漏出很多潜在的细节。

在 Oracle 10g 中有一个新的参数: DBIO_EXPECTED ,这个参数指 DB 平均读取一个 数据库块的时间,单位是毫秒(millisecond)。由 ADDM( Automatic Database Diagnostics Monitor)用以分析系统 IO 性能的参考值。默认是 10ms ,之所以取这个值,是因为当前企业内投入使用的硬盘(存储)一般一个 IO 时间(读取一个 DB 块)大约在 10 ms 之下,超出 10 ms 一般意味着在 IO 跑得有点费劲了。这个 10ms 是个经验值,但这个经验值是有来由的。

有些慢速硬盘,比如希捷 Barracuda® ES.2,寻道时间接近 10毫秒,一些老一点的 SATA 盘肯定更慢了;而 Cheetah® 15K.5 则大约只是 3ms-4ms 的样子(DBA没事的时候不妨看看硬盘厂商的白皮书,挺好玩的)。一个 DB 系统上线时,测试一下 IO 基准能力还是必要的。注意测试的时候出现的”拐点”,意味着这个时候的 IO 响应时间是至关重要的,因为这个时候 IO 即使有应用Cache、 数据库 Cache、(主机 Cache)、存储 Cache,也还是有大量 IO 压在了后面的磁盘上,如果磁盘的 IO 到了峰值,IO 层的能力也就到了峰值了(特定响应时间下的最大 IOPS)。多数系统上,应该在 10ms 附近。所以,你盯着 DB 上离散读的平均响应时间,到了 10ms 意味着快撑不住了。

要如实使用 ADDM 衡量 IO 状况,DBIO_EXPECTED 参数还是需要作一点调整的。要注意这个参数并不是初始化参数,如果需要重新设定,则需要提交如下语句修改:

EXECUTE DBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER('ADDM', 'DBIO_EXPECTED', 4000);

上面的数值单位是微秒。

数据库 IO 是一个非常有意思的话题,本来想写一系列的东西。结果这篇写出来发现不伦不类。权作抛砖吧。

EOF