新来了个同事,昨天我带他去客户处,客户反映系统非常慢。(不好意思,还是Oracle系统)
到了客户处,首先检查了AWR报告,并做了trace跟踪,系统没有明显的等待时间和阻塞。查看了当前等待的语句,是一个insert语句。该语句的执行计划,扫描的成本为1,。
当时感觉执行计划有问题,由于我没带笔记本电脑,就让客户先把索引重建一下,之后重新收集一下统计信息。同时让同事(他带电脑了)帮我描述一下表结构,还有相关的索引。之后我就去和客户询问整个性能下降的前因后果去了。这是,牛逼的事情出现了。我大概下午2:30让同事查看表结构的。一直到3:15,还没给我结果。每次问题要结果,都是说,等会,别急。
这时,客户已经重建过索引了。速度还是满。我说,让开发加个HINT,强行走索引看看吧。于是,开发强行让应用走索引,还是速度很慢。这时。另外一个公司的工程师来了。也看了情况,说换个索引看看。于是,换了另外一个索引走强制,马上速度就正常了。
客户一群人马上对那位工程师敬仰的五体投地。我实在是忍不住了。让同事必须马上给我查我要的东西。结果,我惊喜的发现,他根本不会查看表结构和索引结构。
于是。我只能自己来吧。一看表结构,没给我气背过去。该表的索引,是一个联合索引,建立在3个列上,其中2个列是varchar(1),另一个列的distinct也只有29,这个索引,如果用到了的话,根本没有任何效率可言的,而且会大大拖慢数据库速度,而执行计划里用的索引,以及第一次强制走的索引,都是这个索引,数据库慢也就是很正常的事情了。而另一个索引,情况则要好很多。符合正确的索引逻辑,这也是第二次hint后快的原因。
事后总结,我犯的错误太多了。一个是考虑到新来的同事,没好意思太强势,让他给我调我想要的东西,这个索引,本来是看一眼就可以定位问题的。我有优柔寡断,耽误了太久,直接结果,就是被其他公司的工程师摘了桃子,使客户对他们的满意度上升,对我们的满意度下降。
添加新评论22 条评论
2012-02-25 17:21
2010-12-29 23:32
2010-10-13 16:25
2010-10-13 16:23
2010-09-01 12:11
2010-08-30 20:21
2010-08-24 13:54
人家三倍你的薪水,显然不是干活的人,应该你自己查资料,都没想明白
2010-08-17 23:04
2010-08-13 11:24
2010-08-11 17:18
2010-08-10 13:46
2010-08-09 10:09
2010-08-04 16:43
---- 同问!
2010-08-03 16:51
2010-08-03 16:47
2010-08-03 15:33
2010-08-03 15:33
2010-08-03 15:31
2010-08-03 13:06
2010-08-03 13:03
2010-08-03 11:13