2015-06-11 15 views
0

我處於報表的開發和報表的主數據集之間正在使用存儲過程進行填充。一個特別的更新語句如下更新查詢獲取在SQL Server中暫停

UPDATE T1 
SET 
    T1.Status=T2.Status, 
    T1.ErrorMessage=T2.ErrorMessage, 
    T1.IssueStatus=T2.IssueStatus 
FROM 
    #tmptblOtherSongs T1 
    INNER JOIN #tmpOtherSongStatus T2 ON 
    T1.SongCode= T2.SongCode AND 
    T1.SocietyCode= T2.SocietyCode AND 
    T1.TableName=T2.TableName 
WHERE 
    T1.SessionID='TRYFBGHk' AND 
    T2.Status IS NOT NULL 

SP的去給出進入暫停狀態,當它達到這個特定的更新查詢。我試着單獨運行查詢,但結果相同。對於少量數據運行正常,因爲數以千計,但問題發生在更多數據量上。 有什麼辦法可以阻止這種情況發生。我不知道爲什麼會發生這種情況。

+0

向表中添加索引以加快此查詢可能會解決問題。 –

回答

0

當進程處於掛起狀態時,它正在等待某事。通常它要麼等待I/O(讀取或寫入數據,也可能與tempdb有關),要麼等待阻塞結束。

如果沒有阻塞,那很可能是I/O操作。如果有些東西看起來不正確和/或設置了統計信息並檢查哪些表導致大部分I/O,則應該查看執行計劃。

I/O通常可以通過添加索引進行改進,在您的情況下,我將開始查看T1.SessionID,然後T1 & T2.SongCode和SocietyCode +也許TableName,取決於行中有多少行表單值。

+0

感謝JamesZ ..但是不會添加索引減慢更新過程? – Geethu

+0

@Geethu只有當你在實際更新的那些字段中添加索引,在這種情況下,Status,ErrorMessage和IssueStatus –