SQL SERVER數據庫服務器CPU不能全部利用原因分析
背景
客戶凌晨把HIS數據庫遷移到配置更高的新服務器,上午業務高峰時應用非常緩慢,嚴重影響到業務運行。
1.現象
通過SQL專家雲實時可視化界面看到大量的綠點,綠點表示會話在等待某項資源,綠點越大說明等待的會話數越多。
進入活動會話列表,發現大量會話的狀態為runnable,runnable代表這個會話可以執行,但沒有 CPU 可以分配給它,可以理解為正在等待 CPU 這項系統資源。
但是此時服務器的CPU利用率並不高,在30%左右。
從任務管理器里查看,服務器有128核心,但是絕大多數核心根本利用不上。
SQL專家雲深度體檢里有相應的診斷,SQL Server在線的CPU核數40小於檢測到的CPU核數128,說明SQL Server只使用了40個核心。
沒有SQL專家雲,可以使用下面的語句查詢。
--CPU總數
SELECT
cpu_count
FROM
sys.dm_os_sys_info
--在線CPU數
SELECT
COUNT(*)
FROM
sys.dm_os_schedulers
WHERE
is_online = 1
AND status = 'VISIBLE ONLINE'
2.分析
從SQL Server 2012開始,企業版有兩種許可證模式,基於核心和基於服務器+CAL。基於服務器+CAL許可證限制SQL Server最多能使用20個物理處理器,如果超線程已啟用,這將是40個邏輯處理器。
確認數據庫的版本為SQL server 2012 Enterpr