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

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

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

原本服務器上也沒有什麼,就一個網站和幾個數據庫.那一個個分析吧,打開任務管理器和資源監視器,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上包含的字段上加個非彙集索引.前幾個用時是後幾名的好幾個數量級.sqlserver

加了索引立馬飛起.優化

如今優化過,耗時都在一個數量級.若是沒有優化是不一樣的幾個數量級.網站

相關文章
相關標籤/搜索