繁体   English   中英

动态索引创建 - SQL Server

[英]Dynamic Index Creation - SQL Server

好吧,所以我为一家销售具有MS SQL Server后端的网络产品的公司工作(可以是任何版本,我们刚刚将我们的要求改为2008+,现在05已经超出了扩展支持)。 所有数据库都归购买产品的公司所有,但我们拥有VPN访问权限并且有技术支持部门来处理任何问题。 我的一部分职责是充当SQL问题的第三线支持。

当性能受到关注时,通常的检查之一是未使用/缺失的索引。 我们有通常的标准索引,但取决于哪些模块或公司如何利用系统,那么它将需要不同的索引(有一个会计模块和文档管理模块等)。 由于有数百名客户,因此无法定期远程访问每个客户以进行优化工作。 我想知道我职位上的其他人是否考虑过可以在需要时删除并创建索引的计划任务?

我很担心(显然),此程序所做的任何更改也将存储在一个表中,其中包含更改的完整详细信息和时间戳。 我需要这是防弹,如果它可能导致问题,不能将某些东西送到野外。 我在考虑一夜之间或(可能)每周一次的任务。

删除索引:

  • 将要求服务器启动最少的时间以确保所有相关的服务器统计信息是最新的(例如2周或1个月)。
  • 仅删除正在使用的表的未使用索引(不关心系统未使用部分的索引)。
  • 记录下来。
  • 这不会突出显示重复索引(必须是手动),只是快速获胜(带有写入的未使用索引)。

创建索引

  • 仅查找值高于特定阈值的索引。
  • 必须检查是否可以修改任何类似的索引以满足要求。 这可以是排名(检查所有索引字段是否相同,然后对包含的字段进行评分,以查看是否需要额外的字段)。
  • 限制要创建的最大索引数(比如每周5个),以确保它不会被带走并立即创建一堆)。 这应该只关注最重要的索引。
  • 记录下来。

这需要是动态的,因为我们在不同版本的系统上拥有不同使用模式的客户。

只是为了澄清:我不希望任何人为此编码,这更像是一个与此类任务的可行性和关注点相关的问题。

编辑:我已经对此提出了一些赏金,以收集一些进一步的意见,并获得任何可能曾经尝试过的人的反馈。 在赏金持续时间结束时,我将奖励给最多的赞成。

我无法推荐您正在考虑的内容,但您可以通过收集预期计划的输入并将其提供给客户和支持团队来简化您的生活。

如果问题像您想象的那样简单,那么服务器本身或调优顾问肯定会解决它。 你至少做了一个无根据的假设,

要求服务器在最短的时间内运行,以确保所有相关的服务器统计信息都是最新的。

表统计信息仅与上次重大更改后的更新一样好。 正常运行时间不保证截断表或批量插入的任何内容。

这不会突出显示重复索引

但是,您可以使用系统表在单个查询中执行此操作。 (如果调整小工具没有帮助,那将是令人失望的。)您可以类似地查找重叠索引,例如列{a,b}和{a}; 除非{b}具有选择性并且有些查询没有提到{b},否则第二个将无用。

为了寻找新的索引,我很想尝试检测查询使用频率并自动分析查询计划输出。 如果您可以识别经常使用的长时间运行的查询并将其物理操作(表扫描,散列连接等)映射到表和现有索引上,那么您将有很好的输入来添加和删除索引。 但是,您必须考虑不经常运行的季度报告,如果没有其他未使用的索引,则需要数天才能完成。

我必须告诉你,当我几年前做过那种分析时,我很失望地得知大多数有问题的孩子都是糟糕的问题,通常是由糟糕的桌面设计引起的。 没有索引可以帮助SQL mule。 希望这不是你的经历。

您没有触及的一个方面可能与机器容量同样重要。 您可能会考虑收集SQL Server统计信息的每小时快照,例如磁盘队列深度和分页。 几乎没有服务器存在,无法通过更多RAM进行改进,有时这确实是最好的答案。

值得检查的SQL perf调优顾问: https//msdn.microsoft.com/en-us/library/ms186232.aspx

另一种方法是获取性能数据,从这里开始: https//www.experts-exchange.com/articles/17780/Monitoring-table-level-activity-in-a-SQL-Server-database-by-using- T-SQL.html并根据性能表数据生成索引

检查这个: https//msdn.microsoft.com/en-us/library/dn817826.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM