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

Commit

Permalink
Mssql additional metrics (#1041)
Browse files Browse the repository at this point in the history
Co-authored-by: ilyam8 <[email protected]>
  • Loading branch information
thiagoftsm and ilyam8 authored Dec 28, 2022
1 parent 724436c commit d490083
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 0 deletions.
4 changes: 4 additions & 0 deletions modules/wmi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,13 @@ 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_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 |
| mssql_instance_memmgr_server_memory | mssql instance | memory | bytes |
| mssql_instance_sql_errors | mssql instance | db_offline, info, kill_connection, user | errors |
| mssql_instance_sqlstats_auto_parameterization_attempts | mssql instance | failed | attempts/s |
| mssql_instance_sqlstats_batch_requests | mssql instance | batch | requests/s |
| mssql_instance_sqlstats_safe_auto_parameterization_attempts | mssql instance | safe | attempts/s |
| mssql_instance_sqlstats_sql_compilations | mssql instance | compilations | compilations/s |
| mssql_instance_sqlstats_sql_recompilations | mssql instance | recompiles | recompiles/s |
Expand Down
59 changes: 59 additions & 0 deletions modules/wmi/charts.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,13 @@ const (
prioMSSQLBlockedProcess
prioMSSQLUserConnections
prioMSSQLLocksLockWait
prioMSSQLMemmgrConnectionMemoryBytes
prioMSSQLMemmgrExternalBenefitOfMemory
prioMSSQLMemmgrPendingMemoryGrants
prioMSSQLMemTotalServer
prioMSSQLSqlErrorsTotal
prioMSSQLStatsAutoParameterization
prioMSSQLStatsBatchRequests
prioMSSQLStatsSafeAutoParameterization
prioMSSQLStatsCompilations
prioMSSQLStatsRecompilations
Expand Down Expand Up @@ -845,9 +849,13 @@ var (
mssqlBufManIOPSChart.Copy(),
mssqlBlockedProcessChart.Copy(),
mssqlLocksWaitChart.Copy(),
mssqlMemmgrConnectionMemoryBytesChart.Copy(),
mssqlMemmgrExternalBenefitOfMemoryChart.Copy(),
mssqlMemmgrPendingMemoryChart.Copy(),
mssqlMemmgrTotalServerChart.Copy(),
mssqlSQLErrorsTotalChart.Copy(),
mssqlStatsAutoParamChart.Copy(),
mssqlStatsBatchRequestsChart.Copy(),
mssqlStatsSafeAutoChart.Copy(),
mssqlStatsCompilationChart.Copy(),
mssqlStatsRecompilationChart.Copy(),
Expand Down Expand Up @@ -974,6 +982,28 @@ var (
}
// Memory Manager
// Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-memory-manager-object?view=sql-server-ver16
mssqlMemmgrConnectionMemoryBytesChart = module.Chart{
ID: "mssql_instance_%s_memmgr_connection_memory_bytes",
Title: "Amount of dynamic memory to maintain connections",
Units: "bytes",
Fam: "mssql",
Ctx: "wmi.mssql_instance_memmgr_connection_memory_bytes",
Priority: prioMSSQLMemmgrConnectionMemoryBytes,
Dims: module.Dims{
{ID: "mssql_instance_%s_memmgr_connection_memory_bytes", Name: "memory", Algo: module.Incremental},
},
}
mssqlMemmgrExternalBenefitOfMemoryChart = module.Chart{
ID: "mssql_instance_%s_memmgr_external_benefit_of_memory",
Title: "Performance benefit from adding memory to a specific cache",
Units: "bytes",
Fam: "mssql",
Ctx: "wmi.mssql_instance_memmgr_external_benefit_of_memory",
Priority: prioMSSQLMemmgrExternalBenefitOfMemory,
Dims: module.Dims{
{ID: "mssql_instance_%s_memmgr_external_benefit_of_memory", Name: "benefit", Algo: module.Incremental},
},
}
mssqlMemmgrPendingMemoryChart = module.Chart{
ID: "mssql_instance_%s_memmgr_pending_memory_grants",
Title: "Process waiting for memory grant",
Expand All @@ -996,6 +1026,24 @@ var (
{ID: "mssql_instance_%s_memmgr_total_server_memory_bytes", Name: "memory"},
},
}

// SQL errors
// Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-errors-object?view=sql-server-ver16
mssqlSQLErrorsTotalChart = module.Chart{
ID: "mssql_instance_%s_sql_errors_total",
Title: "Errors",
Units: "errors/s",
Fam: "mssql",
Ctx: "wmi.mssql_instance_sql_errors",
Priority: prioMSSQLSqlErrorsTotal,
Dims: module.Dims{
{ID: "mssql_instance_%s_sql_errors_total_db_offline_errors", Name: "db_offline", Algo: module.Incremental},
{ID: "mssql_instance_%s_sql_errors_total_info_errors", Name: "info", Algo: module.Incremental},
{ID: "mssql_instance_%s_sql_errors_total_kill_connection_errors", Name: "kill_connection", Algo: module.Incremental},
{ID: "mssql_instance_%s_sql_errors_total_user_errors", Name: "user", Algo: module.Incremental},
},
}

// SQL Statistic
// Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-statistics-object?view=sql-server-ver16
mssqlStatsAutoParamChart = module.Chart{
Expand All @@ -1009,6 +1057,17 @@ var (
{ID: "mssql_instance_%s_sqlstats_auto_parameterization_attempts", Name: "failed", Algo: module.Incremental},
},
}
mssqlStatsBatchRequestsChart = module.Chart{
ID: "mssql_instance_%s_sqlstats_batch_requests",
Title: "Total of batches requests",
Units: "requests/s",
Fam: "mssql",
Ctx: "wmi.mssql_instance_sqlstats_batch_requests",
Priority: prioMSSQLStatsBatchRequests,
Dims: module.Dims{
{ID: "mssql_instance_%s_sqlstats_batch_requests", Name: "batch", Algo: module.Incremental},
},
}
mssqlStatsSafeAutoChart = module.Chart{
ID: "mssql_instance_%s_sqlstats_safe_auto_parameterization_attempts",
Title: "Safe auto-parameterization attempts",
Expand Down
36 changes: 36 additions & 0 deletions modules/wmi/collect_mssql.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@ const (
metricMSSQLBlockedProcesses = "windows_mssql_genstats_blocked_processes"
metricMSSQLUserConnections = "windows_mssql_genstats_user_connections"
metricMSSQLLockWait = "windows_mssql_locks_lock_wait_seconds"
metricMSSQLConnectionMemoryBytes = "windows_mssql_memmgr_connection_memory_bytes"
metricMSSQLExternalBenefitOfMemory = "windows_mssql_memmgr_external_benefit_of_memory"
metricMSSQLPendingMemoryGrants = "windows_mssql_memmgr_pending_memory_grants"
metricMSSQLSQLErrorsTotal = "windows_mssql_sql_errors_total"
metricMSSQLTotalServerMemory = "windows_mssql_memmgr_total_server_memory_bytes"
metricMSSQLStatsAutoParameterization = "windows_mssql_sqlstats_auto_parameterization_attempts"
metricMSSQLStatsBatchRequests = "windows_mssql_sqlstats_batch_requests"
metricMSSQLStatSafeAutoParameterization = "windows_mssql_sqlstats_safe_auto_parameterization_attempts"
metricMSSQLCompilations = "windows_mssql_sqlstats_sql_compilations"
metricMSSQLRecompilations = "windows_mssql_sqlstats_sql_recompilations"
Expand Down Expand Up @@ -101,12 +105,33 @@ func (w *WMI) collectMSSQL(mx map[string]int64, pms prometheus.Series) {
}
}
}
for _, pm := range pms.FindByName(metricMSSQLConnectionMemoryBytes) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
mx[px+name+"_memmgr_connection_memory_bytes"] = int64(pm.Value)
}
}
for _, pm := range pms.FindByName(metricMSSQLExternalBenefitOfMemory) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
mx[px+name+"_memmgr_external_benefit_of_memory"] = int64(pm.Value)
}
}
for _, pm := range pms.FindByName(metricMSSQLPendingMemoryGrants) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
mx[px+name+"_memmgr_pending_memory_grants"] = int64(pm.Value)
}
}
for _, pm := range pms.FindByName(metricMSSQLSQLErrorsTotal) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
if res := pm.Labels.Get("resource"); res != "" && res != "_Total" {
dim := mssqlParseResource(res)
mx[px+name+"_sql_errors_total_"+dim] = int64(pm.Value)
}
}
}
for _, pm := range pms.FindByName(metricMSSQLTotalServerMemory) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
Expand All @@ -119,6 +144,12 @@ func (w *WMI) collectMSSQL(mx map[string]int64, pms prometheus.Series) {
mx[px+name+"_sqlstats_auto_parameterization_attempts"] = int64(pm.Value)
}
}
for _, pm := range pms.FindByName(metricMSSQLStatsBatchRequests) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
mx[px+name+"_sqlstats_batch_requests"] = int64(pm.Value)
}
}
for _, pm := range pms.FindByName(metricMSSQLStatSafeAutoParameterization) {
if name := pm.Labels.Get("mssql_instance"); name != "" {
instances[name] = true
Expand Down Expand Up @@ -212,3 +243,8 @@ func (w *WMI) collectMSSQL(mx map[string]int64, pms prometheus.Series) {
}
}
}

