有关在SQL Server中长时间运行的基本疑难解答的建议

问题描述 投票:0回答:2

我正在处理SSRS中的报告,并在后端运行一个半大型SQL Server查询。

我的查询大约有10-15个子查询,发现其中一些子查询将我的运行时间减慢到无法为用户使用(10-15分钟的运行时间)。

有人对故障排除有任何建议,以查找查询中正在减慢其执行速度的问题吗?我想保持简单(最好没有附加组件),我只是想确定问题出在哪里,以便我可以根据需要进行重组。

我是SQL Server的新手,是中等强度的查询编写器。任何有关使用功能的指针都是很棒的。预先感谢!

sql sql-server runtime ssrs-2008 ssms
2个回答
0
投票

一个好的起点是使用“显示估算的执行计划”(Ctrl + L)在SSMS中执行相同的查询。这将解析查询,并为您提供一个查询计划,您可以检查该计划以查看在哪里使用了大量CPU和/或IO。

您还可以在启用了“实际执行计划”的SSMS中执行相同的查询。这将执行查询并为您提供实际运行的内容。通常,估计值和实际值相同,但并不总是相同。因为您不必等待查询完成,所以从“估计”开始。

寻找大表扫描和缺少索引。这些通常是最大的罪魁祸首。


0
投票

正如其他人所说,没有看到查询,很难给出具体建议,但是正如您提到的那样,它有10-15个子查询,这可能是问题的一部分,尤其是如果这些子查询具有where子句。

例如,如果您有类似的东西

SELECT * 
    FROM myTable a
    JOIN (SELECT * FROM AnotherTable WHERE aColumn = @aValue) b
        ON a.SomeColumn = b.SomeColumn

如果子查询中的表很大或索引编制不正确,这可能会很慢。

快速测试和潜在的快速胜利是将子查询结果写入临时表并加入该表,以便同一查询看起来像这样...

SELECT * INTO #temp FROM AnotherTable  WHERE aColumn = @aValue

SELECT * 
    FROM myTable a
    JOIN #temp b
        ON a.SomeColumn = b.SomeColumn
© www.soinside.com 2019 - 2024. All rights reserved.