簡體   English   中英

為什么要調用DatabaseInstance.ExecuteSprocAccessor <T> (...)這么簡單的查詢花了這么長時間?

[英]Why is a call to DatabaseInstance.ExecuteSprocAccessor<T>(…) taking so long for such a simple query?

調用數據訪問應用程序塊時非常奇怪的減速。

它調用的SP(“QuestionsToBeAnswered”)在不到1秒的時間內返回58行,包含三列(兩個GUID和一個整數:21AF77DA-2E76-47DB-AB54-0E5C85CD9AD8,21AF77DA-2E76-47DB-AB54-0E5C85CD9AF0,2)直接在服務器上執行。 我的SQL經驗非常好,我確信SQL服務器上不存在這個問題。

但是,當通過DAAB調用它時,返回對象集合需要很長時間。 ExecuteSprocAccessor(...)通常返回IEnumerable,並且在枚舉或以其他方式消耗集合之前不會執行SP,因此在消費發生之前不會顯示此問題。

DatabaseInstance.ExecuteSprocAccessor<T>(storedProcedure, rowMapper, args);

鑒於相同的代碼沒有問題返回> 200行相當復雜的信息,我感到困惑的是為什么這段代碼需要這么長時間(55秒!)才能執行。

任何想法都會受到歡迎......

您可以嘗試運行SQL事件探查器,以查看使用DAAB運行時實際調用的內容。 隨着這一點,看看它正在使用的執行計划。

在過去,我編寫了一些代碼,這些代碼在SQL查詢中運行良好,但作為存儲過程實際上很慢。 事實證明,查詢優化器正在使用不同的SQL查詢執行計划,然后是存儲過程。 獲取索引后,兩者都以相同的快速速度運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM