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

Commit

Permalink
MSSQL: New metric menus (#1073)
Browse files Browse the repository at this point in the history
  • Loading branch information
thiagoftsm authored Feb 1, 2023
1 parent 9df2324 commit c617d71
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 40 deletions.
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

0 comments on commit c617d71

Please sign in to comment.