可能你们中的一些人甚至不知道这些功能,所以你们会从这篇文章中学到很多东西,这实际上会帮助我更好地优化,你们中的一些人可能每天都会使用它们,这样你们就可以帮助我和其他DBA验证较少的用户。
我使用的是SQL-Server 2005 Standard
我经常运行SQL Server Profiler。每次我发现特殊查询或sps的执行时间超过了我的可能限制,即复杂查询的执行时间低于100ms,短查询的执行时间超过30ms (数字并不意味着什么,只是为了更有意义)。在我发现可能有问题的查询后,我会将它们写下来,这样我就可以使用Database Engine Tuning Advisor,它会对表执行过载的查询,并在结果中给出我需要构建的索引,以便提高性能。每天晚上,我都会根据维护计划执行索引重建功能。
现在提问时间到了!
1.如果数据库引擎优化顾问给我10个要创建的索引,而改进百分比约为40%,我是否应该使用它的建议?更好的问题是,我应该遵循的索引数量/改进百分比的比率是多少。重新构建索引需要占用空间和时间。
2.如果我为每个有问题的查询创建大约5-7个索引,那么每个DB最终可能有500个索引。我可以建立多少个索引才能使DB正常运行?有什么限制吗?
3.除了使用我的方法或亲力亲为,还有其他方法可以优化(或重新设计)您的DB吗?
发布于 2010-07-13 21:31:01
这个问题没有正确的答案,因为它在很大程度上取决于您的工作负载。
对于读取率很高的工作负载(例如数据仓库),创建一个索引可能是有意义的,而为具有更多写操作的环境创建索引可能会适得其反。
DTA可以通过评估对总体工作负载的影响来帮助解决这一问题,但您需要尝试捕获一个有代表性的样本(不仅仅是性能较差的查询)。SQL Profiler非常占用资源,因此要在对服务器影响最小的情况下执行此操作,您需要使用带有适当过滤器的服务器端SQL跟踪,以便仅记录与感兴趣的数据库相关的事件。
要单独识别性能最差的查询,如果您至少安装了SQL2005 SP1客户端工具,您应该能够右键单击Management Studio中的数据库节点,并使用Reports -> Standard Reports菜单来查看缓存中具有最高CPU/IO的计划。
如果你对这个领域感兴趣,我推荐SQL Server 2008 Query Performance Tuning Distilled这本书(其中大部分也适用于SQL2005 )
发布于 2010-07-13 21:07:56
您可以让SQL事件探查器记录到表中,这样它就会将查询写入到您指定的表中。如果可以,让它运行几个小时-或者让它覆盖尽可能多的查询/事件。
接下来,使用数据库引擎优化顾问,并使其使用此查询表作为其源输入。你会发现它着眼于整个模式,并会建议你创建一些索引,并删除其他索引。
这比孤立地逐个查看查询要好,尽管这仍然有它的位置。
https://stackoverflow.com/questions/3226708
复制相似问题