一个简单的参数调整数据库整体性能提升n倍

事件背景

某驻场客户一单机环境12.2.0.1数据库要进行补丁升级。登录服务器做变更前准备。登录服务器发现服务器异常卡顿,查看top发现负载并不是很高。抓取awr报告发现数据库top10等待延迟在几千毫秒,与客户沟通了解此类事件一直存在,磁盘更换成全闪盘此类事件也没有明显改观,应用没有反馈性能问题,因此一直保持原状。Top10截图如下:

图片

分析处理过程

当看到此类事件,首先考虑的是磁盘、网络等是否正常,与客户进行沟通了解排出此类问题,那么就需要从其他角度来思考这个问题,接着进行下一步分析。从log file switch (checkpoint incomplete) 等待事件可以了解到,在日志进行切换的时候,buffer cache中的脏块还来不及写入到磁盘中,checkpoint未完成。只能等待buffer cache中的脏数据写入到磁盘才能完成日志切换。了解到这里我们就需要进一步判断是什么原因导致的dbwr写延迟这么高。从下图不同功能模块的IO负载情况,我们看到DBWR延迟并不是很高。好像跟我们的分析有点对不上。

图片

在awr报告中接着往下搜有关dbwr进程的信息,我们发现如下内容。到这时好像是发现了问题的具体,发现这里异步IO占比活动回话有点高。

图片为了进一步判断是否是异步IO问题,我们查看awr报告中的后台等待事件来进一步判断问题。这里我发现等待事件在一个小时内的awr报告中接近5000s,延迟567.从这里我判断是该系统异步IO功能没有打开。通过V$IOSTAT_FILE视图以及SHOW PARAMETER filesystem_options来进一步验证了我的判断。

图片

问题处理以及分析

通过上述的分析,定位到数据库的异步IO未开启,导致系统性能问题,这种解决方式很简单,alter system set filesystem_options=setall scopt=spfile; setall参数相当于打开直接Direct I/O + Async I/O。然后重启实例就可以打开单实例数据库的异步IO与直接路径 I/O。设置这个参数之后,就会直接跨过文件系统高速缓存直接从磁盘中读取数据。这里需要注意的是在RAC环境下因为我们使用的是ASM磁盘,是不需要考虑这个异步IO的问题。数据库更新补丁后导致DBMS_AWR_REPORT_LAYOUT和DBMS_SWRF_REPORT_INTERNAL失效导致awr报告无法获取,因此进行对比,下面两张截图是我通过SQL手工抓取的同一时间点的top10,从下面两张截图看到log file switch (checkpoint incomplete)等待事件已经不在top10。当然该数据库还存在SQL性能方面的问题。需要进一步进行调优,那也是后话了。

调优前:

图片调优后:

图片

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)

发表评论

登录后才能评论
网站客服
网站客服
申请收录 侵权处理
分享本页
返回顶部