SQL 資料庫高CPU佔用語句排查

來源:互聯網
上載者:User

標籤:管理器   blog   col   end   iis   div   任務   結果   查詢語句   

前述

  最近一個項目CPU佔用非常高,在IIS內設定CPU限制後系統頻繁掉線,通過工作管理員發現SQLSever資料庫佔用CPU達到40%--70%,對於資料庫本人也就處在增刪查改幾個操作水平層面,這次出了問題就硬著頭皮上了,好在經過各種百度問題最終解決了,記性不好用的也不多,為防止忘掉就把主要排查方法記錄下來。

尋找耗時語句
SELECT TOP 10   total_worker_time/execution_count AS avg_cpu_cost, plan_handle,   execution_count,   (SELECT SUBSTRING(text, statement_start_offset/2 + 1,      (CASE WHEN statement_end_offset = -1         THEN LEN(CONVERT(nvarchar(max), text)) * 2         ELSE statement_end_offset      END - statement_start_offset)/2)   FROM sys.dm_exec_sql_text(sql_handle)) AS query_textFROM sys.dm_exec_query_statsORDER BY [avg_cpu_cost] DESC

  直接複製粘貼上面的語句就可以查出最耗時的前10條語句。

查看具體語句執行時間

  切換到文字模式

  使用下面的語句查看單條語句的執行時間

go  set statistics profile on  set statistics io on  set statistics time on  go  /** 欲查詢CPU執行時間的目標語句**/     go  set statistics profile off  set statistics io off  set statistics time off  go
語句耗時的原因及對策

1.單表資料太多:分表、清理過時資料

  排查中有兩張相同的表,一張表資料量在7000條,另一張表由於問題插入大量無用資料達到三十萬+,相同的語句針對兩張表的查詢時間分別為0ms/900ms,差距非常大。

  表1執行時間            表2執行時間

2.資料表沒有索引:建立叢集索引

  對錶結構進行分析,發現沒有建立叢集索引,於是針對錶及主要操作欄位建立叢集索引,建立叢集索引後語句執行時間

3.對語句進行最佳化:這個只能特定語句特定分析,不斷查詢語句執行時間來查看最佳化結果

  語句最佳化完成效果

  上面2、3都是單獨作用時的,可以看到效果還是很明顯的,只是並未達到令人滿意的效果,但2、3結合使用後效果就驚人了

  

  

 

SQL 資料庫高CPU佔用語句排查

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.