【案例分享】每秒800M IO流量,交易出现缓慢情况

1.      问题描述:

客户反映,数据库服务器的IO量非常大,达到每秒800M,几乎将HBA的带宽打满,交易出现缓慢的情况。

2.      分析过程:

收集当前时段的OracleAWR报告,找到LoadProfile部分,如下图所示

QQ图片20170411094042.png

可以看到:

每秒的物理读PhysicalReads达到104,207个BLOCK,每个BLOCK的大小是8K

即每秒的IO量达到104207*8K=814M!

IO的流量太大了,几乎打满了HBA所支持的吞吐,影响到整体的性能是必然的!

根据上述知识点,我们知道,ORACLE采用内存换IO的策略,避免出现过多IO。

那么我们不妨猜一下,是否是因为buffer cache太小导致IO无法缓存呢?

进一步检查AWR报告中的”Cache Sizes”部分

如下图所示,buffercache大小仅为128M!而shared pool大小为15,232M.

而该服务器配置了60G的内存!

我们提到,buffercache可以设置到服务器内存的40%,即24G。

QQ图片20170411094144.png

通过查找AWR报告中的”Buffer Pool Advisory”,如下图所示,可以看到:

当buffer cache从128M设置到256M时,IO即物理读的个数将从3600万下降到1900万,就下降了一倍!

QQ图片20170411094213.png

3.      原因

难道是配置失误?不是的。实际上,客户通过一个memory_target参数设置了为ORACLE数据库分配总计40G的内存。这是一种常见的做法,即交给ORACLE来动态分配在SGA和PGA之间,在SGA内部各个组件的内存大小。由于内存动态调整算法的不完善,导致过多的内存分给了PGA而SGA不够,又由于应用程序绑定变量的使用不够理想,导致shared pool不断的膨胀,一步一步地,将buffer cache压缩到了只剩128M.

4.      解决方法

为buffer cache设定一个基准值20G后,IO高的问题得到解决。

参与0

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

黄远邦小y
技术总监中亦科技

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2017-04-11
  • 关注会员:0 人
  • 问题浏览:3624
  • X社区推广