天天看点

[20160112]存储还是应用问题.txt

[20160112]存储还是应用问题.txt

--上个星期在ITPUB论坛里遇到几个关于磁盘性能地下的问题.

--主要链接如下:

<a href="http://www.itpub.net/thread-2050157-1-1.html">http://www.itpub.net/thread-2050157-1-1.html</a>

<a href="http://www.itpub.net/thread-2050439-1-1.html">http://www.itpub.net/thread-2050439-1-1.html</a>

<a href="http://www.itpub.net/thread-2050601-1-1.html">http://www.itpub.net/thread-2050601-1-1.html</a>

--都是表现为磁盘IO相关的等待时间比较大.论坛讨论大部分认为是存储出现问题.

--因为我们旧系统使用的就是该公司的产品,他们的连接数比我们小,而应用出现这个严重的性能问题.

--log file sync单次8354毫秒.

--如果仔细检查可以发现大量索引没有建立,而且看AWR报表发现:

Segments by Physical Reads

    Total Physical Reads: 5,752,157

    Captured Segments account for 94.1% of Total

Owner        Tablespace Name    Object Name        Subobject Name   Obj. Type   Physical Reads        %Total

PHARMACY     TSP_PHARMACY       DRUG_DISPENSE_REC                   TABLE            4,233,164        73.59

OUTPBILL     TSP_OUTPBILL       INVOICE_INFO                        TABLE              763,679        13.28

OUTPBILL     TSP_OUTPBILL       OUTP_BILL_ITEMS                     TABLE              371,704         6.46

OUTPDOCT     TSP_OUTPADM        OUTP_PRESC                          TABLE               18,007         0.31

INPBILL      TSP_INPBILL        INP_BILL_DETAIL                     TABLE                8,609         0.15

Back to Segment Statistics

Back to Top

Segments by Direct Physical Reads

    Total Direct Physical Reads: 5,599,810

    Captured Segments account for 95.8% of Total

Owner        Tablespace Name    Object Name        Subobject Name   Obj. Type   Direct Reads        %Total

PHARMACY     TSP_PHARMACY       DRUG_DISPENSE_REC                   TABLE          4,231,626        75.57

OUTPBILL     TSP_OUTPBILL       INVOICE_INFO                        TABLE            763,584        13.64

OUTPBILL     TSP_OUTPBILL       OUTP_BILL_ITEMS                     TABLE            371,366        6.63

--上下对比问题就很清楚了.

单独拿DRUG_DISPENSE_REC来看:

Direct Physical Reads =4,231,626

Physical Reads = 4,233,164

-- 4233164-4231626=1538 ,真正的物理读仅仅1538.

两者基本相等.我认为Direct Physical Reads算作Physical Reads的一部分.

--看看前面的file IO统计:

Tablespace        Filename                                        Reads        Av Reads/s   Av Rd(ms)     Av Blks/Rd  Writes    Av Writes/s  Buffer Waits  Av Buf Wt(ms)

TSP_PHARMACY      /data/oracle/oradata/orcl/appharmacy.dbf        11,533       3            1593.96        123.35        356              0            2           0.00

TSP_PHARMACY      /data/oracle/oradata/orcl/appharmacy_1.dbf      11,292       3            1563.75        124.17        78               0            9         574.44

TSP_PHARMACY      /data/oracle/oradata/orcl/appharmacy_2.dbf      10,078       3            1519.08        125.44        103              0            3           0.00

TSP_PHARMACY      /data/oracle/oradata/orcl/appharmacy_3.dbf      1,326        0            3546.55        111.28        42               0          141         761.42

--因为文件系统有缓存,这里相对很多.更觉得奇怪的是这么点读(在1个小时内对于服务器就是PC机都不算什么),很明显这里记数的读是真正的物理读.

--从以上来看就是直接路径读造成的问题.而选择直接路径读主要问题是相关语句没有优化或者建立合适的索引.

--我的建议:关闭直接路径读,自己google网上有许多帖子.alter system set "_serial_direct_read"=never scope=memory;

--可惜过去有一段时间,对方也没有回复,希望我的判断是正确的,也许他使用的存储也有问题,cache没打开,电池没电等等因素.