func mssqlParseResource(name string) string {
name = strings.ReplaceAll(name, " ", "_")
return strings.ToLower(name)
}
7 changes: 7 additions & 0 deletions modules/wmi/wmi_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,8 @@ func TestWMI_Collect(t *testing.T) {
"mssql_instance_SQLEXPRESS_cache_hit_ratio": 100,
"mssql_instance_SQLEXPRESS_genstats_blocked_processes": 0,
"mssql_instance_SQLEXPRESS_genstats_user_connections": 1,
"mssql_instance_SQLEXPRESS_memmgr_connection_memory_bytes": 1015808,
"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_lock_wait_seconds": 0,
Expand All @@ -408,7 +410,12 @@ func TestWMI_Collect(t *testing.T) {
"mssql_instance_SQLEXPRESS_resource_RID_locks_lock_wait_seconds": 0,
"mssql_instance_SQLEXPRESS_resource_RowGroup_locks_lock_wait_seconds": 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,
"mssql_instance_SQLEXPRESS_sql_errors_total_kill_connection_errors": 0,
"mssql_instance_SQLEXPRESS_sql_errors_total_user_errors": 29,
"mssql_instance_SQLEXPRESS_sqlstats_auto_parameterization_attempts": 37,
"mssql_instance_SQLEXPRESS_sqlstats_batch_requests": 2972,
"mssql_instance_SQLEXPRESS_sqlstats_safe_auto_parameterization_attempts": 2,
"mssql_instance_SQLEXPRESS_sqlstats_sql_compilations": 376,
"mssql_instance_SQLEXPRESS_sqlstats_sql_recompilations": 8,
Expand Down

0 comments on commit d490083

Please sign in to comment.