2011-05-24 95 views
1

我有一个参数嗅探在SQL Server 2005中的问题对于在通过ado.net一个C#客户端生成并从IIS中使用本地系统作为Web应用程序访问的动态,参数化查询应用程序池的身份。执行客户端查询完全在SSMS相同

当我在SSMS查询运行速度非常快,但是从客户端运行时,它30次后出秒,所以我敢肯定的参数嗅探。

现在,我想看看对于从客户端缓存查询查询计划,但我似乎无法复制的查询SSMS中使用该高速缓存的计划。

我跑了跟踪,并有确切的查询,以及各种设定参数,使用的客户端,但是这仍然没有给我缓存的查询计划时,我在SSMS中运行它。我认为这与ApplicationName,NTUserName或LoginName(也由跟踪提供)有关,但我不确定这些中的哪些或我需要设置哪些组合(或者如何在SSMS中执行)运行查询以便它使用缓存的查询计划。

+0

为什么不捕获应用程序使用的实际计划? http://msdn.microsoft.com/en-us/library/ms190233.aspx – 2011-05-24 15:59:28

+0

@Remus跟踪实际上不显示它,因为它在查询完成之前超时 – 2011-05-24 16:17:50

回答

0

得到查询运行,则运行执行后续的脚本

SELECT session_id, blocking_session_id, command, cpu_time, reads, writes, logical_reads, row_count, total_elapsed_time, granted_query_memory, DB_NAME(DATABASE_ID), 
last_wait_type, wait_resource, start_time, open_transaction_count, query_plan, text 
FROM master.sys.dm_exec_requests (nolock) CROSS APPLY sys.dm_exec_query_plan(plan_handle) CROSS APPLY sys.dm_exec_sql_text(sql_handle) 
WHERE session_id <> @@SPID 

这将返回的估计计划以及当前运行的所有查询的其他信息(你需要查看服务器状态的权限),而。

通常UPDATE STATISTICS将帮助你在这个情况下,或使自己的统计数据。如果您想在查询计划的帮助下在某处提供XML,我很乐意提供帮助。

相关问题