【发布时间】:2020-07-10 22:12:03
【问题描述】:
我正在解决存储过程(不是我编写的)的性能问题。存储过程在 Select、Join、Where 和 Order By 子句中包含多个标量函数调用。
据我所知,打开 Statistics I/O 并查看通常非常有用的逻辑读取,在这里并不能提供很好的信息。这是因为返回的逻辑读取不能包含函数。我推断这是因为函数中引用的表在统计 i/o 输出中不存在。
是否有一些策略可以克服这个问题,并获得存储过程的 TOTAL 逻辑读取,包括函数调用?
编辑 - 使用 SQL Server 2017
【问题讨论】:
-
标量函数是否从表中读取?你看起来像 sys.dm_exec_sessions 吗?
-
是的,许多标量函数都是从表中读取的。我只是查看了 sys.dm_exec_sessions 上的逻辑读取。它给了我我不喜欢的信息(简化的 SQL 仍然使用比原始存储过程更多的逻辑读取,以及所有功能)。不确定我是否信任它,因为当我运行(打开统计 I/O)直接 SQL 时,没有函数,我在统计 I/O 输出中获得了完整的表名集。但是当我运行存储过程时,Statistics I/O 会显示一组有限的表,跳过函数命中的表。
-
顺便说一句,谢谢你的建议。
标签: sql-server database-performance sqlperformance