按理说,在正常情况下,hp主机开启了异步IO之后,主机的wio会有较大幅度的下降,在我们的系统中,wio一般会下降到10%以下。但是最近遇到的情况就非常奇怪,开启异步IO之后,观察wio却仍然很高,在30%~50%,业务忙时cpu idle在个位数。仿佛和没开wio一样。
检查的时候发现,相关参数都是配置正确的,主机和数据库的异步IO参数均已经配置好,通过fuser /dev/async也能看到有进程被放入到异步IO的队列中,但是队列中的进程数很少。比如800多个数据库进程,队列中大约只有200个左右。
由于判断不了是什么原因造成这样的问题,之前又有一个省遇到类似的问题,后来第二天什么参数都没调整,但是恰好需要更换主机内存,主机换了内存被重启之后,问题就解决了。于是对于该问题,申请了一个晚上试图重启主机,看问题能否修复。可以重启之后,问题依旧存在,重启之后异步IO无法启用,$ORACLE_HOME/rdbms/admin下很多trc文件,/dev/async中看不到任何队列。看来还是mlock的权限问题,手工setprivgrp之后,trc文件不再产生,但是/dev/async中仅很少队列,和白天业务高峰期看到的情况类似。
由于数据库主机的hp service guard双机架构,我们尝试切换到db02,系统反映就很正常,/dev/async中的进程队列马上出来,而且很多。这是怎么回事,两边的配置都是一样,难道是db01上的/etc/privgroup文件中含什么看不到的字符?尝试将db02上的文件rcp到db01,然后重启主机后,数据库在db01上启动。故障依旧。
在进一步的观察中发现,重启主机后,/dev/async都没有队列产生,只有手工setprivgrp之后才会产生队列,但是队列数较少。而在db02上,由于主机操作人员之前就执行了setprivgrp,且db02一直没有重启过,所以切换到db02就正常。而且,在db02上观察/dev/async的进程:
1 2 3 4 5 6 7 |
sc_db02#[/]fuser /dev/async /dev/async: 1808o 1788o 28498o 1159o 28500o 5340o 6596o 1514o 5307o 5328o 28547o 4828o 1571o 5334o 1708o 28558o 28486o 1810o 6026o 1806o 28492o 5033o 5320o 28494o 6032o 4840o 28502o 28482o 5330o 5312o 5336o 5038o 1308o 28490o 5310o 28480o 5316o 28556o 5040o 28560o 28478o 5322o 28545o 1562o 5318o 5280o 28496o 6582o 1578o 5332o 1555o 5314o 28484o 1232o 6600o 5282o 28552o 6586o 28554o 28488o 5338o 5324o 6590o 5326o 6576o 6038o 6050o 6044o 8092o 8077o sc_db02#[/]ps -ef |grep dbw oracle 28482 1 1 01:04:23 ? 0:00 ora_dbw1_scmisc oracle 28480 1 3 01:04:23 ? 0:00 ora_dbw0_scmisc |
我们看到数据库的dbwr的进程28480和28482是在 /dev/async进程队列里面的。
而之前的db01上:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SQL> !fuser /dev/async /dev/async: 23310o 14400o 23472o 26509o 29147o SQL> SQL> SQL> SQL> ! oracle@sc_db01:/oracle > ps -ef |grep ora_ oracle 8858 1 0 01:15:24 ? 0:00 ora_dbw0_scmisc oracle 8868 1 0 01:15:24 ? 0:00 ora_reco_scmisc oracle 8860 1 0 01:15:24 ? 0:00 ora_dbw1_scmisc oracle 8862 1 0 01:15:24 ? 0:00 ora_lgwr_scmisc |
我们在/dev/async中是没看到dbwr的进程的。
于是,我判断:
1 2 3 |
1、setprivgrp没有随机启动,mlock没有自动赋给dba组。因此启动后$ORACLE_HOME/rdbms/log中有大量trc文件。 2、手工setprivgrp的操作是在数据库启动之后,因此dbwr进程就没有进入/dev/async队列。dbwr没进入异步io的队列,所以异步io的效果看不到。 3、db02上正常不是因为2台机器配置文件的差异,是因为手工setprivgrp之后db02一直没重启,数据库mc切换到db02才正常。 |
于是在db01上手工setprivgrp之后,请主机工程师帮忙在db01上通过mc重启数据库。
真的印证了我的判断,dbwr进入了/dev/async异步io的队列,进程数大大增加,和数据库中的session数接近,$ORACLE_HOME/rdbms/log中没再产生trc文件。重启应用后,异步IO的队列数有800多个:
1 2 |
sc_db01#[/]fuser /dev/async /dev/async: 29397o 17677o 4526o 2502o 17414o 17362o 16865o 28011o 20676o 28885o 29988o 29311o 5159o 12835o 14548o 15244o 12759o 17366o 28891o 12176o 17669o 17340o 12139o 12172o 12160o 12168o 12145o 17380o 17406o 17388o 12178o 12141o 12166o 18614o 17374o 613o 15261o 18719o 20714o 27565o 18864o 12180o 17372o 14774o 17376o 1504o 17687o 20492o 17370o 17384o 16855o 12174o 17673o 17390o 10995o 29301o 19862o 28946o 18380o 20544o 17382o 18504o 12170o 18741o 20373o 20678o 29307o 18237o 18348o 18336o 1506o 17151o 16863o 12143o 18725o 18366o 20044o 18482o 17378o 18545o 18699o 18752o 18591o 18880o 18731o 18598o 18782o 18812o 18991o 18906o 19009o 18910o 18916o 19874o 29334o 23420o 19707o 19721o 19711o 19801o 27847o 19932o 19770o 19489o 27813o 19842o 19902o 20106o 20010o 19966o 20086o 20162o 20120o 20688o 20168o 20385o 20231o 20526o 20409o 20411o 20273o 20242o 20330o 20279o 20445o 20453o 20483o 20419o 20318o 20576o 20463o 20502o 20610o 20582o 20674o 20632o 20683o 20681o 20685o 20665o 20659o 20661o 20663o 20669o 20690o 20694o 20696o 20698o 20700o 20702o 20704o 20706o 20708o 20736o 20716o 20718o 20720o 20724o 20726o 20730o 20732o 20738o 20824o 20771o 20773o 20746o 20767o 20775o 20779o 20790o 20794o 20796o 20798o 20802o 20804o 20806o 20808o 29297o 20826o 20812o 29732o 20818o 20820o 20828o 20832o 20836o 20840o 3497o 20844o 20846o 20850o 20852o 20854o 21133o 29395o 21089o 21361o 20888o 21305o 21037o 21211o 21107o 23495o 29315o 21407o 22351o 21447o 23662o 19858o 21964o 23652o 27513o 27935o 23656o 23700o 23667o 23669o 23671o 23673o 23677o 23679o 23689o 23691o 23730o 23704o 23706o 23710o 23712o 23714o 23718o 12807o 23734o 23738o 23726o 23744o 23748o 23742o 23756o 23750o 23794o 23758o 23760o 23764o 23766o 23768o 23770o 23772o 23774o 23776o 23778o 23780o 23782o 23784o 23788o 23790o 23792o 23796o 23798o 23800o 9458o 23806o 23808o 23810o 23812o 23816o 23820o 23822o 23824o 23828o 23830o 23832o 23834o 23838o 12554o 28881o 852o 29752o 27190o 28887o 28121o 3980o 28071o 28893o 6447o 28889o 28895o 28897o 28899o 28901o 28903o 28905o 28907o 28909o 28911o 28913o 28915o 28917o 28919o 28922o 28927o 28929o 28931o 28933o 28935o 28937o 28939o 28941o 29201o 28952o 28954o 29293o 29236o 29336o 29419o 29409o 29413o 29328o 29332o 29750o 29411o 29429o 29407o 29351o 29400o 29330o 29415o 29405o 29417o 29421o 29423o 29490o 29427o 29431o 29433o 29435o 29437o 29439o 29441o 29443o 29445o 29447o 29449o 29451o 331o 29488o 29585o 29484o 29589o 29583o 29521o 29673o 29568o 29591o 29595o 29597o 29599o 29601o 29604o 29607o 29676o 29641o 29721o 29627o 29613o 29719o 29767o 29769o 29771o 29773o 29775o 29777o 29779o 29781o 29783o 29785o 29787o 29789o 29791o 29793o 29795o 29797o 29799o 29801o 29803o 29805o 29807o 29809o 29811o 29813o 29815o 29818o 29821o 29823o 29825o 29827o 29829o 29831o 29833o 29835o 29837o 29839o 29841o 29843o 29845o 29847o 29849o 29851o 29853o 29855o 29857o 29859o 29861o 29863o 29865o 29867o 29869o 29871o 29873o 29875o 29877o 29879o 29881o 29883o 29885o 29887o 29889o 29891o 29893o 29895o 29897o 29899o 29901o 29903o 29905o 29907o 29909o 29911o 29913o 29915o 29917o 29919o 29921o 29923o 29925o 29927o 29930o 29933o 29935o 29937o 29939o 29941o 29943o 29945o 29947o 29949o 29951o 29953o 29955o 29957o 29959o 29961o 29963o 29965o 29967o 29969o 191o 3467o 29973o 176o 121o 29977o 29979o 29981o 113o 167o 140o 101o 29987o 4234o 173o 181o 132o 148o 185o 163o 157o 195o 199o 209o 205o 227o 215o 237o 221o 1241o 375o 232o 553o 243o 249o 518o 355o 442o 257o 267o 278o 290o 549o 295o 462o 343o 545o 306o 467o 401o 319o 456o 389o 448o 476o 422o 472o 418o 494o 563o 430o 452o 484o 503o 522o 512o 539o 535o 531o 567o 557o 571o 575o 688o 585o 581o 589o 834o 594o 607o 603o 599o 651o 625o 674o 634o 646o 695o 658o 682o 667o 678o 805o 700o 713o 725o 706o 826o 844o 781o 734o 840o 752o 746o 848o 758o 797o 807o 767o 863o 813o 822o 830o 859o 867o 871o 881o 877o 897o 907o 885o 888o 893o 901o 911o 915o 919o 930o 926o 934o 950o 945o 940o 964o 976o 954o 958o 968o 980o 990o 972o 986o 997o 1001o 1011o 1007o 1015o 1019o 1051o 1037o 1033o 1047o 1043o 1055o 1065o 1061o 1069o 1073o 1087o 1083o 1079o 1091o 1113o 1135o 1101o 1097o 1105o 1109o 1123o 1125o 1117o 1165o 1131o 1151o 1145o 1141o 1161o 1149o 1157o 1169o 1179o 1175o 1183o 1187o 1197o 1193o 1203o 1207o 1211o 1215o 1225o 1221o 1231o 2732o 1235o 1257o 1252o 1245o 1270o 1289o 1263o 1323o 1281o 1276o 1293o 1319o 1298o 1303o 1313o 1309o 1348o 1334o 1328o 1418o 1338o 1344o 1358o 1354o 1382o 1364o 1378o 1368o 1374o 1392o 1388o 1404o 1397o 1425o 1460o 1410o 1438o 1444o 1448o 1456o 1464o 1475o 1471o 1485o 1481o 1495o 1491o 1500o 1507o 1527o 1521o 1511o 1546o 1532o 1569o 1539o 1555o 1583o 1565o 1579o 1575o 1620o 1594o 1669o 2698o 1905o 1634o 1731o 1767o 4052o 1772o 1715o 1690o 1723o 1913o 1917o 1812o 1921o 1863o 2015o 1894o 1965o 2039o 2102o 2043o 2069o 2053o 2049o 2110o 2150o 2134o 2162o 2166o 2212o 2172o 2190o 2186o 2196o 2240o 2230o 2394o 2278o 2356o 2328o 2368o 2553o 2362o 2412o 2448o 2471o 2511o 2525o 2812o 3104o 3096o 3068o 3086o 3116o 3319o 3212o 4425o 4500o 12224o 4606o 4468o 4069o 9187o 12756o 12592o 4071o 19864o 572o 6428o 3877o 5660o 29399o 3202o 9448o 16859o 25671o |
白天业务高峰观察wio情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
10:03:55 8 3 0 89 10:03:57 7 4 0 88 10:03:59 7 3 0 90 10:04:01 9 4 1 87 10:04:03 7 4 0 89 10:04:05 9 4 0 88 10:04:07 6 3 0 91 10:04:09 7 4 0 89 10:04:11 7 5 1 86 10:04:13 6 6 1 87 10:04:15 8 9 2 81 10:04:17 8 5 1 87 10:04:19 6 6 0 87 10:04:21 10 7 1 81 10:04:23 5 6 0 88 10:04:25 6 5 0 89 10:04:27 5 4 1 90 10:04:29 5 4 0 91 |
看到异步io已经明显生效,wio几乎在5%以下。
至于/etc/privgroup文件不能随机启动,需要手工setprivgrp的问题,后续交给SA组进一步研究。