在一个非常重要的生产数据库(MSSQLServer2016 SP1标准版)上,一个巨大的表导致了一个关键的性能问题。
向社区
如何改进这样一个有问题的表的性能?您将在建议的性能优化步骤中添加或删除什么?
非常感谢和感谢在此之前。
好的,我不想一一回答所有的评论,所以我正在编辑这个问题并添加一些更多的信息。
第一:我不是DBA专家。我可以说是高级初学者。这就是我来这里尽可能多地向社区学习的原因。
第二:我们两周前才有了这个客户,而我自己还没有完全接触到环境。有关问题和表的信息(事实)直接来自客户的sys管理员。
第三:因为,我不知道为什么表是堆在第一手,没有索引,他们让它增长这么多,没有任何分区和任何情况下。
第四:建议的解决方案和建议的步骤不是我自己的,而是直接来自整个系统的制造商(这是一个众所周知的统一通信系统,而制造商是这方面最好的。我猜你们都知道是哪一个)。
第五:我希望下周能充分接触到环境,在此之前,我只想分享我手头的情况,并在陷入这场混乱之前尽可能多地征求意见/建议。
6:因为不幸的是,我将从这里开始处理这个烂摊子,并设法使它变得更好、更顺畅。
感谢每一个已经抽出时间和回答的人。我已经有洞察力了。我一定会分享更多的信息,只要我有更多的在手。
发布于 2021-01-25 14:51:54
基于这些事实,1.9亿行,450 in,非索引堆,长时间运行的查询,您应该创建一个聚集列存储索引并以压缩的柱状格式存储数据。
但是,这可能不是最佳解决方案,因为您仍然有一个没有键和没有索引的表,这是很奇怪的。
发布于 2021-01-25 13:50:51
我对你的“建议.步骤”有点困惑。
有些是相同的(从堆迁移到聚集表与创建聚集索引是一样的)。
现在还不清楚你是把它们作为恭维词,还是把它们作为彼此的替代物。
无论如何,你基本上有两个选择:
ALTER TABLE ... REBUILD,以摆脱所有的空空间,这可能是您的问题的原因。也就是说,把它当作一堆东西。我们中的大多数人都喜欢在表上设置聚集索引,除非您有充分的理由不这样做。也就是说,我们不能说什么对你最好。你的桌子是堆的原因吗?若然,原因为何?与你发现的缺点相比,它有多强?等。
至于聚集索引的碎片整理:不确定这是否对您有好处。许多DBA的碎片“仅仅是因为”。如果您可以指出做碎片整理(减少“跳转磁盘”和潜在的更高的页面饱满)的优点,那么一定要这样做。
发布于 2021-01-25 21:13:36
这就是我要采取的方法:
SQL Server 2016**,对吗?**启用查询存储,它将告诉您如何处理性能问题SELECT指向第二个副本,而UPDATE、ALTER和INSERT将发生在第一个副本上。这至少可以减少read问题。WHERE在寻找什么。你拿到了吗?所以用你最想要的列来划分那个表。...and总有一天你必须去那里,不管你愿不愿意。
https://dba.stackexchange.com/questions/283922
复制相似问题