通过addm分析io问题(r2笔记64天)
昨晚在做测试环境数据迁移的时候,遇到了io的问题,本来预计2,3个小时完成的数据导入工作最后竟然耗了7个多小时。在数据的导入中,使用了10个并行的session,每个session都启用的并行度为8,在表级,索引级都做了nologging设置,在insert的时候使用了append模式,结果本来数据的导入还是比较顺利的,突然在8点左右开始就一下子直线下降。 在使用top命令查看进程的使用情况时,留意到rman的一些进程正在运行。但是大晚上的哪找客户的人来确认这个,使用dd来测试io的性能,创建一个200M的文件,不到1秒钟,还是比较快的。 但是可以看到iowait很高。 这个问题造成的影响还是比较严重的,因为目前为止还没有完全确定问题的根源,如果是后台的一些进程在运行,影响到底有多少,还没有估量,但是可以明显的看到数据库是不给力的,undo的空间到后面的数据导入中不仅足够充裕,还不断释放一些空间,让人感觉很郁闷,但是又插不上什么手。 下午的时候,和客户的存储部门,unix部门等的人一起开会,大家都列除了昨晚的一些问题总之就是发现了问题,但是因为那个段知道的动作就是我们在做数据导入,还没法确定到底是不是他们的问题。所以大家虽然能够列出一些图表数据,说明问题但是还是没有能够明确的定位问题。 我拿出了数据库层面反应数据库繁忙程度的一个指标,redo的切换率,在周一做的一次数据迁移中,redo在一个小时甚至达到了200多次。redo日志是1个G左右的样子。
DBNAME TIME_STAMP
--------- --------------------
PRODB 2014-Aug-14 23:09:09
GROUP# THREAD# SEQUENCE# MEMBERS SIZE_MB ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
1 1 3389 2 1024 YES INACTIVE
2 1 3390 2 1024 YES INACTIVE
3 1 3391 2 1024 NO CURRENT
4 1 3388 2 1024 YES INACTIVE
Redo Switch times per hour PRODB 2014-Aug-14 23:09:09
MON DA 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
--- -- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
07 31 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 5 1 0 4 1 0 0 2
08 01 35 51 19 0 0 1 0 0 1 0 1 4 2 1 2 9 5 4 3 4 3 2 2 2
08 02 1 1 1 8 0 1 0 1 1 1 1 11 0 0 1 0 0 1 0 0 1 0 0 1
08 03 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 2 2 3 1 0 0 1
08 04 0 0 1 0 0 1 0 0 1 0 0 1 1 1 3 3 2 3 1 1 1 0 0 1
08 05 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1
08 06 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1
08 07 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 4 6 1 0 0 1
08 08 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 14 0 7 2 0 3 0 1 1
08 09 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1
08 10 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1
08 11 0 0 1 0 0 1 0 0 1 0 109 207 34 0 1 0 0 1 0 0 1 0 0 1
08 12 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1
08 13 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 24 123 65 25 22 22 19
08 14 22 29 30 25 21 16 0 0 1 27 42 1 0 0 2 22 2 5 5 5 4 5 3 0
但是在昨晚的时候,简直是惨淡。到后面自己都不忍看这个速度了,眯了好一会,还在慢慢的做数据导入。 我提到了rman的影响,但是似乎客户那边还不是很确定是这个问题影响的。因为据他们说之前一直没有碰到过io的问题,上一次做数据导入的时候还是在白天,更不能说明了。 在大家都有依据,但是没有方向的,听听oracle怎么说,得到一个详尽的addm报告,然后就可以看到里面清晰的分析了io的一些问题,有很大一部分是由于rman导致的。 亮点是最后两处。
Finding 8: I/O Throughput
Impact is .8 active sessions, 2.23% of total activity.
------------------------------------------------------
The throughput of the I/O subsystem was significantly lower than expected.
Recommendation 1: Host Configuration
Estimated benefit is .8 active sessions, 2.23% of total activity.
-----------------------------------------------------------------
Action
Consider increasing the throughput of the I/O subsystem. Oracle's
recommended solution is to stripe all data files using the SAME
methodology. You might also need to increase the number of disks for
better performance.
Rationale
During the analysis period, the average data files' I/O throughput was
61 M per second for reads and 42 M per second for writes. The average
response time for single block reads was 1.3 milliseconds.
Recommendation 2: Host Configuration
Estimated benefit is .27 active sessions, .76% of total activity.
-----------------------------------------------------------------
Action
Consider slowing down RMAN or Data Pump activity, or scheduling these
jobs when user activity is lower.
Rationale
The I/O throughput on data and temp files was divided as follows: 34% by
RMAN, 0% by Data Pump, 0% by Recovery and 65% by all other activity.
Symptoms That Led to the Finding:
---------------------------------
Wait class "User I/O" was consuming significant database time.
Impact is 12.58 active sessions, 35% of total activity.
有了这些分析,也有了一些说服力,他们开始查找问题发生的那个时间段的一些可能影响,结果网路组的人发现从8点开始网络带宽消耗异常的高。但是我们做数据导入是不依赖网络的。 然后他们继续排查,备份组发现设置了crontab,从8点开始会做备份到磁带库中。 问题一下子有了一种峰回路转的感觉。最后一定位,在结合一些相关的数据来做分析,道理就说得通了。 在有些场合中,官方的报告要好于一些主观的数据分析。
- C++中const小结
- 很多人不知道还有这个——搜索框组件SearchView
- 免费主题暗藏后门,波及WordPress等知名CMS系统
- 揭秘:针对PoS机的恶意软件工具箱
- 屏幕宽高不够,滚动视图ScrollView来凑
- 结合中间人攻击,Pidgin鸡肋漏洞变废为宝
- 日历视图CalendarView和定时器Chronometer
- 不用Linux也可以的强大文本处理方法
- 虚函数与虚继承寻踪
- AnalogClock、DigitalClock和TextClock时钟组件
- Sqlmap联合Nginx实现“地毯式”检测网站SQL注入漏洞
- 两分钟掌握数值选择器NumberPicker
- 对象的传值与返回
- 微信小程序+和风天气完成天气预报
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 设计模式实战-解释器模式,今天给你解疑答惑
- 时间不再浪费评估上!ThingJS 3D可视化开发不用愁
- 设计模式实战-命令模式
- 设计模式实战-责任链模式,超级实用
- 设计模式实战-代理模式,来看看主公如何托孤
- 设计模式实战-门面模式
- 设计模式实战-装饰器模式,教你怎么为代码添砖加瓦
- 设计模式实战-组合模式
- Hive如何实现自增序列
- 设计模式实战-过滤器模式,你总是这么挑三拣四
- 时间选择器组件之关于table走过的弯路
- 设计模式实战-观察者模式,你知道发布订阅怎么实现吗
- 设计模式实战-桥接模式,想做月老吗?
- 设计模式实战-原型模式,我们就来依法炮制
- 设计模式实战-建造者模式,做任何事情都需要步步为营