提问人:Andy Macnaughton-Jones 提问时间:5/24/2017 更新时间:5/24/2017 访问量:155
服务器传输后 SQL 性能不佳
Poor SQL performance after server transfer
问:
我们有一个 SQL 2005 服务器,它非常愉快地运行 XML EXPLICIT 查询,没有出现任何性能问题。不幸的是,这台机器(Windows 2003 服务器)已经死了,所以我不得不紧急提供 Windows 2012 盒子。数据库文件已重新附加到 2008r2 和“work”。但是,查询速度非常慢。每个查询 5 秒,而以前它们处于 .x 时间。这使得它们支持的网站无法使用。 我已经重建了所有索引,并在所有计算机上运行了 DBCC FREEPROCCACHE,但这没有明显的影响。我还能看什么?我无法在盒子上的 2016 SQL 实例上运行它们,因为某些查询使用非 ANSI *= 连接(我说它很旧!
答:
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
你设法修复它了吗?我很乐意帮助你,但此时,我可能需要查看代码来帮助你:)
评论
EXEC sp_updatestats;