超实用分享--如何进行AIX磁盘性能调优
Posted twt企业IT社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超实用分享--如何进行AIX磁盘性能调优相关的知识,希望对你有一定的参考价值。
在我们日常所能见到的AIX系统中,大部分都是作为企业核心应用的数据库系统运行平台而存在。数据库服务器的性能,通常是通过考量应用系统每秒事务的吞吐量和应用响应时间两大指标来衡量;而吞吐量和响应时间主要取决于I/O子系统的性能,因此我们将在后面一起共同探讨AIX系统中影响I/O性能相关的参数设置。
在进行磁盘性能调优前,我们有必要了解应用程序整个事务中,哪些因素会对性能产生影响。作为传统性能调整的3大关注点:CPU、内存、I/O,我们通常都会将目光关注在I/O子系统上。由于CPU频率和内存带宽的不断提高,而磁盘的传输性能仍停滞不前,因此对于任何应用系统来说,花费在磁盘上的数据读、写时间的确是整个环节中最慢的一环。以下是我们经常听到的,关于对I/O子系统性能抱怨的事件:
为什么共享磁盘繁忙程度都是90%以上,传输的数据却非常少?
磁盘传输数据量很小,为什么WIO会很高?
系统和存储的硬件配置都很高,为什么业务处理能力没有大的改变?
为解决诸如此类的问题,我们需要深入了解AIX系统中磁盘I/O子系统的架构。
AIX系统中,通常将磁盘分为三种形式:内置磁盘、外置磁盘、共享磁盘。在数据库系统中,通常都是使用外接的共享磁盘作为存放数据的磁盘。共享磁盘的连接方式也有多种,在本文中,我们将主要讨论通过SAN连接的共享存储。(同时,我们假设SAN网络不存在传输瓶颈)
在讨论磁盘I/O优化方法之前,让我们先了解一下应用系统在AIX中是如何与磁盘打交道的。下图清晰展示了应用程序 I/O与逻辑磁盘及物理 I/O 组件之间的关系。
在AIX系统中,应用程序可以通过文件系统或裸设备与后端磁盘进行I/O交互。应用程序I/O通过文件系统与后端磁盘打交道,都是通过VMM层进行,因此文件系统的调优,大部分都与VMM层相关。为获取更好的I/O性能,很多数据库系统使用裸设备方式进行数据管理。自AIX5.2之后,文件系统引入了DIO/CIO模式,可获得与裸设备相当的性能,但大大减少了对CPU的资源消耗,降低CPU使用率。磁盘I/O优化的原则是应用层尽量减少密集型小I/O操作、减少数据热点区域、加快I/O处理速度、提高I/O响应时间,同时尽可能的将I/O分布到更多的磁盘上,以达到均衡的效果。
由于数据分布出现热点后调整的成本很高,因此启动阶段需要对未来数据的增长有一定的预估,同时结合系统层良好的磁盘分布规划,可以最大程度的降低将来出现磁盘热点或磁盘争用的概率。以下是一些通用的规划建议:
对应用程序产生的数据类型进行分类(随机or顺序、读写比例、比重等),数据、索引、日志等不同类型的数据建议尽量分开,避免底层数据访问干扰;
根据数据分类结果,评估需要提供的磁盘RAID类型、数目及相应性能指标(RAID10 or RAID5,IOPS/LUN);
RAID10适合于随机I/O,RAID5适合顺序I/O,尽量避免产生混合I/O;
尽量使数据存放在连续的磁盘区域上;
系统层可采用条带化技术提高I/O访问并发能力,但要避免条带磁盘成员来自同一RAID Group;
条带宽度和条带大小要根据应用特性(对于Oracle数据库,每次I/O大小最好等于db_block_size * db_file_multiblock_read_count)及存储特性进行设置,条带大小同时也要考虑卷组的LTG大小(AIX中,大块I/O通常以LTG大小为基本传输单元),高端存储通常都针对顺序读I/O有Prefetch机制,可相应提高数据的读命中率。
在AIX系统中,我们有很多命令可以用来判断I/O是否存在瓶颈。首先,可以使用ps、iostat、vmstat、topas、vmo、sar、svmon、lvmstat等命令进行初步判断,主要看磁盘的%wio、%tm_act、tps、avgserv、pending i/o等结果。其次,可以通过nmon、filemon、tprof等工具抓取一段时间内的性能数据,做出更详细的判断。重要的是,我们应该在系统上线稳定期间,对应用的性能结果做全局统计,建立一个性能基线,为后面的性能瓶颈判断打下良好的基础。以下是一个具体的操作示例:
1.当前端应用抱怨后端磁盘I/O性能时,我们可以通过topas、nmon、iostat、vmstat命令先查看系统中哪些磁盘繁忙程度很高(%tm_act不高于70%),系统的%wio是否很高(不高于30%),是否有很多pending i/o,磁盘的响应时间是否过长?(某些时候,高的%wio不一定意味着磁盘出现性能瓶颈,低的%wio也不一定说明磁盘没有性能瓶颈,需要结合其他指标进行综合判断)
#vmstat -v
463 pending disk I/Os blocked with no pbuf (当出现pbuf缺失时,可增加每个磁盘的pv_min_pbuf参数以提高每个磁盘的并发I/O能力)
0 paging space I/Os blocked with no psbuf (PagingSpace)
295458 filesystem I/Os blocked with no fsbuf (JFS文件系统)
0 client filesystem I/Os blocked with no fsbuf (NFS文件系统)
222556 external pager filesystem I/Os blocked with no fsbuf (JFS2文件系统)
#lvmo -v sharevgname -a
vgname = sharevgname
pv_pbuf_count = 512
total_vg_pbufs = 1536
max_vg_pbuf_count = 65536
pervg_blocked_io_count = 16384 (如果此项数据不断增加,考虑调整pbuf值)
pv_min_pbuf = 512
global_blocked_io_count = 19920
2.初步判断磁盘I/O有性能瓶颈后,使用filemon、nmon、lvmstat命令进行进一步判断。Filemon命令主要跟踪热点lv,lvmstat可实时查看当前热点lv的读写情况。通过filemon获取的详细信息,我们通常可以找到热点lv,为下一步性能调整提供依据。migratelp、migratepv命令可以将热点数据迁移到其他磁盘上。
3.性能调整参数建议
对于文件系统,建议调整minperm、maxperm、lru_file_repage、strict_maxperm、j2_nBufferPerPagerDevice、numfsbufs参数。每次只调整一个参数,逐步观察效果。
对于裸设备,建议调整lvm_bufcnt、hd_pbuf_cnt参数,同时合理的设置条带宽度、条带大小;
对于优化后性能的比较,要在基于初始建立的性能基准之上进行。同时,不要期望更改一、两个参数能达到性能大幅提升的效果。性能调优是一个长期的过程,并且要结合应用特性进行调整,才能达到合理的效果。
本文关键词:IT 运维 IT架构
以上是关于超实用分享--如何进行AIX磁盘性能调优的主要内容,如果未能解决你的问题,请参考以下文章