昨天晚上9点刚回家,接到电话,说有三个程序扫描速度慢(我们的程序是用Delphi写的,专扫条形码)
并且只有这三个程序慢,其它都正常,GridControl登上看一切都正常。。。没有任何异常的等待事件
登进DB看Loading也正常,Idle值都在98%以上,感觉很纳闷。。。
让现场维护的小伙扫描条形码,我用Toad的Session Browser观察那个Session到底跑了什么SQL,观察
了半天,找到对一个表的两个普通索引做BitmapConversion FROM ROWIDS转换,再做Bitmap AND
操作,这玩意理论上是挺耗费资源。我找两个值代进去,执行都很快啊???,GridControl看这个SQL
逻辑读也刚刚过300。
是不是绑定变量Peeking导致SQL执行计划变差?我Flush一下Shared_Pool,现场的人说速度仍然没改
善,处理一个条形码要2-3秒。再看表和索引的Statistics是12/16号,已经有12天没分析了,分析一下表
和索引看看。。。分析以后执行计划是不走位图索引转换了。现场的小伙子也电话告诉我扫条形码速度都
正常了。。。但这SQL逻辑读前后变化都不大啊,不应该。。。
早上来看了一下这个表自从12/16以后只变化了1.66%,远远没达到10%的变化阀值。Statistics不准造
成PLAN改变也不应该啊。。。
今天上午又来电话,说一个程序又速度慢,并且只有这一个程序。。。,那么多程序为什么只有这一个?
让他换换计算机看看,换了两个计算机仍然一样。。。。。。,继续用Toad的Session Browser观察,这些
SQL单看逻辑读与执行计划没有任何问题。继续观察,这开发思路就是不一样,条形码为10个一组为一个
料盘,他设计的每扫完一个条形码就要以当前料盘去查询数据库得到所有当前料盘的条形码信息,以刷新
DataGrid控件,这个操作会读很多数据,似乎延时有点长。难道网络有问题?
我们的DB有防火墙保护,而这个计算机是在防火墙外。。。ping一下DB映像出来的IP地址,晕倒,竟然有60
多毫秒的延时,这可是在局域网内啊。正常的ping延时都在个位数以内。我们的防火墙是双机热备,难道
HA出了问题?登上防火墙看,那个Primary CPU Loading30%
而从的只有5%。尝试让他把计算机搬到防火墙里面那个网段,再找人去机房重启防火墙
产线一会返回信息,切换网段后扫描条形码速度是正常了,去机房的人也到了,立刻开始重启防火墙,拔
Failover线缆,ping还是老样子,延时一点没下降。。。。再重新插拔防火墙外口的网线,一拔ping延时
正常了,再让产线的人扫条形码,这回也正常了。看样子应该是外口网线有问题,
下午上班后再观察。。。
折腾到1点,吃饭回来,下面兄弟告诉我有人打了两个电话找,一打过去,又是扫条形码速度慢。。。一ping
DB 映射IP又是60ms左右,立刻找人换外口网线,顺便和老板再报告一下,老板提醒我是不是有什么病毒啊?
我回来再开启交换机的RSPAN,用Sniffer监控一下防火墙内网的流量,好家伙,10.192.29.180流量超高,
这才想起来,我们做DATAGUARD在跨防火墙COPY数据文件,马上让机房的兄弟拔掉10.192.29.180的网线
这下一切清净了,ping延时也正常了。再打电话问扫条形码,那边也正常了。
28号晚上凑巧我分析完那几个统计数值后,Standby DB的数据文件也COPY完,让我误以为是Statistics出了
问题。