我有一个非常大的查询,它的运行速度比我想象的要慢,但是对查询执行计划的深入挖掘并没有帮助揭示缓慢的原因。最终我缩小了范围:try_parse
是罪魁祸首!
正常查询:
SELECT CloseDate
FROM MyTable
(4959 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 17 ms.
使用 try_parse:
SELECT try_parse(CloseDate as datetime using 'en-us')
FROM MyTable
(4959 row(s) affected)
SQL Server Execution Times:
CPU time = 719 ms, elapsed time = 718 ms.
后一种情况下的执行计划看起来很无辜:
有没有办法让我以后更容易地发现罪魁祸首?缓慢的实际来源完全隐藏在视图之外。
显示这是 CPU 限制。
如果您可以在开发机器上重现该问题,查看 CPU 花费时间的一种方法是使用 Windows Performance Recorder。
在跟踪几秒钟后同时运行以下...
...我明白了(点击 embiggen)
在此期间,SQL Server 占总 CPU 时间的 20.88%。该金额的 75% 以上被用于
有一大块健康的东西被占用了
中的所有名称都没有
master..spt_values
被解析为有效日期,因此所有名称最终都返回 null。上面显示出于某种原因
TRY_PARSE
调用该方法并捕获异常,而不是使用在这种情况下可能表现更好DateTime.Parse
的内置方法。TryParse
从来没有那么简单。您确实必须尝试几种执行查询的方法并检查差异。不仅查看执行次数,还将鼠标悬停在执行计划的每个阶段,查看成本。