2010-08-24 159 views
0

我得到了一個linq查詢超時異常。在網上進行了一些搜索後,使用TransactionScope使其'nolock'獲得我的投票。但是,在使用下面的代碼後,我仍然得到相同的時間異常。任何幫助評估,預先感謝。linq查詢鎖定問題(linq to sql)

IEnumerable<IGrouping<string, Log>> grps = logs.GroupBy(l => l.msg_shortdesc); 
using (var t = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted })) 
{ 
    var lst = grps.ToList(); 
} 

回答

1

你有正確的策略和語句與TransactionOptionsIsolationLevel.ReadUncommitted,以幫助在SQL語句中使用NOLOCKHanselman suggests it

問題出現在LINQ To SQL生成的SQL語句是否在數據庫上執行。請記住,Dev vs. Test vs. Prod的性能會有所不同,具體取決於表中的行數以及您查詢的數據類型。

有些事情要檢查:

  • 什麼是SQL語句被髮送到服務器?使用SQL Profiler進行檢查。該SQL是否通過SSMS在特定查詢中及時運行?

  • 是否有索引msg_shortdesc?如果此列不存在,請在此表中添加一個新索引。重新運行您的LINQ To SQL查詢以檢查其性能。

這聽起來像你沒有選擇更改數據庫的配置(索引)。建議如果無法進行配置更改,則無法進行「正確」調整以提高性能。不幸的是,你會不停地想到其他用戶產生的負載的隨機性。

如果您絕對無法創建索引,請考慮針對這組數據的緩存策略。也許將這些數據加載到Session並且每分鐘過期。

+0

嗨坎貝爾,感謝您的快速回復。我不認爲msg_shortdesc有索引 – Zalan 2010-08-24 16:28:03

+0

它應該返回1000+條記錄。我知道併發查詢存在塊問題,這就是我使用TransactionScope的原因。 msg_shortdesc是varchar – Zalan 2010-08-24 16:45:32

+0

@zalan:新索引是否改善了性能? – 2010-08-24 16:48:08