Skip to content

Commit

Permalink
feat(inputs.sqlserver): Add persistent version store metrics (#15137)
Browse files Browse the repository at this point in the history
  • Loading branch information
crenstrom authored Apr 11, 2024
1 parent b8c9a6f commit 820d795
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
1 change: 1 addition & 0 deletions plugins/inputs/sqlserver/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ ensure to check additional setup section in this documentation.
- SQLServerAvailabilityReplicaStates: Collects availability replica state information from `sys.dm_hadr_availability_replica_states` for a High Availability / Disaster Recovery (HADR) setup
- SQLServerDatabaseReplicaStates: Collects database replica state information from `sys.dm_hadr_database_replica_states` for a High Availability / Disaster Recovery (HADR) setup
- SQLServerRecentBackups: Collects latest full, differential and transaction log backup date and size from `msdb.dbo.backupset`
- SQLServerPersistentVersionStore: Collects persistent version store information from `sys.dm_tran_persistent_version_store_stats` for databases with Accelerated Database Recovery enabled

### Output Measures

Expand Down
2 changes: 2 additions & 0 deletions plugins/inputs/sqlserver/sqlserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ func (s *SQLServer) initQueries() error {
queries["SQLServerDatabaseReplicaStates"] =
Query{ScriptName: "SQLServerDatabaseReplicaStates", Script: sqlServerDatabaseReplicaStates, ResultByRow: false}
queries["SQLServerRecentBackups"] = Query{ScriptName: "SQLServerRecentBackups", Script: sqlServerRecentBackups, ResultByRow: false}
queries["SQLServerPersistentVersionStore"] =
Query{ScriptName: "SQLServerPersistentVersionStore", Script: sqlServerPersistentVersionStore, ResultByRow: false}
} else {
// If this is an AzureDB instance, grab some extra metrics
if s.AzureDB {
Expand Down
34 changes: 34 additions & 0 deletions plugins/inputs/sqlserver/sqlserverqueries.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
// - 1300 --> SQL Server 2016
// - 1400 --> SQL Server 2017
// - 1500 --> SQL Server 2019
// - 1600 --> SQL Server 2022

// Thanks Bob Ward (http://aka.ms/bobwardms)
// and the folks at Stack Overflow
Expand Down Expand Up @@ -1445,3 +1446,36 @@ LEFT JOIN BackupsWithSize bd ON (d.name = bd.[Database] AND (bd.Type = 'Differen
LEFT JOIN BackupsWithSize bt ON (d.name = bt.[Database] AND (bt.Type = 'Transaction Log' OR bt.Type IS NULL))
WHERE d.name <> 'tempdb' AND d.source_database_id IS NULL
`

// Collects persistent version store information from `sys.dm_tran_persistent_version_store_stats` for Databases where Accelerated Database Recovery is enabled.
// ADR was added in SQL Server 2019
const sqlServerPersistentVersionStore string = `
SET DEADLOCK_PRIORITY -10;
IF SERVERPROPERTY('EngineEdition') NOT IN (2,3,4) BEGIN /*NOT IN Standard,Enterpris,Express*/
DECLARE @ErrorMessage AS nvarchar(500) = 'Telegraf - Connection string Server:'+ @@ServerName + ',Database:' + DB_NAME() +' is not a SQL Server Standard,Enterprise or Express. Check the database_type parameter in the telegraf configuration.';
RAISERROR (@ErrorMessage,11,1)
RETURN
END;
DECLARE
@MajorMinorVersion AS int = CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar),4) AS int)*100 + CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS nvarchar),3) AS int)
IF @MajorMinorVersion >= 1500 BEGIN
SELECT
'sqlserver_persistent_version_store_stats' AS [measurement]
,REPLACE(@@SERVERNAME,'\',':') AS [sql_instance]
,db_name(pvs.database_id) as [database_name]
,FILEGROUP_NAME(pvs.pvs_filegroup_id) as [filegroup_name]
,d.snapshot_isolation_state_desc
,pvs.persistent_version_store_size_kb
,pvs.online_index_version_store_size_kb
,pvs.current_aborted_transaction_count
,pvs.pvs_off_row_page_skipped_low_water_mark
,pvs.pvs_off_row_page_skipped_min_useful_xts
FROM sys.dm_tran_persistent_version_store_stats pvs
INNER JOIN sys.databases d
on d.database_id = pvs.database_id
and d.is_accelerated_database_recovery_on = 1
END;
`

0 comments on commit 820d795

Please sign in to comment.