J'ai vérifié via SQL Server Profiler que ma demande par seconde est d'environ 30 demandes/s, comme en corroborée par le moniteur d'activité SSMS mais sys.dm_os_performance_counters
signale des centaines de millions/s.
Une idée de ce qui pourrait causer cette divergence brute?
Mettre en doute:
SELECT
RTrim(LTrim(object_name)) as object_name,
RTrim(LTrim(counter_name)) as counter_name,
cntr_value
FROM
sys.dm_os_performance_counters
WHERE
instance_name IN ('', '_Total')
and counter_name IN (
N'Batch Requests/sec'
, N'SQL Compilations/sec'
, N'SQL Re-Compilations/sec'
, N'Transactions/sec')
Résultats:
object_name counter_name cntr_value
SQLServer:Databases Transactions/sec 191721399
SQLServer:SQL Statistics Batch Requests/sec 242955426
SQLServer:SQL Statistics SQL Compilations/sec 42048371
SQLServer:SQL Statistics SQL Re-Compilations/sec 1200947
Du Documentation :
Remarque: pour les compteurs par seconde, cette valeur est cumulative. La valeur de la vitesse doit être calculée en échantillonnant la valeur à des intervalles de temps discrets. La différence entre deux valeurs d'échantillon successives est égale à la vitesse de l'intervalle de temps utilisé.
Si vous souhaitez quelque chose qui fait déjà un échantillonnage d'intervalles, sp_blitzfirst est assez soigné et libre, et une divulgation complète: je suis un contributeur, etc.
DECLARE @DATEDEMARRAGE datetime
SELECT @DATEDEMARRAGE = create_date FROM sys.databases
WHERE name ='tempdb'
SELECT cntr_value / datediff (second,@DATEDEMARRAGE,getdate()) as [Batch Requests/sec]
FROM sys.dm_os_performance_counters
WHERE counter_name like '%Batch Requests/se%'
J'ai peut-être trouvé une partie de ceci à partir de Stackoverflow, mais j'aime utiliser Sélectionnez SQLSERVER_START_TIME à partir de SYS.DM_OS_SYS_INFO pour cela. Beaucoup de données dans sys.dm_os_performance_counters sont cumulatives. Pour les serveurs plus silencieux, vous devrez peut-être convertir en types de données décimales.
J'ai plusieurs versions de la requête ci-dessous pour différentes métriques PERF.
with perf_data as
(
select @@servername as Server_name, instance_name as Database_Name,
counter_name, cntr_value as Total_Tran_Since_Startup
,SQL_Start_Time = (select sqlserver_start_time from sys.dm_os_sys_info)
--,Time_now = getdate()
--,Diff_Seconds = (SELECT DATEDIFF(ss, (select sqlserver_start_time from
sys.dm_os_sys_info), getdate()))
,Tran_per_Second = (cast(cntr_value as decimal)/(SELECT DATEDIFF(ss, (select
sqlserver_start_time from sys.dm_os_sys_info), getdate())))
from sys.dm_os_performance_counters
where counter_name in ('Transactions/sec', 'Redone Bytes/sec')
and instance_name not in ('master', 'msdb', 'model', 'mssqlsystemresource',
'TESTAG', '_Total', 'TESTTG'
,'targettest')
--group by instance_name, counter_name, cntr_value
--and Server_name in ('server1', 'server2','server3')
--order by counter_name, instance_name)
)
select * from perf_data
--where Server_name in ('server1', 'server2','server3', 'server4' )
order by counter_name, tran_per_second desc