Skip to content
This repository has been archived by the owner on Mar 27, 2024. It is now read-only.

MSSQL: New metric menus #1073

Merged
merged 7 commits into from
Feb 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions modules/wmi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ Labels per scope:
| mssql.instance_blocked_processes | mssql instance | blocked | processes |
| mssql.instance_user_connection | mssql instance | user | connections |
| mssql.instance_locks_lock_wait | mssql instance | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
| mssql.instance_locks_deadlocks | mssql instance | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
| mssql.instance_memmgr_connection_memory_bytes | mssql instance | memory | bytes |
| mssql.instance_memmgr_external_benefit_of_memory | mssql instance | benefit | bytes |
| mssql.instance_memmgr_pending_memory_grants | mssql instance | pending | processes |
Expand Down
110 changes: 70 additions & 40 deletions modules/wmi/charts.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,46 +77,50 @@ const (
prioIISWebsiteLogonAttemptsRate
prioIISWebsiteUptime

prioMSSQLAccessMethodPageSplits
prioMSSQLCacheHitRatio
prioMSSQLBufferCheckpointPages
prioMSSQLBufferPageLifeExpectancy
prioMSSQLBufManIOPS
// Connections
prioMSSQLUserConnections

// Database
prioMSSQLDatabaseActiveTransactions
// Transactions
prioMSSQLDatabaseTransactions
prioMSSQLDatabaseActiveTransactions
prioMSSQLDatabaseWriteTransactions

// DB backup
prioMSSQLDatabaseBackupRestoreOperations
prioMSSQLDatabaseDataFileSize
prioMSSQLDatabaseLogFlushed
prioMSSQLDatabaseLogFlushes
prioMSSQLDatabaseLogFlushed

prioMSSQLBlockedProcess
// Size
prioMSSQLDatabaseDataFileSize

prioMSSQLUserConnections
// SQL activity
prioMSSQLStatsBatchRequests
prioMSSQLStatsCompilations
prioMSSQLStatsRecompilations
prioMSSQLStatsAutoParameterization
prioMSSQLStatsSafeAutoParameterization

// Locks
prioMSSQLLocksLockWait
// Processes
prioMSSQLBlockedProcess

// Buffer Cache
prioMSSQLCacheHitRatio
prioMSSQLBufManIOPS
prioMSSQLBufferCheckpointPages
prioMSSQLAccessMethodPageSplits
prioMSSQLBufferPageLifeExpectancy

// Memory
prioMSSQLMemmgrConnectionMemoryBytes
prioMSSQLMemTotalServer
prioMSSQLMemmgrExternalBenefitOfMemory
prioMSSQLMemmgrPendingMemoryGrants
prioMSSQLMemTotalServer

// Locks
prioMSSQLLocksLockWait
prioMSSQLLocksDeadLocks

// Error
prioMSSQLSqlErrorsTotal

// SQL stats
prioMSSQLStatsAutoParameterization
prioMSSQLStatsBatchRequests
prioMSSQLStatsSafeAutoParameterization
prioMSSQLStatsCompilations
prioMSSQLStatsRecompilations

prioServiceState
prioServiceStatus

Expand Down Expand Up @@ -893,6 +897,7 @@ var (
mssqlBufManIOPSChart.Copy(),
mssqlBlockedProcessChart.Copy(),
mssqlLocksWaitChart.Copy(),
mssqlDeadLocksChart.Copy(),
mssqlMemmgrConnectionMemoryBytesChart.Copy(),
mssqlMemmgrExternalBenefitOfMemoryChart.Copy(),
mssqlMemmgrPendingMemoryChart.Copy(),
Expand Down Expand Up @@ -921,7 +926,7 @@ var (
ID: "mssql_instance_%s_accessmethods_page_splits",
Title: "Page splits",
Units: "splits/s",
Fam: "access",
Fam: "buffer cache",
Ctx: "mssql.instance_accessmethods_page_splits",
Priority: prioMSSQLAccessMethodPageSplits,
Dims: module.Dims{
Expand All @@ -935,7 +940,7 @@ var (
ID: "mssql_instance_%s_cache_hit_ratio",
Title: "Buffer Cache hit ratio",
Units: "percentage",
Fam: "buffer",
Fam: "buffer cache",
Ctx: "mssql.instance_cache_hit_ratio",
Priority: prioMSSQLCacheHitRatio,
Dims: module.Dims{
Expand All @@ -947,7 +952,7 @@ var (
ID: "mssql_instance_%s_bufman_checkpoint_pages",
Title: "Flushed pages",
Units: "pages/s",
Fam: "buffer",
Fam: "buffer cache",
Ctx: "mssql.instance_bufman_checkpoint_pages",
Priority: prioMSSQLBufferCheckpointPages,
Dims: module.Dims{
Expand All @@ -959,7 +964,7 @@ var (
ID: "mssql_instance_%s_bufman_page_life_expectancy",
Title: "Page life expectancy",
Units: "seconds",
Fam: "buffer",
Fam: "buffer cache",
Ctx: "mssql.instance_bufman_page_life_expectancy",
Priority: prioMSSQLBufferPageLifeExpectancy,
Dims: module.Dims{
Expand All @@ -971,7 +976,7 @@ var (
ID: "mssql_instance_%s_bufman_iops",
Title: "Number of pages input and output",
Units: "pages/s",
Fam: "buffer",
Fam: "buffer cache",
Ctx: "mssql.instance_bufman_iops",
Priority: prioMSSQLBufManIOPS,
Dims: module.Dims{
Expand Down Expand Up @@ -1032,6 +1037,31 @@ var (
{ID: "mssql_instance_%s_resource_Xact_locks_lock_wait_seconds", Name: "xact", Algo: module.Incremental},
},
}
mssqlDeadLocksChart = module.Chart{
OverModule: "mssql",
ID: "mssql_instance_%s_locks_deadlocks",
Title: "Lock requests that resulted in deadlock.",
Units: "locks/s",
Fam: "locks",
Ctx: "mssql.instance_locks_deadlocks",
Priority: prioMSSQLLocksLockWait,
Dims: module.Dims{
{ID: "mssql_instance_%s_resource_AllocUnit_locks_deadlocks", Name: "alloc_unit", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_Application_locks_deadlocks", Name: "application", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_Database_locks_deadlocks", Name: "database", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_Extent_locks_deadlocks", Name: "extent", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_File_locks_deadlocks", Name: "file", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_HoBT_locks_deadlocks", Name: "hobt", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_Key_locks_deadlocks", Name: "key", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_Metadata_locks_deadlocks", Name: "metadata", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_OIB_locks_deadlocks", Name: "oib", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_Object_locks_deadlocks", Name: "object", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_Page_locks_deadlocks", Name: "page", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_RID_locks_deadlocks", Name: "rid", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_RowGroup_locks_deadlocks", Name: "row_group", Algo: module.Incremental},
{ID: "mssql_instance_%s_resource_Xact_locks_deadlocks", Name: "xact", Algo: module.Incremental},
},
}

// Memory Manager
// Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-memory-manager-object?view=sql-server-ver16
Expand Down Expand Up @@ -1109,7 +1139,7 @@ var (
ID: "mssql_instance_%s_sqlstats_auto_parameterization_attempts",
Title: "Failed auto-parameterization attempts",
Units: "attempts/s",
Fam: "sql stats",
Fam: "sql activity",
Ctx: "mssql.instance_sqlstats_auto_parameterization_attempts",
Priority: prioMSSQLStatsAutoParameterization,
Dims: module.Dims{
Expand All @@ -1121,7 +1151,7 @@ var (
ID: "mssql_instance_%s_sqlstats_batch_requests",
Title: "Total of batches requests",
Units: "requests/s",
Fam: "sql stats",
Fam: "sql activity",
Ctx: "mssql.instance_sqlstats_batch_requests",
Priority: prioMSSQLStatsBatchRequests,
Dims: module.Dims{
Expand All @@ -1133,7 +1163,7 @@ var (
ID: "mssql_instance_%s_sqlstats_safe_auto_parameterization_attempts",
Title: "Safe auto-parameterization attempts",
Units: "attempts/s",
Fam: "sql stats",
Fam: "sql activity",
Ctx: "mssql.instance_sqlstats_safe_auto_parameterization_attempts",
Priority: prioMSSQLStatsSafeAutoParameterization,
Dims: module.Dims{
Expand All @@ -1145,7 +1175,7 @@ var (
ID: "mssql_instance_%s_sqlstats_sql_compilations",
Title: "SQL compilations",
Units: "compilations/s",
Fam: "sql stats",
Fam: "sql activity",
Ctx: "mssql.instance_sqlstats_sql_compilations",
Priority: prioMSSQLStatsCompilations,
Dims: module.Dims{
Expand All @@ -1157,7 +1187,7 @@ var (
ID: "mssql_instance_%s_sqlstats_sql_recompilations",
Title: "SQL re-compilations",
Units: "recompiles/s",
Fam: "sql stats",
Fam: "sql activity",
Ctx: "mssql.instance_sqlstats_sql_recompilations",
Priority: prioMSSQLStatsRecompilations,
Dims: module.Dims{
Expand All @@ -1172,7 +1202,7 @@ var (
ID: "mssql_db_%s_instance_%s_active_transactions",
Title: "Active transactions per database",
Units: "transactions",
Fam: "db transactions",
Fam: "transactions",
Ctx: "mssql.database_active_transactions",
Priority: prioMSSQLDatabaseActiveTransactions,
Dims: module.Dims{
Expand All @@ -1184,7 +1214,7 @@ var (
ID: "mssql_db_%s_instance_%s_backup_restore_operations",
Title: "Backup IO per database",
Units: "operations/s",
Fam: "db backup",
Fam: "transactions",
Ctx: "mssql.database_backup_restore_operations",
Priority: prioMSSQLDatabaseBackupRestoreOperations,
Dims: module.Dims{
Expand All @@ -1196,7 +1226,7 @@ var (
ID: "mssql_db_%s_instance_%s_data_files_size",
Title: "Current database size",
Units: "bytes",
Fam: "db size",
Fam: "size",
Ctx: "mssql.database_data_files_size",
Priority: prioMSSQLDatabaseDataFileSize,
Dims: module.Dims{
Expand All @@ -1208,7 +1238,7 @@ var (
ID: "mssql_db_%s_instance_%s_log_flushed",
Title: "Log flushed",
Units: "bytes/s",
Fam: "db logs",
Fam: "transactions",
Ctx: "mssql.database_log_flushed",
Priority: prioMSSQLDatabaseLogFlushed,
Dims: module.Dims{
Expand All @@ -1220,7 +1250,7 @@ var (
ID: "mssql_db_%s_instance_%s_log_flushes",
Title: "Log flushes",
Units: "flushes/s",
Fam: "db logs",
Fam: "transactions",
Ctx: "mssql.database_log_flushes",
Priority: prioMSSQLDatabaseLogFlushes,
Dims: module.Dims{
Expand All @@ -1232,7 +1262,7 @@ var (
ID: "mssql_db_%s_instance_%s_transactions",
Title: "Transactions",
Units: "transactions/s",
Fam: "db transactions",
Fam: "transactions",
Ctx: "mssql.database_transactions",
Priority: prioMSSQLDatabaseTransactions,
Dims: module.Dims{
Expand All @@ -1244,7 +1274,7 @@ var (
ID: "mssql_db_%s_instance_%s_write_transactions",
Title: "Write transactions",
Units: "transactions/s",
Fam: "db transactions",
Fam: "transactions",
Ctx: "mssql.instance_write_transactions",
Priority: prioMSSQLDatabaseWriteTransactions,
Dims: module.Dims{
Expand Down
9 changes: 9 additions & 0 deletions modules/wmi/collect_mssql.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const (
metricMSSQLBlockedProcesses = "windows_mssql_genstats_blocked_processes"
metricMSSQLUserConnections = "windows_mssql_genstats_user_connections"
metricMSSQLLockWait = "windows_mssql_locks_lock_wait_seconds"
metricMSSQLDeadlocks = "windows_mssql_locks_deadlocks"
metricMSSQLConnectionMemoryBytes = "windows_mssql_memmgr_connection_memory_bytes"
metricMSSQLExternalBenefitOfMemory = "windows_mssql_memmgr_external_benefit_of_memory"
metricMSSQLPendingMemoryGrants = "windows_mssql_memmgr_pending_memory_grants"
Expand Down Expand Up @@ -105,6 +106,14 @@ func (w *WMI) collectMSSQL(mx map[string]int64, pms prometheus.Series) {
}
}
}
for _, pm := range pms.FindByName(metricMSSQLDeadlocks) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
if res := pm.Labels.Get("resource"); res != "" {
mx[px+name+"_resource_"+res+"_locks_deadlocks"] = int64(pm.Value)
}
}
}
for _, pm := range pms.FindByName(metricMSSQLConnectionMemoryBytes) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
Expand Down
16 changes: 16 additions & 0 deletions modules/wmi/testdata/v0.20.0/metrics.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1707,6 +1707,22 @@ windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Page"} 0
windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="RID"} 0
windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Xact"} 0
# HELP windows_mssql_locks_deadlocks (Locks.NumberofDeadlocks)
# TYPE windows_mssql_locks_deadlocks counter
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Application"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Database"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Extent"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="File"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Key"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Metadata"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="OIB"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Object"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Page"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="RID"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Xact"} 0
# HELP windows_mssql_locks_wait_time_seconds (Locks.AverageWaitTimems Total time in seconds which locks have been holding resources)
# TYPE windows_mssql_locks_wait_time_seconds gauge
windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
Expand Down
14 changes: 14 additions & 0 deletions modules/wmi/wmi_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -396,19 +396,33 @@ func TestWMI_Collect(t *testing.T) {
"mssql_instance_SQLEXPRESS_memmgr_external_benefit_of_memory": 0,
"mssql_instance_SQLEXPRESS_memmgr_pending_memory_grants": 0,
"mssql_instance_SQLEXPRESS_memmgr_total_server_memory_bytes": 198836224,
"mssql_instance_SQLEXPRESS_resource_AllocUnit_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_AllocUnit_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_Application_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_Application_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_Database_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_Database_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_Extent_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_Extent_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_File_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_File_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_HoBT_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_HoBT_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_Key_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_Key_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_Metadata_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_Metadata_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_OIB_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_OIB_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_Object_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_Object_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_Page_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_Page_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_RID_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_RID_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_RowGroup_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_RowGroup_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_Xact_locks_deadlocks": 0,
"mssql_instance_SQLEXPRESS_resource_Xact_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_sql_errors_total_db_offline_errors": 0,
"mssql_instance_SQLEXPRESS_sql_errors_total_info_errors": 766,
Expand Down