我正在使用 Sql Profiler 解决一个奇怪的问题。在运行一些性能测试脚本时,我运行分析器来查找瓶颈。一个特定的语句似乎需要很多时间 - CPU 1407,读取 75668 和 175 的持续时间。
但是,当我在 Management Studio 中运行相同的语句时,SQL Profiler 返回 CPU 16、读取次数 4 和持续时间 55。
谁能指出我做错了什么,因为我对此完全感到困惑。
谢谢,苏珊。
我正在使用 Sql Profiler 解决一个奇怪的问题。在运行一些性能测试脚本时,我运行分析器来查找瓶颈。一个特定的语句似乎需要很多时间 - CPU 1407,读取 75668 和 175 的持续时间。
但是,当我在 Management Studio 中运行相同的语句时,SQL Profiler 返回 CPU 16、读取次数 4 和持续时间 55。
谁能指出我做错了什么,因为我对此完全感到困惑。
谢谢,苏珊。
您可能有一个具有表访问权限的标量用户定义函数。
使用的资源仅由分析器获取:SSMS 不会显示标量 udf 的内部 IO 或 CPU。
例子:
CREATE FUNCTION dbo.MyUdf (
@param int
)
AS
RETURNS int
BEGIN
RETURN (SELECT MAX(foo) FROM dbo.MyOtherTable WHERE Key = @param)
END
GO
SELECT
col1, col2, dbo.MyUdf(col3)
FROM
dbo.MyFirstTable
但是,这可能无法解释持续时间...
是一个 java/hibernate 问题。
如果在分析后直接在企业管理器中运行查询,它需要的所有页面都将缓存在内存中。这可以带来巨大的改进。
如果在企业管理器中右键单击服务器并选择属性,则可以更改服务器可用的内存量。如果您更改此数字甚至一步,SQL Server 将刷新其缓存。