Reorganize MSSQL (windows.plugin) (#21334)
thiagoftsm committed
Nov 24, 2025 at 12:18 UTC
eabfa36896fafc643c4882c9711be93712fe43d4
2 files changed
+303
-270
src/collectors/windows.plugin/MonitorSQL.c
+11
-22
@@ -2453,9 +2453,8 @@ static void do_mssql_replication(struct mssql_instance *mi, int update_every)
2453
2454
static void mssql_database_backup_restore_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2455
{
2456
- char id[RRD_ID_LENGTH_MAX + 1];
2457
-
2456
if (unlikely(!mdi->st_db_backup_restore_operations)) {
2457
+ char id[RRD_ID_LENGTH_MAX + 1];
2458
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_backup_restore_operations", db, mdi->parent->instanceID);
2459
netdata_fix_chart_name(id);
2460
mdi->st_db_backup_restore_operations = rrdset_create_localhost(
@@ -2493,9 +2492,8 @@ static void mssql_database_backup_restore_chart(struct mssql_db_instance *mdi, c
2492
2493
static void mssql_database_log_flushes_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2494
{
2496
- char id[RRD_ID_LENGTH_MAX + 1];
2497
-
2495
if (unlikely(!mdi->st_db_log_flushes)) {
2496
+ char id[RRD_ID_LENGTH_MAX + 1];
2497
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_log_flushes", db, mdi->parent->instanceID);
2498
netdata_fix_chart_name(id);
2499
mdi->st_db_log_flushes = rrdset_create_localhost(
@@ -2528,9 +2526,8 @@ static void mssql_database_log_flushes_chart(struct mssql_db_instance *mdi, cons
2526
2527
static void mssql_database_log_flushed_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2528
{
2531
- char id[RRD_ID_LENGTH_MAX + 1];
2532
-
2529
if (unlikely(!mdi->st_db_log_flushed)) {
2530
+ char id[RRD_ID_LENGTH_MAX + 1];
2531
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_log_flushed", db, mdi->parent->instanceID);
2532
netdata_fix_chart_name(id);
2533
mdi->st_db_log_flushed = rrdset_create_localhost(
@@ -2561,9 +2558,8 @@ static void mssql_database_log_flushed_chart(struct mssql_db_instance *mdi, cons
2558
2559
static void mssql_transactions_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2560
{
2564
- char id[RRD_ID_LENGTH_MAX + 1];
2565
-
2561
if (unlikely(!mdi->st_db_transactions)) {
2562
+ char id[RRD_ID_LENGTH_MAX + 1];
2563
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_transactions", db, mdi->parent->instanceID);
2564
netdata_fix_chart_name(id);
2565
mdi->st_db_transactions = rrdset_create_localhost(
@@ -2597,9 +2593,8 @@ static void mssql_transactions_chart(struct mssql_db_instance *mdi, const char *
2593
2594
static void mssql_write_transactions_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2595
{
2600
- char id[RRD_ID_LENGTH_MAX + 1];
2601
-
2596
if (unlikely(!mdi->st_db_write_transactions)) {
2597
+ char id[RRD_ID_LENGTH_MAX + 1];
2598
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_write_transactions", db, mdi->parent->instanceID);
2599
netdata_fix_chart_name(id);
2600
mdi->st_db_write_transactions = rrdset_create_localhost(
@@ -2634,9 +2629,8 @@ static void mssql_write_transactions_chart(struct mssql_db_instance *mdi, const
2629
2630
static void mssql_lockwait_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2631
{
2637
- char id[RRD_ID_LENGTH_MAX + 1];
2638
-
2632
if (unlikely(!mdi->st_db_lockwait)) {
2633
+ char id[RRD_ID_LENGTH_MAX + 1];
2634
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_lockwait", db, mdi->parent->instanceID);
2635
netdata_fix_chart_name(id);
2636
mdi->st_db_lockwait = rrdset_create_localhost(
@@ -2667,9 +2661,8 @@ static void mssql_lockwait_chart(struct mssql_db_instance *mdi, const char *db,
2661
2662
static void mssql_deadlock_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2663
{
2670
- char id[RRD_ID_LENGTH_MAX + 1];
2671
-
2664
if (unlikely(!mdi->st_db_deadlock)) {
2665
+ char id[RRD_ID_LENGTH_MAX + 1];
2666
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_deadlocks", db, mdi->parent->instanceID);
2667
netdata_fix_chart_name(id);
2668
mdi->st_db_deadlock = rrdset_create_localhost(
@@ -2779,9 +2772,8 @@ static void mssql_db_state_chart_loop(struct mssql_db_instance *mdi, const char
2772
2773
static void mssql_lock_request_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2774
{
2782
- char id[RRD_ID_LENGTH_MAX + 1];
2783
-
2775
if (unlikely(!mdi->st_lock_requests)) {
2776
+ char id[RRD_ID_LENGTH_MAX + 1];
2777
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_lock_requests", db, mdi->parent->instanceID);
2778
netdata_fix_chart_name(id);
2779
mdi->st_lock_requests = rrdset_create_localhost(
@@ -2812,9 +2804,8 @@ static void mssql_lock_request_chart(struct mssql_db_instance *mdi, const char *
2804
2805
static void mssql_lock_timeout_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2806
{
2815
- char id[RRD_ID_LENGTH_MAX + 1];
2816
-
2807
if (unlikely(!mdi->st_lock_timeouts)) {
2808
+ char id[RRD_ID_LENGTH_MAX + 1];
2809
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_lock_timeouts", db, mdi->parent->instanceID);
2810
netdata_fix_chart_name(id);
2811
mdi->st_lock_timeouts = rrdset_create_localhost(
@@ -2845,9 +2836,8 @@ static void mssql_lock_timeout_chart(struct mssql_db_instance *mdi, const char *
2836
2837
static void mssql_active_transactions_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2838
{
2848
- char id[RRD_ID_LENGTH_MAX + 1];
2849
-
2839
if (unlikely(!mdi->st_db_active_transactions)) {
2840
+ char id[RRD_ID_LENGTH_MAX + 1];
2841
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_active_transactions", db, mdi->parent->instanceID);
2842
netdata_fix_chart_name(id);
2843
mdi->st_db_active_transactions = rrdset_create_localhost(
@@ -2882,9 +2872,8 @@ static void mssql_active_transactions_chart(struct mssql_db_instance *mdi, const
2872
2873
static inline void mssql_data_file_size_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2874
{
2885
- char id[RRD_ID_LENGTH_MAX + 1];
2886
-
2875
if (unlikely(!mdi->st_db_data_file_size)) {
2876
+ char id[RRD_ID_LENGTH_MAX + 1];
2877
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_data_files_size", db, mdi->parent->instanceID);
2878
netdata_fix_chart_name(id);
2879
mdi->st_db_data_file_size = rrdset_create_localhost(
src/collectors/windows.plugin/perflib-mssql.c
+292
-248
@@ -47,106 +47,250 @@ void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance
47
}
48
}
49
50
-void do_mssql_statistics_perflib(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *mi, int update_every)
50
+void do_mssql_auto_parameterization_attempts(struct mssql_instance *mi, int update_every)
51
{
52
- char id[RRD_ID_LENGTH_MAX + 1];
52
+ if (unlikely(!mi->st_stats_auto_param)) {
53
+ char id[RRD_ID_LENGTH_MAX + 1];
54
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_auto_parameterization_attempts", mi->instanceID);
55
+ netdata_fix_chart_name(id);
56
+ mi->st_stats_auto_param = rrdset_create_localhost(
57
+ "mssql",
58
+ id,
59
+ NULL,
60
+ "sql activity",
61
+ "mssql.instance_sqlstats_auto_parameterization_attempts",
62
+ "Failed auto-parameterization attempts",
63
+ "attempts/s",
64
+ PLUGIN_WINDOWS_NAME,
65
+ "PerflibMSSQL",
66
+ PRIO_MSSQL_STATS_AUTO_PARAMETRIZATION,
67
+ update_every,
68
+ RRDSET_TYPE_LINE);
69
+
70
+ mi->rd_stats_auto_param =
71
+ rrddim_add(mi->st_stats_auto_param, "failed", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
72
+
73
+ rrdlabels_add(mi->st_stats_auto_param->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
74
+ }
75
+
76
+ rrddim_set_by_pointer(
77
+ mi->st_stats_auto_param,
78
+ mi->rd_stats_auto_param,
79
+ (collected_number)mi->MSSQLStatsAutoParameterization.current.Data);
80
+ rrdset_done(mi->st_stats_auto_param);
81
+}
82
+
83
+void do_mssql_batch_requests(struct mssql_instance *mi, int update_every)
84
+{
85
+ if (unlikely(!mi->st_stats_batch_request)) {
86
+ char id[RRD_ID_LENGTH_MAX + 1];
87
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_batch_requests", mi->instanceID);
88
+ netdata_fix_chart_name(id);
89
+ mi->st_stats_batch_request = rrdset_create_localhost(
90
+ "mssql",
91
+ id,
92
+ NULL,
93
+ "sql activity",
94
+ "mssql.instance_sqlstats_batch_requests",
95
+ "Total of batches requests",
96
+ "requests/s",
97
+ PLUGIN_WINDOWS_NAME,
98
+ "PerflibMSSQL",
99
+ PRIO_MSSQL_STATS_BATCH_REQUEST,
100
+ update_every,
101
+ RRDSET_TYPE_LINE);
102
+
103
+ mi->rd_stats_batch_request =
104
+ rrddim_add(mi->st_stats_batch_request, "batch", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
105
+
106
+ rrdlabels_add(mi->st_stats_batch_request->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
107
+ }
108
+
109
+ rrddim_set_by_pointer(
110
+ mi->st_stats_batch_request,
111
+ mi->rd_stats_batch_request,
112
+ (collected_number)mi->MSSQLStatsBatchRequests.current.Data);
113
+ rrdset_done(mi->st_stats_batch_request);
114
+}
115
116
+void do_mssql_safe_auto_parameterization_attempts(struct mssql_instance *mi, int update_every)
117
+{
118
+ if (unlikely(!mi->st_stats_safe_auto)) {
119
+ char id[RRD_ID_LENGTH_MAX + 1];
120
+ snprintfz(
121
+ id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_safe_auto_parameterization_attempts", mi->instanceID);
122
+ netdata_fix_chart_name(id);
123
+ mi->st_stats_safe_auto = rrdset_create_localhost(
124
+ "mssql",
125
+ id,
126
+ NULL,
127
+ "sql activity",
128
+ "mssql.instance_sqlstats_safe_auto_parameterization_attempts",
129
+ "Safe auto-parameterization attempts",
130
+ "attempts/s",
131
+ PLUGIN_WINDOWS_NAME,
132
+ "PerflibMSSQL",
133
+ PRIO_MSSQL_STATS_SAFE_AUTO_PARAMETRIZATION,
134
+ update_every,
135
+ RRDSET_TYPE_LINE);
136
+
137
+ mi->rd_stats_safe_auto = rrddim_add(mi->st_stats_safe_auto, "safe", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
138
+
139
+ rrdlabels_add(mi->st_stats_safe_auto->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
140
+ }
141
+
142
+ rrddim_set_by_pointer(
143
+ mi->st_stats_safe_auto,
144
+ mi->rd_stats_safe_auto,
145
+ (collected_number)mi->MSSQLStatSafeAutoParameterization.current.Data);
146
+ rrdset_done(mi->st_stats_safe_auto);
147
+}
148
+
149
+void do_mssql_statistics_perflib(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *mi, int update_every)
150
+{
151
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, mi->objectName[NETDATA_MSSQL_SQL_STATS]);
152
if (unlikely(!pObjectType))
153
return;
154
58
- if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLStatsAutoParameterization))) {
59
- if (unlikely(!mi->st_stats_auto_param)) {
60
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_auto_parameterization_attempts", mi->instanceID);
61
- netdata_fix_chart_name(id);
62
- mi->st_stats_auto_param = rrdset_create_localhost(
63
- "mssql",
64
- id,
65
- NULL,
66
- "sql activity",
67
- "mssql.instance_sqlstats_auto_parameterization_attempts",
68
- "Failed auto-parameterization attempts",
69
- "attempts/s",
70
- PLUGIN_WINDOWS_NAME,
71
- "PerflibMSSQL",
72
- PRIO_MSSQL_STATS_AUTO_PARAMETRIZATION,
73
- update_every,
74
- RRDSET_TYPE_LINE);
155
+ if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLStatsAutoParameterization)))
156
+ do_mssql_auto_parameterization_attempts(mi, update_every);
157
76
- mi->rd_stats_auto_param =
77
- rrddim_add(mi->st_stats_auto_param, "failed", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
158
+ if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLStatsBatchRequests)))
159
+ do_mssql_batch_requests(mi, update_every);
160
79
- rrdlabels_add(mi->st_stats_auto_param->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
80
- }
161
+ if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLStatSafeAutoParameterization)))
162
+ do_mssql_safe_auto_parameterization_attempts(mi, update_every);
163
+}
164
82
- rrddim_set_by_pointer(
83
- mi->st_stats_auto_param,
84
- mi->rd_stats_auto_param,
85
- (collected_number)mi->MSSQLStatsAutoParameterization.current.Data);
86
- rrdset_done(mi->st_stats_auto_param);
165
+void do_mssql_memmgr_connection_memory_bytes(struct mssql_instance *mi, int update_every)
166
+{
167
+ if (unlikely(!mi->st_conn_memory)) {
168
+ char id[RRD_ID_LENGTH_MAX + 1];
169
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_connection_memory_bytes", mi->instanceID);
170
+ netdata_fix_chart_name(id);
171
+ mi->st_conn_memory = rrdset_create_localhost(
172
+ "mssql",
173
+ id,
174
+ NULL,
175
+ "memory",
176
+ "mssql.instance_memmgr_connection_memory_bytes",
177
+ "Amount of dynamic memory to maintain connections",
178
+ "bytes",
179
+ PLUGIN_WINDOWS_NAME,
180
+ "PerflibMSSQL",
181
+ PRIO_MSSQL_MEMMGR_CONNECTION_MEMORY_BYTES,
182
+ update_every,
183
+ RRDSET_TYPE_LINE);
184
+
185
+ mi->rd_conn_memory = rrddim_add(mi->st_conn_memory, "memory", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
186
+
187
+ rrdlabels_add(mi->st_conn_memory->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
188
}
189
89
- if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLStatsBatchRequests))) {
90
- if (unlikely(!mi->st_stats_batch_request)) {
91
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_batch_requests", mi->instanceID);
92
- netdata_fix_chart_name(id);
93
- mi->st_stats_batch_request = rrdset_create_localhost(
94
- "mssql",
95
- id,
96
- NULL,
97
- "sql activity",
98
- "mssql.instance_sqlstats_batch_requests",
99
- "Total of batches requests",
100
- "requests/s",
101
- PLUGIN_WINDOWS_NAME,
102
- "PerflibMSSQL",
103
- PRIO_MSSQL_STATS_BATCH_REQUEST,
104
- update_every,
105
- RRDSET_TYPE_LINE);
190
+ rrddim_set_by_pointer(
191
+ mi->st_conn_memory,
192
+ mi->rd_conn_memory,
193
+ (collected_number)(mi->MSSQLConnectionMemoryBytes.current.Data * 1024));
194
+ rrdset_done(mi->st_conn_memory);
195
+}
196
107
- mi->rd_stats_batch_request =
108
- rrddim_add(mi->st_stats_batch_request, "batch", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
197
+void do_mssql_memmgr_external_benefit_of_memory(struct mssql_instance *mi, int update_every)
198
+{
199
+ if (unlikely(!mi->st_ext_benefit_mem)) {
200
+ char id[RRD_ID_LENGTH_MAX + 1];
201
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_external_benefit_of_memory", mi->instanceID);
202
+ netdata_fix_chart_name(id);
203
+ mi->st_ext_benefit_mem = rrdset_create_localhost(
204
+ "mssql",
205
+ id,
206
+ NULL,
207
+ "memory",
208
+ "mssql.instance_memmgr_external_benefit_of_memory",
209
+ "Performance benefit from adding memory to a specific cache",
210
+ "bytes",
211
+ PLUGIN_WINDOWS_NAME,
212
+ "PerflibMSSQL",
213
+ PRIO_MSSQL_MEMMGR_EXTERNAL_BENEFIT_OF_MEMORY,
214
+ update_every,
215
+ RRDSET_TYPE_LINE);
216
+
217
+ mi->rd_ext_benefit_mem = rrddim_add(mi->st_ext_benefit_mem, "benefit", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
218
+
219
+ rrdlabels_add(mi->st_ext_benefit_mem->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
220
+ }
221
110
- rrdlabels_add(mi->st_stats_batch_request->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
111
- }
222
+ rrddim_set_by_pointer(
223
+ mi->st_ext_benefit_mem,
224
+ mi->rd_ext_benefit_mem,
225
+ (collected_number)mi->MSSQLExternalBenefitOfMemory.current.Data);
226
+ rrdset_done(mi->st_ext_benefit_mem);
227
+}
228
113
- rrddim_set_by_pointer(
114
- mi->st_stats_batch_request,
115
- mi->rd_stats_batch_request,
116
- (collected_number)mi->MSSQLStatsBatchRequests.current.Data);
117
- rrdset_done(mi->st_stats_batch_request);
229
+void do_mssql_memmgr_pending_memory_grants(struct mssql_instance *mi, int update_every)
230
+{
231
+ if (unlikely(!mi->st_pending_mem_grant)) {
232
+ char id[RRD_ID_LENGTH_MAX + 1];
233
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_pending_memory_grants", mi->instanceID);
234
+ netdata_fix_chart_name(id);
235
+ mi->st_pending_mem_grant = rrdset_create_localhost(
236
+ "mssql",
237
+ id,
238
+ NULL,
239
+ "memory",
240
+ "mssql.instance_memmgr_pending_memory_grants",
241
+ "Process waiting for memory grant",
242
+ "processes",
243
+ PLUGIN_WINDOWS_NAME,
244
+ "PerflibMSSQL",
245
+ PRIO_MSSQL_MEMMGR_PENDING_MEMORY_GRANTS,
246
+ update_every,
247
+ RRDSET_TYPE_LINE);
248
+
249
+ mi->rd_pending_mem_grant =
250
+ rrddim_add(mi->st_pending_mem_grant, "pending", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
251
+
252
+ rrdlabels_add(mi->st_pending_mem_grant->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
253
}
254
120
- if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLStatSafeAutoParameterization))) {
121
- if (unlikely(!mi->st_stats_safe_auto)) {
122
- snprintfz(
123
- id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_safe_auto_parameterization_attempts", mi->instanceID);
124
- netdata_fix_chart_name(id);
125
- mi->st_stats_safe_auto = rrdset_create_localhost(
126
- "mssql",
127
- id,
128
- NULL,
129
- "sql activity",
130
- "mssql.instance_sqlstats_safe_auto_parameterization_attempts",
131
- "Safe auto-parameterization attempts",
132
- "attempts/s",
133
- PLUGIN_WINDOWS_NAME,
134
- "PerflibMSSQL",
135
- PRIO_MSSQL_STATS_SAFE_AUTO_PARAMETRIZATION,
136
- update_every,
137
- RRDSET_TYPE_LINE);
255
+ rrddim_set_by_pointer(
256
+ mi->st_pending_mem_grant,
257
+ mi->rd_pending_mem_grant,
258
+ (collected_number)mi->MSSQLPendingMemoryGrants.current.Data);
259
139
- mi->rd_stats_safe_auto = rrddim_add(mi->st_stats_safe_auto, "safe", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
140
-
141
- rrdlabels_add(mi->st_stats_safe_auto->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
142
- }
260
+ rrdset_done(mi->st_pending_mem_grant);
261
+}
262
144
- rrddim_set_by_pointer(
145
- mi->st_stats_safe_auto,
146
- mi->rd_stats_safe_auto,
147
- (collected_number)mi->MSSQLStatSafeAutoParameterization.current.Data);
148
- rrdset_done(mi->st_stats_safe_auto);
263
+void do_mssql_memmgr_memmgr_server_memory(struct mssql_instance *mi, int update_every)
264
+{
265
+ if (unlikely(!mi->st_mem_tot_server)) {
266
+ char id[RRD_ID_LENGTH_MAX + 1];
267
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_server_memory", mi->instanceID);
268
+ netdata_fix_chart_name(id);
269
+ mi->st_mem_tot_server = rrdset_create_localhost(
270
+ "mssql",
271
+ id,
272
+ NULL,
273
+ "memory",
274
+ "mssql.instance_memmgr_server_memory",
275
+ "Memory committed",
276
+ "bytes",
277
+ PLUGIN_WINDOWS_NAME,
278
+ "PerflibMSSQL",
279
+ PRIO_MSSQL_MEMMGR_TOTAL_SERVER,
280
+ update_every,
281
+ RRDSET_TYPE_LINE);
282
+
283
+ mi->rd_mem_tot_server = rrddim_add(mi->st_mem_tot_server, "memory", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
284
+
285
+ rrdlabels_add(mi->st_mem_tot_server->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
286
}
287
+
288
+ rrddim_set_by_pointer(
289
+ mi->st_mem_tot_server,
290
+ mi->rd_mem_tot_server,
291
+ (collected_number)(mi->MSSQLTotalServerMemory.current.Data * 1024));
292
+
293
+ rrdset_done(mi->st_mem_tot_server);
294
}
295
296
void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *mi, int update_every)
@@ -157,140 +301,31 @@ void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *mi,
301
if (unlikely(!pObjectType))
302
return;
303
160
- if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLConnectionMemoryBytes))) {
161
- if (unlikely(!mi->st_conn_memory)) {
162
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_connection_memory_bytes", mi->instanceID);
163
- netdata_fix_chart_name(id);
164
- mi->st_conn_memory = rrdset_create_localhost(
165
- "mssql",
166
- id,
167
- NULL,
168
- "memory",
169
- "mssql.instance_memmgr_connection_memory_bytes",
170
- "Amount of dynamic memory to maintain connections",
171
- "bytes",
172
- PLUGIN_WINDOWS_NAME,
173
- "PerflibMSSQL",
174
- PRIO_MSSQL_MEMMGR_CONNECTION_MEMORY_BYTES,
175
- update_every,
176
- RRDSET_TYPE_LINE);
177
-
178
- mi->rd_conn_memory = rrddim_add(mi->st_conn_memory, "memory", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
179
-
180
- rrdlabels_add(mi->st_conn_memory->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
181
- }
182
-
183
- rrddim_set_by_pointer(
184
- mi->st_conn_memory,
185
- mi->rd_conn_memory,
186
- (collected_number)(mi->MSSQLConnectionMemoryBytes.current.Data * 1024));
187
- rrdset_done(mi->st_conn_memory);
188
- }
304
+ if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLConnectionMemoryBytes)))
305
+ do_mssql_memmgr_connection_memory_bytes(mi, update_every);
306
307
if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLExternalBenefitOfMemory))) {
191
- if (unlikely(!mi->st_ext_benefit_mem)) {
192
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_external_benefit_of_memory", mi->instanceID);
193
- netdata_fix_chart_name(id);
194
- mi->st_ext_benefit_mem = rrdset_create_localhost(
195
- "mssql",
196
- id,
197
- NULL,
198
- "memory",
199
- "mssql.instance_memmgr_external_benefit_of_memory",
200
- "Performance benefit from adding memory to a specific cache",
201
- "bytes",
202
- PLUGIN_WINDOWS_NAME,
203
- "PerflibMSSQL",
204
- PRIO_MSSQL_MEMMGR_EXTERNAL_BENEFIT_OF_MEMORY,
205
- update_every,
206
- RRDSET_TYPE_LINE);
207
-
208
- mi->rd_ext_benefit_mem = rrddim_add(mi->st_ext_benefit_mem, "benefit", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
209
-
210
- rrdlabels_add(mi->st_ext_benefit_mem->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
211
- }
212
-
213
- rrddim_set_by_pointer(
214
- mi->st_ext_benefit_mem,
215
- mi->rd_ext_benefit_mem,
216
- (collected_number)mi->MSSQLExternalBenefitOfMemory.current.Data);
217
- rrdset_done(mi->st_ext_benefit_mem);
308
+ do_mssql_memmgr_external_benefit_of_memory(mi, update_every);
309
}
310
311
if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLPendingMemoryGrants))) {
221
- if (unlikely(!mi->st_pending_mem_grant)) {
222
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_pending_memory_grants", mi->instanceID);
223
- netdata_fix_chart_name(id);
224
- mi->st_pending_mem_grant = rrdset_create_localhost(
225
- "mssql",
226
- id,
227
- NULL,
228
- "memory",
229
- "mssql.instance_memmgr_pending_memory_grants",
230
- "Process waiting for memory grant",
231
- "processes",
232
- PLUGIN_WINDOWS_NAME,
233
- "PerflibMSSQL",
234
- PRIO_MSSQL_MEMMGR_PENDING_MEMORY_GRANTS,
235
- update_every,
236
- RRDSET_TYPE_LINE);
237
-
238
- mi->rd_pending_mem_grant =
239
- rrddim_add(mi->st_pending_mem_grant, "pending", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
240
-
241
- rrdlabels_add(mi->st_pending_mem_grant->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
242
- }
243
-
244
- rrddim_set_by_pointer(
245
- mi->st_pending_mem_grant,
246
- mi->rd_pending_mem_grant,
247
- (collected_number)mi->MSSQLPendingMemoryGrants.current.Data);
248
-
249
- rrdset_done(mi->st_pending_mem_grant);
312
+ do_mssql_memmgr_pending_memory_grants(mi, update_every);
313
}
314
315
if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLTotalServerMemory))) {
253
- if (unlikely(!mi->st_mem_tot_server)) {
254
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_server_memory", mi->instanceID);
255
- netdata_fix_chart_name(id);
256
- mi->st_mem_tot_server = rrdset_create_localhost(
257
- "mssql",
258
- id,
259
- NULL,
260
- "memory",
261
- "mssql.instance_memmgr_server_memory",
262
- "Memory committed",
263
- "bytes",
264
- PLUGIN_WINDOWS_NAME,
265
- "PerflibMSSQL",
266
- PRIO_MSSQL_MEMMGR_TOTAL_SERVER,
267
- update_every,
268
- RRDSET_TYPE_LINE);
269
-
270
- mi->rd_mem_tot_server = rrddim_add(mi->st_mem_tot_server, "memory", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
271
-
272
- rrdlabels_add(mi->st_mem_tot_server->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
273
- }
274
-
275
- rrddim_set_by_pointer(
276
- mi->st_mem_tot_server,
277
- mi->rd_mem_tot_server,
278
- (collected_number)(mi->MSSQLTotalServerMemory.current.Data * 1024));
279
-
280
- rrdset_done(mi->st_mem_tot_server);
316
+ do_mssql_memmgr_memmgr_server_memory(mi, update_every);
317
}
318
}
319
320
void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *mi, int update_every)
321
{
286
- char id[RRD_ID_LENGTH_MAX + 1];
287
-
322
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, mi->objectName[NETDATA_MSSQL_SQL_ERRORS]);
323
if (unlikely(!pObjectType))
324
return;
325
326
if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLSQLErrorsTotal))) {
327
if (unlikely(!mi->st_sql_errors)) {
328
+ char id[RRD_ID_LENGTH_MAX + 1];
329
snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sql_errors_total", mi->instanceID);
330
netdata_fix_chart_name(id);
331
mi->st_sql_errors = rrdset_create_localhost(
@@ -318,69 +353,78 @@ void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *mi, int
353
}
354
}
355
356
+void do_mssql_user_connections(struct mssql_instance *mi, int update_every)
357
+{
358
+ if (unlikely(!mi->st_user_connections)) {
359
+ char id[RRD_ID_LENGTH_MAX + 1];
360
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_user_connections", mi->instanceID);
361
+ netdata_fix_chart_name(id);
362
+ mi->st_user_connections = rrdset_create_localhost(
363
+ "mssql",
364
+ id,
365
+ NULL,
366
+ "connections",
367
+ "mssql.instance_user_connections",
368
+ "User connections",
369
+ "connections",
370
+ PLUGIN_WINDOWS_NAME,
371
+ "PerflibMSSQL",
372
+ PRIO_MSSQL_USER_CONNECTIONS,
373
+ update_every,
374
+ RRDSET_TYPE_LINE);
375
+
376
+ mi->rd_user_connections = rrddim_add(mi->st_user_connections, "user", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
377
+
378
+ rrdlabels_add(mi->st_user_connections->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
379
+ }
380
322
-void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *mi, int update_every)
381
+ rrddim_set_by_pointer(
382
+ mi->st_user_connections, mi->rd_user_connections, (collected_number)mi->MSSQLUserConnections.current.Data);
383
+ rrdset_done(mi->st_user_connections);
384
+}
385
+
386
+void do_mssql_blocked_processes(struct mssql_instance *mi, int update_every)
387
{
324
- char id[RRD_ID_LENGTH_MAX + 1];
388
+ if (unlikely(!mi->st_process_blocked)) {
389
+ char id[RRD_ID_LENGTH_MAX + 1];
390
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_blocked_process", mi->instanceID);
391
+ netdata_fix_chart_name(id);
392
+ mi->st_process_blocked = rrdset_create_localhost(
393
+ "mssql",
394
+ id,
395
+ NULL,
396
+ "processes",
397
+ "mssql.instance_blocked_processes",
398
+ "Blocked processes",
399
+ "process",
400
+ PLUGIN_WINDOWS_NAME,
401
+ "PerflibMSSQL",
402
+ PRIO_MSSQL_BLOCKED_PROCESSES,
403
+ update_every,
404
+ RRDSET_TYPE_LINE);
405
+
406
+ mi->rd_process_blocked = rrddim_add(mi->st_process_blocked, "blocked", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
407
+
408
+ rrdlabels_add(mi->st_process_blocked->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
409
+ }
410
+
411
+ rrddim_set_by_pointer(
412
+ mi->st_process_blocked, mi->rd_process_blocked, (collected_number)mi->MSSQLBlockedProcesses.current.Data);
413
+ rrdset_done(mi->st_process_blocked);
414
+}
415
416
+void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *mi, int update_every)
417
+{
418
PERF_OBJECT_TYPE *pObjectType =
419
perflibFindObjectTypeByName(pDataBlock, mi->objectName[NETDATA_MSSQL_GENERAL_STATS]);
420
if (unlikely(!pObjectType))
421
return;
422
423
if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLUserConnections))) {
332
- if (unlikely(!mi->st_user_connections)) {
333
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_user_connections", mi->instanceID);
334
- netdata_fix_chart_name(id);
335
- mi->st_user_connections = rrdset_create_localhost(
336
- "mssql",
337
- id,
338
- NULL,
339
- "connections",
340
- "mssql.instance_user_connections",
341
- "User connections",
342
- "connections",
343
- PLUGIN_WINDOWS_NAME,
344
- "PerflibMSSQL",
345
- PRIO_MSSQL_USER_CONNECTIONS,
346
- update_every,
347
- RRDSET_TYPE_LINE);
348
-
349
- mi->rd_user_connections = rrddim_add(mi->st_user_connections, "user", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
350
-
351
- rrdlabels_add(mi->st_user_connections->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
352
- }
353
-
354
- rrddim_set_by_pointer(
355
- mi->st_user_connections, mi->rd_user_connections, (collected_number)mi->MSSQLUserConnections.current.Data);
356
- rrdset_done(mi->st_user_connections);
424
+ do_mssql_user_connections(mi, update_every);
425
}
426
427
if (likely(perflibGetObjectCounter(pDataBlock, pObjectType, &mi->MSSQLBlockedProcesses))) {
360
- if (unlikely(!mi->st_process_blocked)) {
361
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_blocked_process", mi->instanceID);
362
- netdata_fix_chart_name(id);
363
- mi->st_process_blocked = rrdset_create_localhost(
364
- "mssql",
365
- id,
366
- NULL,
367
- "processes",
368
- "mssql.instance_blocked_processes",
369
- "Blocked processes",
370
- "process",
371
- PLUGIN_WINDOWS_NAME,
372
- "PerflibMSSQL",
373
- PRIO_MSSQL_BLOCKED_PROCESSES,
374
- update_every,
375
- RRDSET_TYPE_LINE);
376
-
377
- mi->rd_process_blocked = rrddim_add(mi->st_process_blocked, "blocked", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
378
-
379
- rrdlabels_add(mi->st_process_blocked->rrdlabels, "mssql_instance", mi->instanceID, RRDLABEL_SRC_AUTO);
380
- }
381
-
382
- rrddim_set_by_pointer(
383
- mi->st_process_blocked, mi->rd_process_blocked, (collected_number)mi->MSSQLBlockedProcesses.current.Data);
384
- rrdset_done(mi->st_process_blocked);
428
+ do_mssql_blocked_processes(mi, update_every);
429
}
430
}