簡體   English   中英

SQL Server 2008 R2中運行緩慢的存儲過程

[英]Slow running stored procedure in SQL Server 2008 R2

因此,很少有我完全感到困惑,而是想看看別人對我所經歷的事情的看法。

我被要求查看運行緩慢的存儲過程。 目前大約需要8到12分鍾才能運行。

因此,我注意到一個有用的索引丟失了並添加了它-現在需要8秒鍾。 但是,如果我重新啟動SQL Server並重新運行存儲的proc,它將再次花費8-12分鍾。

如果然后停止查詢並刪除新索引,然后重新運行存儲的proc,則需要幾秒鍾的時間。 離奇。

有沒有人經歷過這樣的事情? 如果這有任何區別,則存儲過程將調用View。

問: if I restart SQL Server and re-run the stored proc it's taking 8-12 minutes again.

執行查詢時,數據將以塊的形式讀入內存。 這些塊保留在內存中,但是會“老化”。 這意味着這些塊被標記為具有最后訪問權限,並且當Sql Server需要另一個塊進行新查詢並且內存緩存已滿時,最近使用最少的塊(最舊的塊)就會被踢出內存。 (在大多數情況下-全表掃描塊會立即老化,以防止全表掃描超過內存並阻塞服務器)。

問: If I then stop the query and delete the new index then re-run the stored proc it takes seconds again.

這里發生的是,第一個查詢中的內存中的數據塊尚未被踢出內存,因此可以用於第二個查詢,這意味着可以避免磁盤訪問並提高了性能。

暫無
暫無

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

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