我从C#.NET Web应用程序中调用了几个查询,这些查询对我来说总是很快的(我是SQL Server上的本地管理员),但是对于一组用户(具有所需权限的域组)而言,查询速度却非常慢它在应用程序中超时的点。
是什么导致完全相同的查询针对不同的用户运行不同?
更多信息:
- 该查询是C#代码中的内联SQL,而不是存储过程
- 该应用程序使用域身份验证,用户和我自己都可以通过该应用程序运行查询
- 似乎问题出在不同的计划上,其中一个已被缓存,因此这对于不同的用户来说是不同的。某些因素正在影响缓存,因为现在通过应用程序查询对我来说很慢,而在SQL Server Management Studio中则很快。
2
检查以下问题。您可能会发现自己处于相同的情况。假设首先尝试这个和另一个。
—
玛丽安
慢速查询的等待类型(sys.dm_os_waiting_tasks)是什么,以及每种(您的快速,慢速)的实际执行计划是什么?
—
托马斯·斯金格
同意以前的评论。我的第一个想法就是参数嗅探。第一步是检查计划是否不同。
—
马丁·史密斯
如果参数相同(我假设这是的意思
—
亚伦·伯特兰
exact same query
),则不应是参数嗅探(用户为错误的参数制定了错误的计划),而是用户为同一参数获得了不同的计划(s)。可能是由于诸如quoted_identifier
and 的设置arithabort
,您可以将它们sys.dm_exec_sessions
与快速用户和慢速用户进行比较,或者可能是因为它们具有不同的默认架构,并且引用的对象没有架构前缀。仍然可能涉及参数嗅探(因此,为什么其中一个计划不好)。
RE:您所做的编辑是否具有与其他用户相同的默认架构?您是否捕获了慢速运行和快速运行的执行计划?
—
马丁·史密斯,