@cryptotaxi247 / netdata-1 / commits / eabfa3689

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 }