直接上菜!
问题场景1:新增收款也没,速度响应太慢。数据库服务器CPU占用持续飚到90%以上。
运行环境:32位Win Server 2003企业版上装了SQL Server 2005 开发者版,AWE未成功开启。6G内存里,SQL Server只用到不到2G。
原因:三张核心大表上索引过多(每张表几十条索引……),且表上索引碎片过多,之前添加的索引维护计划由于客户禁用了代理导致任务计划无效,进而导致维护索引开销太大,插入和查询耗时均很长,经检测死锁发生频繁。
解决:
1.根据碎片情况重建索引,重新配置AWE,生效后内存使用升到5G+,可是这部分工作的效果不大。开启AWE:
http://msdn.microsoft.com/zh-cn/library/ms190673%28v=SQL.90%29.aspx
2.删除主键索引外的绝大多数索引,涉及到插入的操作于是变快了很多。
3.每隔三五小时,根据以下三张动态管理视图获取缺失一次索引
sys.dm_db_missing_index_details
sys.dm_db_missing_index_groups
sys.dm_db_missing_index_group_stats
对比seek次数、开销和可提升倍数来选择添加哪些索引。反复几次之后,CPU占用大多时候在20%左右,繁忙时50%左右,高峰90%左右但大都会在10秒内降至正常水平。
4.优化程序中逻辑读超高的查询,从而加快仍然较慢的查询操作。
问题场景2:开发给了一个多表连接的查询,很慢。
运行环境:Win7,SQL Server 2008 R2 64位
分析:查看io和耗时后,结合执行计划,发现对大表A的逻辑读次数奇高且先走这张表上的主键上建的非聚集索引,然后走主键上建的唯一聚集索引。貌似非聚集索引建的没有必要。
解决:删除冗余的非聚集索引。本想也删除唯一聚集索引然后再新建,发现行不通。通过Management Studio禁用唯一聚集索引后(天知道那会为什么要禁用),竟然不知道怎么重新启用了。最后看msdn发现rebuild一下就可以启用。alter index ix_name on 表A rebuild 其实还是通过Management Studio重建也一样。
看文档时发现个没见过的用法ALTER INDEX ALL REBUILD on 表A 见
http://msdn.microsoft.com/zh-cn/library/ms190645%28v=sql.100%29.aspx。
结果:查询的执行时间从12-17秒缩短至2秒左右,对表A的逻辑读从38W+降至7K多。不动现有表结构的话,这算暂时解决了。
分享到:
相关推荐
SqlServer索引工作原理
sqlserver 2008 查找缺失索引
SQL Server 索引结构及其使用(聚集索引和非聚集索引)的区别与实例讲解,提高查询速度。
此文档中详细的记载了,SQL Server 索引中include的魅力(具有包含性列的索引),希望可以帮到下载的朋友们!
Sqlserver索引分析,Sqlserver索引缺失,Sqlserver索引建议
该ppt详细描述sqlserver索引优化时带来的查询性能提升和更新锁开销,最后介绍表设计,字段数据类型的选择及使用适当的冗余减少表连接
用于SqlServer的索引重建,全语句实现,可根据实际情况进行部分关键表的索引重建。
SQLServer索引设计经验谈SQLServer索引设计经验谈
SQLServer中有几个可以让你检测、调整和优化SQLServer性能的工具。在本文中,我将说明如何用SQLServer的工具来优化数据库索引的使用,本文还涉及到有关索引的一般性知识。关于索引的常识影响到数据库性能的最大因素...
SQL Server 索引结构及其使用
优化SQL Server索引的小技巧.doc
SQLserver索引失效举例.txt
sql server创建索引sql server创建索引
资源名称:SQLServer索引调优实践资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
深入理解SqlServer索引机制及合理优化数据库
sql server 重新组织和重新生成索引
SQL SERVER索引文件迁移到文件组,可以将索引和数据文件分在不同的文件组中,实现物理分离,便于管理
sqlserver管理索引优化SQL语句
详细讲解了外部索引和内部索引的检测、清理方法