sqlserver 索引優化 CPU占用過高 執行分析 服務器檢查


1. 管理公司一台服務器,上面放的東西挺多的.有一天有個哥們告訴我現在程序卡的厲害.我給他說,是時候讀點優化的書了.別一天到晚沒個正形,現在寫的程序卡的跑不動.他說我本地

是好好的,跑的很快.我說別扯那么多沒用的,服務器不比你的本子強得多.待灑家上去看看.不看不知道一看嚇一跳,CPU占用在95上下.開個程序是不卡,可整點有些時間是卡的一匹.這就令人很難受了.

本來服務器上也沒有什么,就一個網站和幾個數據庫.那一個個分析吧,打開任務管理器和資源監視器,CPU占用達到93,這個還是普通,有時間到98 99.

2. 這不要了親命了嗎,打開資源監視器看看什么占用的最多吧.一看果然是數據庫占用最多,數據服務占用過大

 

這個為了重現占用過高,我把自己建的索引都刪除掉后,sqlservr.exe立馬成為,人群中最靚的仔.占用獨占大頭.看來只有試出來絕招了.作為面向瀏覽器編程的程序員,首先搜索一下.網上還真有建設性意見.都說是索引缺失

還貼心的給了一段查詢索引的語句.把查出的結果做非聚集索引,就可以了.貼上代碼.

SELECT  TOP 10 
        [Total Cost]  = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) 
        , avg_user_impact
        , TableName = statement
        , [EqualityUsage] = equality_columns 
        , [InequalityUsage] = inequality_columns
        , [Include Cloumns] = included_columns
FROM        sys.dm_db_missing_index_groups g 
INNER JOIN    sys.dm_db_missing_index_group_stats s 
       ON s.group_handle = g.index_group_handle 
INNER JOIN    sys.dm_db_missing_index_details d 
       ON d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC;

 

微軟名字起的也很直白,直接叫missing_index,就是sqlserver 經過分析認為這些字段處理和查詢是最耗時的,最好在 EqualityUsage上包含的字段上加個非聚集索引.前幾個用時是后幾名的好幾個數量級.

加了索引立馬飛起.

現在優化過,耗時都在一個數量級.如果沒有優化是不同的幾個數量級.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM