Elapsed:60.73 (mins) DBTime: 1,459.39 (mins) --DB TIME还是挺高的 Cache Sizes -------------------- BufferCache:61,440M 61,440M Std Block Size: 8K SharedPoolSize: 4,096M 4,096M Log Buffer: 96,128K LoadProfile PerSecond Per Transaction ---------- ----------- --------- Redosize: 37,803,799.36 15,612,039.36 Logicalreads: 218,083.70 90,063.20 Blockchanges: 154,377.24 63,754.00 Physicalreads: 2,832.10 1,169.59 Physicalwrites: 10,388.01 4,289.99 Usercalls: 1,781.62 735.77 Parses: 26.39 10.90 Hard parses: 0.68 0.28 Sorts: 7.01 2.89 Logons: 0.50 0.21 Executes: 36.30 14.99 Transactions: 2.42 %Blocks changed per Read: 70.79 Recursive Call %: 15.74 Rollback per transaction %: 0.05 Rows per Sort: ######## Instance Efficiency Percentages (Target 100%) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Buffer Nowait %: 100.00 Redo NoWait %: 99.99 Buffer Hit %: 99.24 In-memory Sort %: 99.91 Library Hit %: 98.01 Soft Parse %: 97.41 Executeto Parse %: 27.30 Latch Hit %: 99.82 Parse CPU to Parse %: 1.69 %Non-Parse CPU: 99.98 Top 5 Timed Events db file scattered read 364,722 31,340 86 35.8 User I/O db file sequential read 250,654 15,419 62 17.6 User I/O CPUtime 12,738 14.5 db file parallel write 158,850 9,728 61 11.1 System I/O direct path read 161,876 8,024 50 9.2 User I/O |
| APE:/ # sar -d 3 2hdisk0 0 0.0 0 0 0.0 0.0hdisk2 3 0.0 13 1067 0.0 10.8hdisk3 2 0.0 11 1057 0.0 8.9hdisk44 79 0.0 107 10475 4.9 7.5hdisk43 98 0.1 188 14820 12.1 5.1hdisk39 99 0.2 150 5531 41.9 6.6hdisk38 23 0.4 288 2921 43.0 0.8hdisk40 99 0.6 336 11877 52.6 3.0hdisk42 99 0.2 201 13383 29.0 5.0hdisk41 60 0.2 222 8487 28.9 2.7hdisk47 0 0.0 9 202 1.6 0.5Average hdisk1 0 0.0 0 0 0.0 0.0hdisk0 0 0.0 0 0 0.0 0.0hdisk2 3 0.0 13 1235 0.0 11.2hdisk3 3 0.0 14 1234 0.0 9.2cd0 0 0.0 0 0 0.0 0.0hdisk44 64 0.0 96 7285 7.5 6.8hdisk43 81 0.1 163 11074 13.6 4.9hdisk39 99 0.2 149 7060 41.3 6.7hdisk38 26 0.6 295 3001 64.8 0.9hdisk40 99 0.5 273 11536 56.8 3.8hdisk42 99 0.5 273 13690 52.6 3.9hdisk41 60 0.3 234 9110 37.1 2.6hdisk47 0 0.0 10 175 1.2 0.5hdisk45 0 0.0 0 21 0.0 0.4 |
从上述指标上看,IOPS和吞吐量都不算太高,但是平均响应时间(avwait+avserv)确实很高,达到几十毫秒。这和AWR报告看到的数据是吻合的。找存储工程师问了问,他认为存储没问题,负载很轻,从存储监控上看到的响应时间也很正常,在几个毫秒。
这恐怕是DBA经常遇到的问题了,到底是存储工程师在推诿呢还是实际情况就是这样的,存储没问题,但是OS层面表现出慢呢?
对于sar的数据,很多DBA总是先去看busy%这个指标,一看很多盘都已经是99% busy了,那可不得了了,存储出现瓶颈了。实际上对于现在的系统而言,busy%这个指标的可参考性并不大,后面的指标更能看出问题。Avque指的是平均队列的长度,有多少IO在队列中等待。再后面一列是IOPS,再后面是吞吐量,最后两列一列是平均等待时间,也就是在队列中等待IO的时间,和平均服务时间,也就是IO请求发出后,从后端返回的时间。
我们通过这些指标实际上是可以区分IO等待是在前端系统端还是后端存储端的。AVSERV是存储到OS之间的端到端服务时间,从上面的指标上看,确实也不大,只有几个毫秒,所以说存储工程师的说法可能是对的,存储端并不慢。而avwait是IO在前端的等待时间,这个指标是相当高的,这说明很可能IO并没有下到存储上,而是在前端OS层面出现了等待。对于AIX系统而言,这个等待很大可能是和QUEUE_DEPTH参数设置不当有关的。
为了进一步确认是否QUEUE_DEPTH不足引起了问题,在AIX系统上,可以用iostat–D去分析:
| APE:/ # iostat -DSystem configuration: lcpu=32 drives=111 paths=4vdisks=0hdisk44 xfer: %tm_act bps tps bread bwrtn21.9 4.1M 160.3 2.1M 2.0Mread: rps avgserv minserv maxserv timeouts fails28.8 5.6 0.1 1.2S 0 0write: wps avgserv minserv maxserv timeoutsfails131.5 0.4 0.2 1.7S 0 0queue: avgtime mintime maxtime avgwqsz avgsqszsqfull68.1 0.0 9.2S 12.0 0.0 160.3hdisk43 xfer: %tm_act bps tps bread bwrtn24.0 4.6M 198.9 1.9M 2.7Mread: rps avgserv minserv maxserv timeouts fails29.4 5.6 0.1 748.9 0 0write: wps avgserv minserv maxserv timeoutsfails169.4 0.4 0.2 1.2S 0 0queue: avgtime mintime maxtime avgwqsz avgsqszsqfull107.4 0.0 11.6S 25.0 0.0 198.9hdisk39 xfer: %tm_act bps tps bread bwrtn27.5 5.3M 192.9 2.6M 2.6Mread: rps avgserv minserv maxserv timeouts fails38.8 5.3 0.1 791.8 0 0write: wps avgserv minserv maxserv timeoutsfails154.0 0.4 0.2 1.4S 0 0queue: avgtime mintime maxtime avgwqsz avgsqszsqfull100.2 0.0 11.0S 21.0 0.0 192.9hdisk38 xfer: %tm_act bps tps bread bwrtn17.1 3.5M 145.8 1.4M 2.1Mread: rps avgserv minserv maxserv timeouts fails19.9 5.7 0.1 967.4 0 0write: wps avgserv minserv maxserv timeoutsfails125.9 0.4 0.2 2.3S 0 0queue: avgtime mintime maxtime avgwqsz avgsqszsqfull282.0 0.0 11.4S 44.0 0.0 145.8hdisk40 xfer: %tm_act bps tps bread bwrtn25.0 5.3M 178.7 2.7M 2.6Mread: rps avgserv minserv maxserv timeouts fails36.5 5.1 0.1 793.6 0 0write: wps avgserv minserv maxserv timeoutsfails142.2 0.4 0.3 845.6 0 0queue: avgtime mintime maxtime avgwqsz avgsqsz sqfull89.7 0.0 10.3S 17.0 0.0 178.7hdisk42 xfer: %tm_act bps tps bread bwrtn30.0 6.3M 299.6 2.9M 3.4Mread: rps avgserv minserv maxserv timeouts fails40.2 4.8 0.1 691.9 0 0write: wps avgserv minserv maxserv timeoutsfails259.4 0.4 0.2 1.1S 0 0queue: avgtime mintime maxtime avgwqsz avgsqszsqfull3.2S 0.0 11.1S 957.0 0.0 299.6hdisk41 xfer: %tm_act bps tps bread bwrtn18.6 4.3M 174.9 1.8M 2.5Mread: rps avgserv minserv maxserv timeouts fails23.9 5.0 0.1 747.2 0 0write: wps avgserv minserv maxserv timeoutsfails151.0 0.4 0.2 1.0S 0 0queue: avgtime mintime maxtime avgwqsz avgsqszsqfull82.2 0.0 6.6S 16.0 0.0 174.9 |
大家可以关注最后一个指标sqfull的指标值,如果这个指标大于0,说明QUEUE_DEPTH参数的设置是不足的,出现了大量IO队列满的情况。从上述数据我们可以比较肯定队列等待可能是问题的主要原因了。下面我们来看看实际上HDISK的设置是什么样的:
| APE:/ # lsattr -El hdisk42clr_q no Device CLEARS its Queue on error Truelocation Location Label True lun_id 0x4000000000000 Logical Unit Number ID Falsemax_transfer 0x40000 Maximum TRANSFER SizeTruenode_name 0x2100f84abf591cca FC Node NameFalsepvid 00cd36456aecb23e0000000000000000 Physicalvolume identifierFalseq_err yes Use QERR bitTrueq_type simple Queuing TYPETruequeue_depth 1 Queue DEPTH |
什么?QUEUE_DEPTH居然是1?其实也没啥大惊小怪的,在AIX系统下,华为存储的缺省QUEUE_DEPTH就是1,也就是说存储工程师并没有帮助用户设置合理的值。其实HDS存储在AIX上的QUEUE_DEPTH缺省值是2,类似的情况还有很多。那么这个参数设置为多少合适呢?根据老白的经验,如果跑Oracle这个参数至少设置为8,高负载的系统可以设置为更大的值,甚至32或者更高(LINUX上缺省是128),不过也不是越高越好,要看你的存储的能力,如果这个参数很大,存储没那么强的能力,也是没用的,需要一个匹配。
既然发现了问题,那么果断的将参数调整为24,我们来看看优化后的效果:将QUEUE_DEPTH加大到24,再看AWR数据:
Load Profile~~~~~~~~~~~~ Per Second Per Transaction ------------ ---------------Redo size: 58,379,378.01 11,838,984.49Logical reads: 297,113.02 60,252.72Block changes: 206,017.48 41,779.10Physical reads: 2,117.52 429.42Physical writes: 27,976.85 5,673.54 User calls: 51.61 10.47 Parses: 26.49 5.37Hard parses: 1.00 0.20Sorts: 2.88 0.58Logons: 0.80 0.16Executes: 30.86 6.26Transactions: 4.93Top 5 Timed Events Avg %Total~~~~~~~~~~~~~~~~~~ wait CallEvent Waits Time (s) (ms) Time Wait Class------------------------------ ------------ ----------- ------ ----------------CPU time 18,629 29.7db file scattered read 463,322 17,063 37 27.2 User I/Odb file sequential read 336,204 10,451 31 16.7 User I/Odb file parallel write 300,543 7,727 26 12.3 System I/OSQL*Net more data from dblink 8,196,651 5,149 1 8.2 Network------------------------------------------------------------- |




