【问题标题】:How to get a list of tables that need tuning如何获取需要调整的表的列表
【发布时间】:2016-11-11 12:06:35
【问题描述】:

我有一个数据库,其中的表每天都在增长。我无法预测哪些表会增长,哪些不会增长,因为我不是将数据放入其中的人。

有没有办法找到在特定时间点需要索引的表?在 SQL Server 中,如果数据库需要调整某些表,有没有办法通知我?

这是我们在不同客户位置部署的产品,我们不能每次都访问他们的服务器来检查他们是否存在性能问题。我正在考虑的是,如果某些表存在性能问题,可以通知我,因此当新补丁发送到客户端时,我们可以添加这些索引或调整查询。

在参考Insertion of data after creating index on empty table or creating unique index after inserting data on oracle? 之后,我不愿意在安装数据库时创建索引,或者当表的行数很少或为空时。

【问题讨论】:

  • 在空表上创建索引——谁告诉你这全是鲤鱼。
  • 这些表有多大?主键约束将自动在键列上创建索引。我不会担心索引一个空表。我看不出这会对任何事情产生负面影响。查询优化器获取有关您如何使用某些表的统计信息并自动执行很多操作。除了正确索引之外,您能否更具体地说明您希望完成的任务?
  • 数百万行大约有 30 列。霍根,我想要答案,而不是其他一些谈话,对不起。
  • 我经常使用并且非常有用的一个工具,sp_BlitzIndex
  • 您对自己拥有的数据一无所知?如果没有商业意识,您如何充分索引您的表?至于可伸缩性,肯定有办法至少跟踪表的大小、使用或其他方式。听起来像问答和报告写作的结合会对你有所帮助。因为因为它们“必须”有一个而在表上抛出索引是愚蠢的。

标签: sql sql-server performance sql-server-2008


【解决方案1】:

据我了解,我们不能在较小的表上创建索引,因为它会影响写入性能。

只有当您每天批量加载或生成一亿条记录并且写入性能存在问题时,这才是真正值得关注的问题。索引确实会增加写入时间,因为它们必须在写入数据时进行更新,但除非您在土豆上运行或运行非常高的负载,否则这不太可能成为问题。在遇到问题之前您就会知道这是一个问题。

如果我们谈论的是小表(少于 100 页),那么索引很有可能没有用,因为数据集太小了,但您不必担心会影响写入性能。

总体而言,您的应用程序应该具有支持您希望在单元测试和登台中运行的查询的索引。您需要客户或客户的反馈,但在您真正了解人们如何使用他们的数据之前,您必须做出最佳猜测。


“当我不知道将运行哪些查询时,我如何知道我需要哪些索引?”的一般问题?更适合DBA Stack Exchange。简而言之,您需要为此使用动态管理视图。三个missing index dynamic views 可以用于此。给出的示例查询并不可怕:

SELECT mig.*, statement AS table_name,  
    column_id, column_name, column_usage  
FROM sys.dm_db_missing_index_details AS mid  
CROSS APPLY sys.dm_db_missing_index_columns (mid.index_handle)  
INNER JOIN sys.dm_db_missing_index_groups AS mig 
    ON mig.index_handle = mid.index_handle  
ORDER BY mig.index_group_handle, mig.index_handle, column_id; 

但是,您不应该只是盲目地遵循这种观点。这是查看内容的一个很好的线索,但您必须查看列顺序和实际用于告知的查询。

您还应该监控index usage statistics 并检查索引的使用量和使用方式与必须更新的量相比。应该考虑删除每天更新一百万次但使用一次或两次的索引。

您还需要监控 query stats 以查找运行时间较长的查询。这可能是您的客户开发不佳,但也可能是设计问题的征兆。

然而,这甚至不是一个全面的概述。数据库维护和操作有很多内容。这就是 DBA 过上好日子的原因。这只是冰山一角。甚至只是索引的提示。

如果您想保持这一点,我会考虑让您的客户允许您发送反馈以进行性能分析。设置一个代理来监控管理视图并将编译和清理的信息发送回给您自己。您需要非常小心发送的内容,因为您当然不想发送实际的客户数据。

请记住,动态管理视图通常会在实例重置时重置,因此结果通常不会代表数据库的整个生命周期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2020-05-18
    • 2023-04-06
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多