VXFS启用异步IO导致的严重问题

今天在做数据迁移的时候,碰到了一个严重的问题,数据加载完全hang住了,最后无奈回退了。

系统使用的vxfs文件系统,在生产升级前一个月的时候,做过一次小规模的数据迁移,当时查看awr,ash,最后根据addm的推荐得出加载速度比较慢主要是由于异步IO导致的,而且当时生产库确实没有启用异步io, filesystemio_option的设置为none,在经过确认之后,在半个月前的一此例行维护中,由客户做了这个配置的修改。修改后发现iowait明显增加了,当时也没再多跟多的分析因为没有比较明显的性能问题,当时认为iowait高可能和启用了异步io后处理的效率更高有关,反而认为这是一种改进。

在升级的前2天的时候,做数据迁移前的检查工作的时候就做了一次简单的io分析。其中使用了dd来做了一个小测试。

发现io的速度很差,相比测试环境有很大的差别。

time dd if=/dev/zero bs=1M count=204 of=direct_200M

213909504 bytes (214 MB) copied, 5.27558 seconds, 40MB/s40.5 MB/s 

real    0m5.284s 
user    0m0.003s 
sys     0m0.031s 

以下是当时做的sar的记录。
07:00:01 AM       CPU     %user     %nice   %system   %iowait    %steal     %idle 
09:20:01 AM       all     10.48      0.11      1.76      2.89      0.00     84.76 
09:30:01 AM       all     10.59      0.10      1.81      2.45      0.00     85.04 
09:40:01 AM       all      7.91      0.18      1.61      3.20      0.00     87.10 
09:50:01 AM       all      7.26      0.07      1.66      3.23      0.00     87.78 
10:00:01 AM       all      7.54      0.13      1.53      3.67      0.00     87.13 
10:10:01 AM       all      7.78      0.09      1.76      3.92      0.00     86.45 
10:20:01 AM       all      8.24      0.09      2.27      3.98      0.00     85.43 
10:30:01 AM       all      7.38      0.08      1.79      5.18      0.00     85.57 
10:40:01 AM       all      8.14      0.16      2.01      6.36      0.00     83.33 
10:50:02 AM       all      7.05      0.10      1.74      4.83      0.00     86.29 
11:00:01 AM       all      7.61      0.09      2.04      5.43      0.00     84.83 
11:10:01 AM       all      7.22      0.09      1.70      6.22      0.00     84.76 
11:20:01 AM       all      6.71      0.12      2.10      7.35      0.00     83.72 
11:30:01 AM       all      9.36      0.10      2.87      5.03      0.00     82.63 
11:40:01 AM       all      7.26      0.25      1.76      6.08      0.00     84.65 
11:50:01 AM       all      7.17      0.12      2.40      5.24      0.00     85.07 
12:00:01 PM       all      6.30      0.10      2.64      5.27      0.00     85.69 
Average:          all     10.36      0.26      1.14      3.40      0.00     84.83 
一个月前的数据情况
Production statistics 20-June-14:
 
204+0 records in
204+0 records out
213909504 bytes (214 MB) copied, 1.44182 seconds, 148 MB/s
real    0m1.445s
user    0m0.001s
sys     0m0.039s 

测试环境
TEST machine statistics:
 
204+0 records in 
204+0 records out 
213909504 bytes (214 MB) copied, 0.550607 seconds, 388 MB/s 
real    0m0.595s 
user    0m0.001s 
sys     0m0.072s 

另外一个数据迁移服务器
TEST2 machine statistics:
 
213909504 bytes (214 MB) copied, 0.320128 seconds, 668 MB/s 

real    0m0.43s 
user    0m0.01s 
sys     0m0.42s 

结果这个问题在升级前还是没有解决,在数据迁移的时候就最终回退了。

在做数据的merge的时候,强制启用了parallel,但是通过top命令看到cpu的使用率可怜的低。

使用dd简单测试,竟然最低达到了15M/s左右。

以下是当时查看top的结果。

  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

31130 root 10 -5 0 0 0 S 20.5 0.0 1352:56 [vxfs_thread]

17285 oraccbs1 16 0 18.3g 114m 35m S 12.9 0.0 4:56.41 ora_p026_PRODB

18568 oraccbs1 16 0 18.3g 50m 22m D 7.3 0.0 2:40.81 ora_p056_PRODB

18580 oraccbs1 16 0 18.2g 42m 21m D 4.6 0.0 2:24.26 ora_p062_PRODB

 7846 oraccbs1 16 0 18.5g 315m 47m S 4.0 0.1 0:12.23 oraclePRODB  (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

18576 oraccbs1 16 0 18.2g 42m 21m D 3.6 0.0 2:25.63 ora_p060_PRODB

11334 tivoliam 15 0 820m 89m 14m S 3.3 0.0 341:18.97 /opt/app/IBM/ITM/lx8266/lz/bin/klzagent

18570 oraccbs1 16 0 18.2g 42m 21m D 3.3 0.0 2:25.69 ora_p057_PRODB

18578 oraccbs1 16 0 18.2g 42m 21m D 3.0 0.0 2:23.12 ora_p061_PRODB

稍后就看到parallel启用的很艰难。过一会才能看到几个相关的进程。

  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

31130 root 10 -5 0 0 0 S 5.6 0.0 1371:05 [vxfs_thread]

11334 tivoliam 15 0 820m 89m 14m S 3.3 0.0 342:47.68 /opt/app/IBM/ITM/lx826

 1388 root 18 0 59116 784 568 S 1.6 0.0 0:13.80 sadc 5 1001 -z

 4661 oraccbs1 15 0 18.2g 24m 4272 S 1.3 0.0 23:40.35 ora_dbw2_PRODB

27545 oraccbs1 16 0 13428 1844 816 R 1.0 0.0 0:02.35 top -c 

 2833 root 16 0 127m 71m 3520 S 0.7 0.0 81:28.54 vxconfigd -x syslog

 4653 oraccbs1 18 0 18.3g 130m 14m S 0.7 0.0 221:18.30 ora_dia0_PRODB

 4663 oraccbs1 15 0 18.2g 24m 3464 S 0.7 0.0 23:48.27 ora_dbw3_PRODB 

 2598 root 15 0 0 0 0 S 0.3 0.0 5:03.01 [dmp_daemon]

 4878 oraccbs1 15 0 18.2g 7140 4396 S 0.3 0.0 67:17.54 ora_mmnl_PRODB 

 5016 root 10 -5 0 0 0 S 0.3 0.0 0:14.14 [kjournald]

 7334 root 18 0 280m 21m 7824 S 0.3 0.0 26:27.83 /opt/VRTSob/bin/vxsvc

19215 root 15 0 37872 9464 2264 S 0.3 0.0 69:47.85 /opt/VRTSvcs/bin/Mount

最后,公司的unix team的一个同事的判断是vxfs的bug,需要打一个补丁。活还得干,看看今晚的进展了。

The first two are major

VXFS version

 

We had IO performance issues with the very same version of VXFS installed in TRUE 6.0.100.000

Eventually we found we were hitting the following bug which is fixed with version 6.0.3 https://sort.symantec.com/patch/detail/8260

this happened at that site – even though it was a fresh install and NOT and upgrade as indicated in the below.

We did see the very same issues of performance degrading when removing the direct mount option

 

Hence we recommend installing this patch

 

SYMPTOM:

Performance degradation is seen after upgrade from SF 5.1SP1RP3 to SF 6.0.1 on

Linux

 

DESCRIPTION:

The degradation in performance is seen because the I/O are not unplugged before

getting delivered to lower layers in the IO path. These I/Os are unplugged by

OS at a default time which 3 milli seconds, which resulted in an additional

overhead in completion of I/Os.

 

RESOLUTION:

Code Changes made to explicitly unplug the I/Os before sending then to the lower

layer.

 

* 3254132 (Tracking ID: 3186971)

 

Power management

Servers should have power management savings disabled set to high performance

Make sure C-state is disabled set to C0

This is executed at the BIOS level and requires a reboot.

时间: 2024-08-02 23:58:06

VXFS启用异步IO导致的严重问题的相关文章

ORACLE数据库异步IO介绍

异步IO概念     Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,当然我们在2.4 版本内核的补丁中也可以找到它.AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成.稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果.     Linux IO模型(I/O models)分同步IO模型(synchronous models)和异步IO模型(asynchr

【故障处理】因AIX异步IO没有开启导致SQL*Plus不可用

今天处理了一起因异步IO没有开启导致Oracle的SQL*Plus不可用的故障.记录在此,供参考. 1.故障场景 情况是这样的,系统是使用IBM的HACMP做的两节点HA,在第一个节点部署完Oracle(11.1.0.6)并在挂载的存储上创建完数据库后,使用tar方法将第一个节点上的Oracle软件解tar到第二个节点上完成软件安装.但当在第二节点上运行SQL*Plus时抛出如下的错误:$ sqlplus / as sysdbaexec(): 0509-036 Cannot load progr

如何在Hp的主机打开异步IO

异步 一.说说异步IO(Aio)   在Hp-ux中,当采用同步IO的方式时,这就意味着在下一次写IO进行之前,前一次IO必须返回"成功写完成"的信息,可以看到同步IO方式在IO负荷比较大的系统存在着性能的瓶颈.而采用异步IO方式时,在写请求发出之后操作系统会立即反回给应用一个写成功的信息,余下的事就由操作系统完成了.在Hp-ux中使用Oracle.Sybase这些数据库时,为减少IO的瓶颈.提高库的性能,建议打开异步IO,Hp在这方面相对Aix来说相对麻烦一些. 二.Hp-ux方面打

《Netty 权威指南》—— 伪异步IO编程

声明:本文是<Netty 权威指南>的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文. 为了解决同步阻塞IO面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,其中M可以远远大于N,通过线程池可以灵活的调配线程资源,设置线程的最大值,防止由于海量并发接入导致线程耗尽. 下面,我们结合连接模型图和源码,对伪异步IO进行分析,看它是否能够解决同步阻塞IO面临的问题.

arm驱动linux异步通知与异步IO【转】

  转自:http://blog.csdn.net/chinazhangzhong123/article/details/51638793 <[ arm驱动] linux异步通知与 异步IO>涉及内核驱动函数二个,内核结构体一个,分析了内核驱动函数二个:可参考的相关应用程序模板或内核驱动模板二个,可参考的相关应用程序模板或内核驱动三个 描述:设备文件IO访问:阻塞与非阻塞io访问,poll函数提供较好的解决设备访问的机制,但是如果有了异步通知整套机制就更加完整了 一.阻塞 I/O,非阻塞IO,

linux异步IO浅析

知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上.预先知道这些数据的位置,所以预先发起异步IO读请求.等到真正需要用到这些数据的时候,再等待异步IO完成.使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情). 假此机会,也顺便研究了一下linux下的异步IO的实现. linux下主要有两套异步IO,一套是由glibc实现的(以下称之为glibc版本).一套是由linux内核实现,并由l

Python通过select实现异步IO的方法

  本文实例讲述了Python通过select实现异步IO的方法.分享给大家供大家参考.具体如下: 在Python中使用select与poll比起在C中使用简单得多.select函数的参数是3个列表,包含整数文件描述符,或者带有可返回文件描述符的fileno()方法对象.第一个参数是需要等待输入的对象,第二个指定等待输出的对象,第三个参数指定异常情况的对象.第四个参数则为设置超时时间,是一个浮点数.指定以秒为单位的超时值.select函数将会返回一组文件描述符,包括输入,输出以及异常. 在lin

Python通过poll实现异步IO的方法

  本文实例讲述了Python通过poll实现异步IO的方法.分享给大家供大家参考.具体分析如下: 在使用poll()后返回轮询对象,该对象支持以下方法: pollObj.register(fd,[,eventmask])第一个参数是注册新的文件描述符fd,fd要么是一个整数文件描述符,要么可以带有一个获取文件描述符的fileno()方法的对象.eventmask是一些按位或标记,这些标记指示要处理的事件. POLLIN: 用于读取数据 POLLPRI: 用于读取紧急数据 POLLOUT: 准备

.NET 4.5 异步IO 相关实例_实用技巧

在C/S架构中,不管是传统的winform还是wpf都可能会遇到进行异步操作文件的时候.文件小还好说,直接写操作代码. 如果是大文件很多时候做成异步的操作.在界面上显示一个进度条什么的,后台使用一个backgroundworker来做.在这里告诉大家在.NET Framework4.5中支持异步IO的操作.大大简化之前些的异步方法代码. 使用backgroundworker代码 复制代码 代码如下: View Code private void Button_Click_3(object sen