2011-05-24 25 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,我很樂意提供幫助。