来自Oracle资深技术专家李先平的经典案例分析:数据库在压力测试中表现出性能低下,无法利用到所有的CPU,数据库内部出现各种争用。
某客户核心的数据库在进行压力测试的过程中,发现应用性能表现不佳,业务的TPS不能达到预期,稳定性也较差。
经过Oracle数据库在压力测试期间,latch较多,这些latch都是消耗cpu,但cpu使用率一直较低。数据库主机操作系统监控,主机总体cpu利用率也很低,user的利用率占10﹪左右,但Kern的利用率也占10﹪左右,总体利用率在20﹪左右。进一步分析主机的CPU使用情况:目前是颗4核的cpu,数据库中可以使用的逻辑cpu是,主机监控发现,cpu都是0,4,8,12…….队列的有user使用,其余编号的cpu没有user使用,只有少量的kern使用。
测试期间,数据库的SQL*Netmessage类等待事件也较多,在压力测试期间,该类等待事件出现较多,应用程序的传输数据量和效率会影响该类等待事件,可能也需要进一步检查网络情况,包括网卡状态,异常信息等。
测试期间观测到的等待事件
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
63latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latchfree
latch:cachebufferschains
latch:gesresourcehashlist
latch:gesresourcehashlist
latch:gesresourcehashlist
latch:gesresourcehashlist
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
librarycache:mutexX
8librarycache:mutexX
主机监控信息
主机cpu消耗不高,但相对kern消耗较高:
主机cpu消耗低,但runqueen队列较多:
进一步细分,发现cpu以4为倍数队列,只有0,4,8….等cpu才有usr:
根据观测,发现数据库没有利用到所有的cpu。
为了进一步证明数据库的问题,我们利用Oracle测试软件otest,进行一次全核心CPU测试。
理论上,otest会从数据库中,充分利用所有的cpucore,在测试开始后,主机上应该观测到cpu利用率接近%。
。。。
但是,测试结果和之前类似,仍然无法利用到所有的cpu。
问题处理分析
主机cpukern消耗大于user,是cpu调度问题。经过truss数据库调用发现“/usr/share/lib/zoneinfo//Etc/GMT-8”这个文件调用很高,统计该文件在压力测试运行时,实时read数量在以上,truss进程,selectsysdatefromdual;显示取一次sysdate,read这个文件2~4次。
kread(21,"\0\r\0\\0\0\0\0\E"..,)(sleeping...)
kread(21,"\0?\0\\0\0\0\0\^"..,)=63
statx("/usr/share/lib/zoneinfo//Etc/GMT-8",0x0FFFFFFFFFFEFC60,,0)=0
thread_post()=0
kwrite(21,"\0R\0\\0\0\0\0\0\v05"..,82)=82
kread(21,"\0砛0\\0\0\0\0\i"..,)=
statx("/usr/share/lib/zoneinfo//Etc/GMT-8",0x0FFFFFFFFFFF6C30,,0)=0
kwrite(21,"\0闬0\\0\0\0\0\"..,)=
kread(21,"\0\r\0\\0\0\0\0\E"..,)=13
kwrite(21,"\\0\\0\0\0\0\0\t01"..,16)=16
kread(21,"\0
\0\\0\0\0\0\^"..,)=64statx("/usr/share/lib/zoneinfo//Etc/GMT-8",0x0FFFFFFFFFFEFC60,,0)=0
statx("/usr/share/lib/zoneinfo//Etc/GMT-8",0x0FFFFFFFFFFEF,,0)=0
解决方案
在目前的7-03-07这个版本,AIX系统工程师给出了优化方案,调整了相关的TZ,系统运行正常。
操作系统:
yyfcrdb1:/etcdate
WedOct:38:59GMT
yyfcrdb1:/etcecho$TZ
GMT-8
Grid用户:
xxxx1:/grid/app/12.1.0/grid/crs/installmores_crsconfig_xxxxx1_env.txt
TZ=GMT-8--调整
NLS_LANG=AMERICAN_AMERICA.WE8ISOP1
调整完成后,压力测试表现良好,TPS测试可以达到。
关键字:AIXPOWERORACLECPU利用率
专家简介:李先平,甲骨文高级服务部核心技术专家,数据库系统架构师。五年行业软件开发经验,15年数据库系统设计,构架,开发,运维经验。实际操作电信,移动,电力,银行,税务等多行业大型数据库系统的设计选型,配置,迁移,升级等各类工作。十余年数据库一线技术支持,担任过多个大型数据库项目的项目经理,拥有丰富的项目管理和技术团队建设,实施经验。
白癜风吃什么药北京去哪个医院看白癜风比较好