代码之家  ›  专栏  ›  技术社区  ›  eugeneK

数据库优化建议

  •  1
  • eugeneK  · 技术社区  · 14 年前

    可能你们中的一些人甚至不知道这些特性,所以你们将从这篇文章中学到很多东西,事实上这将帮助我更好地优化,而你们中的一些人可能每天都在使用它们,这样你们就可以帮助我和其他不太支持DBA的用户。

    我使用的是SQL Server 2005标准版

    我跑 SQL Server Profile 很多。每次我发现执行时间超过我可能限制的特殊查询或SP时,对于复杂查询小于100毫秒,对于短查询大于30毫秒(数字并不意味着什么,只是为了说明一些意义)。在我发现可能有问题的问题后,我把它们写下来以便使用 Database Engine Tuning Advisor 它在表上执行重载查询,并在结果中为我提供了需要构建的索引,以提高性能。每天晚上我执行维护计划中的索引重建功能。

    现在提问时间!!!!

    1.如果数据库引擎优化顾问给我10个要创建的索引,而改进百分比约为40%,我应该使用它还是不使用它?更好的问题是,我应该遵循的指数/改进百分比的比率是多少。索引需要空间和时间来重建。

    2.如果我为每一个有问题的查询创建大约5-7个索引,我就可以得到每数据库500个索引。我可以建立多少个索引,以便数据库正常运行?有什么限制吗?

    3.除了使用我的方法或用你的手和眼睛去逐条执行优化(或重新设计)你的数据库,还有其他方法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Martin Smith    14 年前

    这个问题没有正确的答案,因为它很大程度上取决于你的工作量。

    对于读取率很高的工作负载(如数据仓库),创建一个索引可能是有意义的,而为具有更大写入量的环境创建一个索引则会适得其反。

    DTA可以通过评估对整体工作负载的影响来帮助实现这一点,但您需要尝试捕获一个具有代表性的样本(而不仅仅是性能较差的查询)。SQL事件探查器是非常资源密集型的,因此要在对服务器的影响最小的情况下执行此操作,您需要使用服务器端带有适当筛选器的SQL跟踪,以仅记录与感兴趣的数据库相关的事件。

    要单独识别执行最差的查询,如果至少安装了SQL2005 SP1客户端工具,则应能够右键单击Management Studio中的数据库节点,然后使用“报告”->标准报告菜单查看具有最高CPU/IO的缓存中的计划。

    如果你对这方面感兴趣,我推荐这本书 SQL Server 2008 Query Performance Tuning Distilled (大部分也适用于sql2005)

        2
  •  1
  •   Meff    14 年前

    您可以让SQL事件探查器记录到一个表中,这样它将把查询写到您指定的表中。如果可以的话,让它运行几个小时,或者尽可能长的时间来覆盖尽可能多的查询/事件。

    接下来,使用数据库引擎优化顾问-并让它使用这个查询表作为其源输入。您会发现它着眼于整个模式,并建议您创建一些索引,删除其他索引。

    这比孤立地逐个查看查询要好,尽管这仍然有它的位置。