|
几个月前陆陆续续做了一个次要数据库的调优,写出来给本人留个记号(曾经健忘掉得多了),也但愿对初学者有参考意义。
这个MS SQL2000数据库愈来愈慢,次要缘故是每一年在零碎上加运用模块,并且业务数据不停减少。次要的表示有两个:在外埠的200多销售人员在Sync数据的时分长达5-10分钟,天天都有好多DeadLock。 并且有一种愈来愈差的开展趋向。
咱们这里没有专职的SQLDBA,我只好本人下马,用了一部份时间做了些调优,取患了不错的成果,当初Sync的时间大部份都在30秒内,很少有DeadLock,几个月过来了安枕无忧。
1. 数据库硬件降级,买了一个很好的办事器,使用64位零碎(原来是32位),40多G内存,windows2008 / SQL Enterprise 2008
2 Index优化, 对几个大的表调剂了index,调剂后成果十分显著,使用statistics对比就知道,一个一样的查问,从SCAN几十万降到scan几千。调的时分子细浏览代码,从代码中发现蛛丝蚂迹, where 或者join on所需求的index 对比好找,select 前面隐含的index需要对比难点。 次要的工具就是execution plan
3 优化修正了一批stored proc, 尤为是有些代码带有得多子查问,子细浏览后发现了一些分歧理之处,进行改写并对比statistics,成果显著;一些无奈防止的大查问,在业务许可的时分参加readuncommitted hint,防止lock
4 略微修正了一下零碎,
4.1 一些对比动态的查问(好比过来几个月客户们的销售历史),在子夜的时分用job建设暂时表,并给暂时表调配index,这样查起来飞快,成果很显著;
4.2 一些计算:需求用到少量join或子查问,间接改到客户端去做计算,有好几个这样的胜利例子。其中有一个网页查问,每次需求提早10几秒能力有后果,用户十分不爽,通过剖析后我用C#给写了一段代码,把计算逻辑放到网页外部去实现,后果用户觉得不就任何提早(提早低于1秒),
4.3 差未几同上,干脆把一些两头计算后果保留到数据表中,其它中央需求的时分就不必算来算去,间接掏出来
5.有些对比新的技术对履行效力并无益处,好比Co妹妹on Table Expression - CTE, 我做了得多statistics对比,效力并无任何进步,只是使代码读起来十分简洁罢了
原本还有几个慢的stored proc顺序,曾经筹备了优化计划,斟酌到各个方面的用户曾经对零碎很满意了,所以临时不论了。 |
|