SQL SERVER占用CPU過高排查和優化

来源:https://www.cnblogs.com/lecone/archive/2019/10/16/11687192.html
-Advertisement-
Play Games

轉載自:https://www.cnblogs.com/vice/p/9163241.html 操作系統是Windows2008R2 ,資料庫是SQL2014 64位。 近階段伺服器出現過幾次死機,管理員反饋機器記憶體使用率100%導致機器卡死。於是做了個監測伺服器的軟體實時記錄CPU數據,幾日觀察得 ...


轉載自:https://www.cnblogs.com/vice/p/9163241.html

操作系統是Windows2008R2 ,資料庫是SQL2014 64位。

  近階段伺服器出現過幾次死機,管理員反饋機器記憶體使用率100%導致機器卡死。於是做了個監測伺服器的軟體實時記錄CPU數據,幾日觀察得出數據如下:

  SQL優化方法:

  1、查看連接對象

1 USE master
2 GO
3 --如果要指定資料庫就把註釋去掉
4 SELECT * FROM sys.[sysprocesses] WHERE [spid]>50 --AND DB_NAME([dbid])='gposdb'

  

  當前連接對象有67個其中‘WINAME’的主機名,‘jTDS’的進程名不屬於已知常用軟體,找到這台主機並解決連接問題。在360流量防火牆中查看有哪個軟體連接了伺服器IP,除之。

2、然後使用下麵語句看一下各項指標是否正常,是否有阻塞,正常情況下搜索結果應該為空。

按 Ctrl+C 複製代碼 按 Ctrl+C 複製代碼

查看是哪些SQL語句占用較大可以使用下麵代碼

按 Ctrl+C 複製代碼 按 Ctrl+C 複製代碼

3、如果SQLSERVER存在要等待的資源,那麼執行下麵語句就會顯示出會話中有多少個worker在等待

複製代碼 複製代碼
 1 SELECT TOP 10
 2  [session_id],
 3  [request_id],
 4  [start_time] AS '開始時間',
 5  [status] AS '狀態',
 6  [command] AS '命令',
 7  dest.[text] AS 'sql語句', 
 8  DB_NAME([database_id]) AS '資料庫名',
 9  [blocking_session_id] AS '正在阻塞其他會話的會話ID',
10  der.[wait_type] AS '等待資源類型',
11  [wait_time] AS '等待時間',
12  [wait_resource] AS '等待的資源',
13  [dows].[waiting_tasks_count] AS '當前正在進行等待的任務數',
14  [reads] AS '物理讀次數',
15  [writes] AS '寫次數',
16  [logical_reads] AS '邏輯讀次數',
17  [row_count] AS '返回結果行數'
18  FROM sys.[dm_exec_requests] AS der 
19  INNER JOIN [sys].[dm_os_wait_stats] AS dows 
20  ON der.[wait_type]=[dows].[wait_type]
21  CROSS APPLY 
22  sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 
23  WHERE [session_id]>50  
24  ORDER BY [cpu_time] DESC
複製代碼 複製代碼

4、查詢CPU占用最高的SQL語句

複製代碼 複製代碼
 1 SELECT TOP 10
 2    total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
 3    execution_count,
 4    (SELECT SUBSTRING(text, statement_start_offset/2 + 1,
 5       (CASE WHEN statement_end_offset = -1
 6          THEN LEN(CONVERT(nvarchar(max), text)) * 2
 7          ELSE statement_end_offset
 8       END - statement_start_offset)/2)
 9    FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
10 FROM sys.dm_exec_query_stats
11 ORDER BY [avg_cpu_cost] DESC
複製代碼 複製代碼

5、索引缺失查詢

複製代碼 複製代碼
 1 SELECT 
 2     DatabaseName = DB_NAME(database_id)
 3     ,[Number Indexes Missing] = count(*) 
 4 FROM sys.dm_db_missing_index_details
 5 GROUP BY DB_NAME(database_id)
 6 ORDER BY 2 DESC;
 7 SELECT  TOP 10 
 8         [Total Cost]  = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) 
 9         , avg_user_impact
10         , TableName = statement
11         , [EqualityUsage] = equality_columns 
12         , [InequalityUsage] = inequality_columns
13         , [Include Cloumns] = included_columns
14 FROM        sys.dm_db_missing_index_groups g 
15 INNER JOIN    sys.dm_db_missing_index_group_stats s 
16        ON s.group_handle = g.index_group_handle 
17 INNER JOIN    sys.dm_db_missing_index_details d 
18        ON d.index_handle = g.index_handle
19 ORDER BY [Total Cost] DESC;
複製代碼 複製代碼

  找到索引缺失的表,根據查詢結果中的關鍵次逐一建立索引。

  做完這些測試,基本能找到問題。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好用的軟體/終端 命令別名 ip切換 imgcat 終端查看圖片 autojump 目錄快捷跳轉 titan 密碼記錄工具 tldr man 的簡單版,線上查詢linux命令示例 ssh 別名/免密碼登錄 ps 行含義 htop awk parallels descktop Jump Desktop ...
  • 一、打開CMD,進入想安裝的目錄,輸入如下圖所示,安裝一個blog的項目: 二、進入指定目錄即可看到生成的blog項目,如下圖: ...
  • 我們使用 linux 文件系統擴展屬性,能夠對linux文件系統進行進一步保護;從而給文件 賦予一些額外的限制;在有些情況下,能夠對我們的系統提供保護; chattr命令用來改變文件屬性。這項指令可改變存放在ext2文件系統上的文件或目錄屬性,這些屬性共有以下8種模式:詳細作用,可以查看man手冊 ...
  • 導讀 第一章:初識Hadoop 第二章:更高效的WordCount 第三章:把別處的數據搞到Hadoop上 第四章:把Hadoop上的數據搞到別處去 第五章:快一點吧,我的SQL 第六章:一夫多妻制 第七章:越來越多的分析任務 第八章:我的數據要實時 第九章:我的數據要對外 第十章:牛逼高大上的機器 ...
  • 實現目標 搭建兩台MySQL伺服器(一主一從),一臺作為主伺服器,一臺作為從伺服器,主伺服器進行寫操作,從伺服器進行讀操作。 工作流程概述 主伺服器: 開啟二進位日誌 配置唯一的server id 獲得master二進位日誌文件名及位置 創建一個用於slave和master通信的用戶賬號 從伺服器: ...
  • 什麼是索引 + 索引是對 資料庫中一列或者多列的值進行排序的一中結構 ,使用索引可以快速訪問資料庫中表的特定信息。索引的一個主要的目的就是加快檢索表中數據,亦即能協助信息搜索者儘快的找到符合限制條件的記錄的輔助數據結構。 + 簡單來說索引就是資料庫的目錄。 索引有什麼作用 索引的最大作用就是加快數據 ...
  • 1. 前言 電腦的基本工作就是處理數據,包括磁碟文件中的數據,通過網路傳輸的數據流或數據包,資料庫中的結構化數據等。隨著互聯網、物聯網等技術得到越來越廣泛的應用,數據規模不斷增加,TB、PB量級成為常態,對數據的處理已無法由單台電腦完成,而只能由多台機器共同承擔計算任務。而在分散式環境中進行大數 ...
  • Redis 是一種記憶體資料庫,將數據保存在記憶體中,讀寫效率要比傳統的將數據保存在磁碟上的資料庫要快很多。所以,監控 Redis 的記憶體消耗並瞭解 Redis 記憶體模型對高效並長期穩定使用 Redis 至關重要。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...