Sql-Server

是否可以查詢託管 SQL Server 2014+ Express 的系統上的總 CPU 負載?

  • August 9, 2022

我可以通過查詢視圖來獲取可用記憶體[master].[sys].[dm_os_sys_memory],但是我沒有找到任何類似的東西來獲取有關 CPU 負載的資訊。

我只找到有關通過 SQL 伺服器本身查詢 CPU 負載的資訊,這不是我主要關心的,我需要係統上的全部負載。我查看了系統視圖,但我找不到任何東西,或者至少不明白我是否找到了它……

我想通過 T-SQL 得到這個的原因是我們已經有一個監控應用程序,它正在查詢我們所有的系統以獲取其他資訊,並且能夠擴展它而不是設置一些全新的東西會很好。

目前感興趣的系統正在執行 2014 和 2017 express,但它可能很快就會包括 2019/2022 express。

您可以在 Powershell 中創建一個代理作業,該作業每隔 10 秒執行一次並擷取此資訊

CREATE TABLE CounterLog (id varchar(10) PRIMARY KEY, Counter decimal(18,9));
INSERT CounterLog (id) VALUES ('CPU');

EXEC msdb.sys.sp_add_job
   @job_name = N'Get Counters';

EXEC msdb.sys.sp_add_jobstep
   @job_name = N'Get Counters', 
   @step_name = N'Get CPU Load',
   @subsystem = N'PowerShell',  
   @command = N'
$load = (Get-Counter "\Processor(_Total)\% Processor Time").CounterSamples[0].CookedValue;

Invoke-SqlCmd -ServerInstance "." -Database "YourDb" -Query "
UPDATE CounterLog
SET Counter = ${$load}
WHERE id = ''CPU'';"
',   
   @on_success_action = 3;

EXEC msdb.sys.sp_add_jobschedule
   @job_name = N'Get Counters',
   @freq_type = 4,
   @freq_interval = 1, 
   @freq_subday_type = 2, 
   @freq_subday_interval = 10;

引用自:https://dba.stackexchange.com/questions/315398