服务器传输后 SQL 性能不佳

Poor SQL performance after server transfer

提问人:Andy Macnaughton-Jones 提问时间:5/24/2017 更新时间:5/24/2017 访问量:155

问:

我们有一个 SQL 2005 服务器,它非常愉快地运行 XML EXPLICIT 查询,没有出现任何性能问题。不幸的是,这台机器(Windows 2003 服务器)已经死了,所以我不得不紧急提供 Windows 2012 盒子。数据库文件已重新附加到 2008r2 和“work”。但是,查询速度非常慢。每个查询 5 秒,而以前它们处于 .x 时间。这使得它们支持的网站无法使用。 我已经重建了所有索引,并在所有计算机上运行了 DBCC FREEPROCCACHE,但这没有明显的影响。我还能看什么?我无法在盒子上的 2016 SQL 实例上运行它们,因为某些查询使用非 ANSI *= 连接(我说它很旧!

sql-server 数据库性能 for-xml-explicit

评论

1赞 Alex K. 5/24/2017
查看查询计划?
0赞 Galcoholic 5/24/2017
可能有很多原因,例如所有数据库统计信息、结果缓存和其他数据都丢失了,必须重新构建。在使用服务器时,您是否看到任何缓慢的改进,或者现在是否关闭?值得开始使用它,看看随着这些丢失的数据再次重建,它是否变得更快。
0赞 TT. 5/24/2017
这个问题几乎没有什么可说的,我们不可能用至少一个查询的例子来回答,涉及的表定义,查询计划等。此外,服务器上可能存在争用;服务器拥有的内存量与实际需要的内存量是多少?您的磁盘速度慢吗?大量并发请求,只有一个 CPU?有太多的变量,你没有突出显示。
0赞 TT. 5/24/2017
您是否尝试过更新统计数据()?EXEC sp_updatestats;
0赞 Andy Macnaughton-Jones 5/24/2017
未尝试更新统计信息。服务器是 Windows 2016 与 Windows 2003,十六进制核心 16gb ram 与非常旧的东西!比以前更现代、更快速的机器。我目前只使用它来测试,所以它不是并发用户的负载。在通过 SSP 捕获 SQL 并在 SSMS 中运行后,尝试了几个本地查询,但没有立即发现任何查询。物理数据库文件是从损坏的服务器复制的,并重新附加到新服务器。不是备份/还原。

答:

0赞 Martin 5/24/2017 #1

如果查询以前运行良好,请考虑还发生了哪些更改 - 查询规划器和实际执行计划可能有助于查明这一点。

当你说你要加入时,你有没有考虑过你加入多少?如果新计算机在数据库中有更多数据,则联接可能很快就会变得非常昂贵。这可以通过减少所需的数据来实现,因为更少的数据处理意味着更少的工作量。

在运行查询之前,是否可以预先计算某些内容,或者以其他方式进行更改以使其运行得更快?

我假设您执行 SELECT,但是如果您 UPDATE 或 DELETE 数据,则还需要重新计算索引,这需要很长时间(在这种情况下,禁用索引,插入所有需要的数据,然后重新计算索引)

您没有提到任何 XML 处理,但已标记 for-xml 标记。如果对 XML 数据执行联接,则使用 Xquery 获取数据也可能提高性能。

评论

0赞 Martin 5/24/2017
如果您有任何其他关于您的查询或其行为方式的信息,也许我可以提供一些更具体的建议:)
0赞 Galcoholic 5/24/2017
为什么您预计数据量会发生变化?据我了解,相同的数据库文件已附加到另一台服务器。因此,它不应该只是一个“一般的慢速查询”,因为以前它的速度很快,具有相同的数据量、相同的索引、相同的 XML 处理。
0赞 Andy Macnaughton-Jones 5/24/2017
嗨 - 数据量没有变化 - MDF和LDF文件从损坏的服务器直接复制到新的服务器并重新连接。“for xml explicit”,用于从 SP 生成 SQL 输出。这是使用(我不再使用的)带有联合的 TAG / 父生成的类型来创建数据集,然后按顺序排序。我现在不会这样做!XML 数据上没有联接。已经有预计算了。我将得到一个慢查询,并在 SQL 2016 实例上试用,该实例也可用于同一实例。需要找到一个没有非 ANSI 加入的,因为它不起作用
0赞 Martin 6/1/2017
你设法修复它了吗?我很乐意帮助你,但此时,我可能需要查看代码来帮助你:)