Fix MSSQL algorithm (Windows.plugin) (#19035)
Co-authored-by: ilyam8 <ilya@netdata.cloud>
thiagoftsm committed
Nov 20, 2024 at 22:33 UTC
29ac1595004db35053dc0d586c7143d03a58cf3b
1 file changed
+259
-205
src/collectors/windows.plugin/perflib-mssql.c
+259
-205
@@ -71,13 +71,6 @@ struct mssql_instance {
71
RRDSET *st_deadLocks;
72
DICTIONARY *locks_instances;
73
74
- RRDSET *st_db_data_file_size;
75
- RRDSET *st_db_active_transactions;
76
- RRDSET *st_db_backup_restore_operations;
77
- RRDSET *st_db_log_flushed;
78
- RRDSET *st_db_log_flushes;
79
- RRDSET *st_db_transactions;
80
- RRDSET *st_db_write_transactions;
74
DICTIONARY *databases;
75
76
RRDSET *st_conn_memory;
@@ -112,6 +105,13 @@ struct mssql_instance {
105
COUNTER_DATA MSSQLRecompilations;
106
};
107
108
+enum lock_instance_idx {
109
+ NETDATA_MSSQL_ENUM_MLI_IDX_WAIT,
110
+ NETDATA_MSSQL_ENUM_MLI_IDX_DEAD_LOCKS,
111
+
112
+ NETDATA_MSSQL_ENUM_MLI_IDX_END
113
+};
114
+
115
struct mssql_lock_instance {
116
struct mssql_instance *parent;
117
@@ -120,18 +120,32 @@ struct mssql_lock_instance {
120
121
RRDDIM *rd_lockWait;
122
RRDDIM *rd_deadLocks;
123
+
124
+ uint32_t updated;
125
+};
126
+
127
+enum db_instance_idx {
128
+ NETDATA_MSSQL_ENUM_MDI_IDX_FILE_SIZE,
129
+ NETDATA_MSSQL_ENUM_MDI_IDX_ACTIVE_TRANSACTIONS,
130
+ NETDATA_MSSQL_ENUM_MDI_IDX_BACKUP_RESTORE_OP,
131
+ NETDATA_MSSQL_ENUM_MDI_IDX_LOG_FLUSHED,
132
+ NETDATA_MSSQL_ENUM_MDI_IDX_LOG_FLUSHES,
133
+ NETDATA_MSSQL_ENUM_MDI_IDX_TRANSACTIONS,
134
+ NETDATA_MSSQL_ENUM_MDI_IDX_WRITE_TRANSACTIONS,
135
+
136
+ NETDATA_MSSQL_ENUM_MDI_IDX_END
137
};
138
139
struct mssql_db_instance {
140
struct mssql_instance *parent;
141
128
- COUNTER_DATA MSSQLDatabaseActiveTransactions;
129
- COUNTER_DATA MSSQLDatabaseBackupRestoreOperations;
130
- COUNTER_DATA MSSQLDatabaseDataFileSize;
131
- COUNTER_DATA MSSQLDatabaseLogFlushed;
132
- COUNTER_DATA MSSQLDatabaseLogFlushes;
133
- COUNTER_DATA MSSQLDatabaseTransactions;
134
- COUNTER_DATA MSSQLDatabaseWriteTransactions;
142
+ RRDSET *st_db_data_file_size;
143
+ RRDSET *st_db_active_transactions;
144
+ RRDSET *st_db_backup_restore_operations;
145
+ RRDSET *st_db_log_flushed;
146
+ RRDSET *st_db_log_flushes;
147
+ RRDSET *st_db_transactions;
148
+ RRDSET *st_db_write_transactions;
149
150
RRDDIM *rd_db_data_file_size;
151
RRDDIM *rd_db_active_transactions;
@@ -140,6 +154,16 @@ struct mssql_db_instance {
154
RRDDIM *rd_db_log_flushes;
155
RRDDIM *rd_db_transactions;
156
RRDDIM *rd_db_write_transactions;
157
+
158
+ COUNTER_DATA MSSQLDatabaseActiveTransactions;
159
+ COUNTER_DATA MSSQLDatabaseBackupRestoreOperations;
160
+ COUNTER_DATA MSSQLDatabaseDataFileSize;
161
+ COUNTER_DATA MSSQLDatabaseLogFlushed;
162
+ COUNTER_DATA MSSQLDatabaseLogFlushes;
163
+ COUNTER_DATA MSSQLDatabaseTransactions;
164
+ COUNTER_DATA MSSQLDatabaseWriteTransactions;
165
+
166
+ uint32_t updated;
167
};
168
169
static DICTIONARY *mssql_instances = NULL;
@@ -182,7 +206,6 @@ static void initialize_mssql_objects(struct mssql_instance *p, const char *insta
206
p->objectName[NETDATA_MSSQL_ACCESS_METHODS] = strdup(name);
207
208
p->instanceID = strdup(instance);
185
- netdata_fix_chart_name(p->instanceID);
209
}
210
211
static inline void initialize_mssql_keys(struct mssql_instance *p) {
@@ -226,7 +249,6 @@ void dict_mssql_insert_databases_cb(const DICTIONARY_ITEM *item __maybe_unused,
249
struct mssql_db_instance *ptr = value;
250
251
ptr->MSSQLDatabaseDataFileSize.key = "Data File(s) Size (KB)";
229
-
252
ptr->MSSQLDatabaseActiveTransactions.key = "Active Transactions";
253
ptr->MSSQLDatabaseBackupRestoreOperations.key = "Backup/Restore Throughput/sec";
254
ptr->MSSQLDatabaseLogFlushed.key = "Log Bytes Flushed/sec";
@@ -315,19 +337,21 @@ static int initialize(void) {
337
338
static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
339
char id[RRD_ID_LENGTH_MAX + 1];
340
+
341
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_GENERAL_STATS]);
342
if (!pObjectType)
343
return;
344
345
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLUserConnections)) {
323
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_user_connection", p->instanceID);
346
if (!p->st_user_connections) {
347
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_user_connections", p->instanceID);
348
+ netdata_fix_chart_name(id);
349
p->st_user_connections = rrdset_create_localhost(
350
"mssql",
351
id,
352
NULL,
353
"connections",
330
- "mssql.instance_user_connection",
354
+ "mssql.instance_user_connections",
355
"User connections",
356
"connections",
357
PLUGIN_WINDOWS_NAME,
@@ -336,8 +360,7 @@ static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_ins
360
update_every,
361
RRDSET_TYPE_LINE);
362
339
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_genstats_user_connections", p->instanceID);
340
- p->rd_user_connections = rrddim_add(p->st_user_connections, id, "user", 1, 1, RRD_ALGORITHM_ABSOLUTE);
363
+ p->rd_user_connections = rrddim_add(p->st_user_connections, "user", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
364
365
rrdlabels_add(p->st_user_connections->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
366
}
@@ -348,8 +371,9 @@ static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_ins
371
}
372
373
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLBlockedProcesses)) {
351
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_blocked_process", p->instanceID);
374
if (!p->st_process_blocked) {
375
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_blocked_process", p->instanceID);
376
+ netdata_fix_chart_name(id);
377
p->st_process_blocked = rrdset_create_localhost(
378
"mssql",
379
id,
@@ -364,8 +388,7 @@ static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_ins
388
update_every,
389
RRDSET_TYPE_LINE);
390
367
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_genstats_blocked_processes", p->instanceID);
368
- p->rd_process_blocked = rrddim_add(p->st_process_blocked, id, "blocked", 1, 1, RRD_ALGORITHM_ABSOLUTE);
391
+ p->rd_process_blocked = rrddim_add(p->st_process_blocked, "blocked", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
392
393
rrdlabels_add(p->st_process_blocked->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
394
}
@@ -378,13 +401,15 @@ static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_ins
401
402
static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
403
char id[RRD_ID_LENGTH_MAX + 1];
404
+
405
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_SQL_STATS]);
406
if (!pObjectType)
407
return;
408
409
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLStatsAutoParameterization)) {
386
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_auto_parameterization_attempts", p->instanceID);
410
if (!p->st_stats_auto_param) {
411
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_auto_parameterization_attempts", p->instanceID);
412
+ netdata_fix_chart_name(id);
413
p->st_stats_auto_param = rrdset_create_localhost(
414
"mssql",
415
id,
@@ -399,9 +424,8 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
424
update_every,
425
RRDSET_TYPE_LINE);
426
402
- snprintfz(
403
- id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_sqlstats_auto_parameterization_attempts", p->instanceID);
404
- p->rd_stats_auto_param = rrddim_add(p->st_stats_auto_param, id, "failed", 1, 1, RRD_ALGORITHM_INCREMENTAL);
427
+ p->rd_stats_auto_param =
428
+ rrddim_add(p->st_stats_auto_param, "failed", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
429
430
rrdlabels_add(p->st_stats_auto_param->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
431
}
@@ -414,8 +438,9 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
438
}
439
440
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLStatsBatchRequests)) {
417
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_batch_requests", p->instanceID);
441
if (!p->st_stats_batch_request) {
442
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_batch_requests", p->instanceID);
443
+ netdata_fix_chart_name(id);
444
p->st_stats_batch_request = rrdset_create_localhost(
445
"mssql",
446
id,
@@ -430,9 +455,8 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
455
update_every,
456
RRDSET_TYPE_LINE);
457
433
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_sqlstats_batch_requests", p->instanceID);
458
p->rd_stats_batch_request =
435
- rrddim_add(p->st_stats_batch_request, id, "batch", 1, 1, RRD_ALGORITHM_INCREMENTAL);
459
+ rrddim_add(p->st_stats_batch_request, "batch", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
460
461
rrdlabels_add(p->st_stats_batch_request->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
462
}
@@ -445,8 +469,9 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
469
}
470
471
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLStatSafeAutoParameterization)) {
448
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_safe_auto_parameterization_attempts", p->instanceID);
472
if (!p->st_stats_safe_auto) {
473
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_safe_auto_parameterization_attempts", p->instanceID);
474
+ netdata_fix_chart_name(id);
475
p->st_stats_safe_auto = rrdset_create_localhost(
476
"mssql",
477
id,
@@ -461,9 +486,7 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
486
update_every,
487
RRDSET_TYPE_LINE);
488
464
- snprintfz(
465
- id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_sqlstats_safe_auto_parameterization_attempts", p->instanceID);
466
- p->rd_stats_safe_auto = rrddim_add(p->st_stats_safe_auto, id, "safe", 1, 1, RRD_ALGORITHM_INCREMENTAL);
489
+ p->rd_stats_safe_auto = rrddim_add(p->st_stats_safe_auto, "safe", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
490
491
rrdlabels_add(p->st_stats_safe_auto->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
492
}
@@ -476,8 +499,9 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
499
}
500
501
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLCompilations)) {
479
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_sql_compilations", p->instanceID);
502
if (!p->st_stats_compilation) {
503
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_sql_compilations", p->instanceID);
504
+ netdata_fix_chart_name(id);
505
p->st_stats_compilation = rrdset_create_localhost(
506
"mssql",
507
id,
@@ -492,9 +516,8 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
516
update_every,
517
RRDSET_TYPE_LINE);
518
495
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_sqlstats_sql_compilations", p->instanceID);
519
p->rd_stats_compilation =
497
- rrddim_add(p->st_stats_compilation, id, "compilations", 1, 1, RRD_ALGORITHM_INCREMENTAL);
520
+ rrddim_add(p->st_stats_compilation, "compilations", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
521
522
rrdlabels_add(p->st_stats_compilation->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
523
}
@@ -505,8 +528,9 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
528
}
529
530
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLRecompilations)) {
508
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_sql_recompilations", p->instanceID);
531
if (!p->st_stats_recompiles) {
532
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sqlstats_sql_recompilations", p->instanceID);
533
+ netdata_fix_chart_name(id);
534
p->st_stats_recompiles = rrdset_create_localhost(
535
"mssql",
536
id,
@@ -521,9 +545,8 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
545
update_every,
546
RRDSET_TYPE_LINE);
547
524
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_sqlstats_sql_recompilations", p->instanceID);
548
p->rd_stats_recompiles =
526
- rrddim_add(p->st_stats_recompiles, id, "recompiles", 1, 1, RRD_ALGORITHM_INCREMENTAL);
549
+ rrddim_add(p->st_stats_recompiles, "recompiles", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
550
551
rrdlabels_add(p->st_stats_recompiles->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
552
}
@@ -536,14 +559,16 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
559
560
static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
561
char id[RRD_ID_LENGTH_MAX + 1];
562
+
563
PERF_OBJECT_TYPE *pObjectType =
564
perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_BUFFER_MANAGEMENT]);
565
if (!pObjectType)
566
return;
567
568
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLBufferCacheHits)) {
545
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_cache_hit_ratio", p->instanceID);
569
if (!p->st_buff_cache_hits) {
570
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_cache_hit_ratio", p->instanceID);
571
+ netdata_fix_chart_name(id);
572
p->st_buff_cache_hits = rrdset_create_localhost(
573
"mssql",
574
id,
@@ -558,8 +583,7 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
583
update_every,
584
RRDSET_TYPE_LINE);
585
561
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_cache_hit_ratio", p->instanceID);
562
- p->rd_buff_cache_hits = rrddim_add(p->st_buff_cache_hits, id, "hit_ratio", 1, 1, RRD_ALGORITHM_ABSOLUTE);
586
+ p->rd_buff_cache_hits = rrddim_add(p->st_buff_cache_hits, "hit_ratio", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
587
588
rrdlabels_add(p->st_buff_cache_hits->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
589
}
@@ -570,8 +594,9 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
594
}
595
596
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLBufferCheckpointPages)) {
573
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_bufman_checkpoint_pages", p->instanceID);
597
if (!p->st_buff_checkpoint_pages) {
598
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_bufman_checkpoint_pages", p->instanceID);
599
+ netdata_fix_chart_name(id);
600
p->st_buff_checkpoint_pages = rrdset_create_localhost(
601
"mssql",
602
id,
@@ -586,9 +611,8 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
611
update_every,
612
RRDSET_TYPE_LINE);
613
589
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_bufman_checkpoint_pages", p->instanceID);
614
p->rd_buff_checkpoint_pages =
591
- rrddim_add(p->st_buff_checkpoint_pages, id, "log", 1, 1, RRD_ALGORITHM_INCREMENTAL);
615
+ rrddim_add(p->st_buff_checkpoint_pages, "log", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
616
617
rrdlabels_add(p->st_buff_checkpoint_pages->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
618
}
@@ -601,8 +625,9 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
625
}
626
627
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLBufferPageLifeExpectancy)) {
604
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_bufman_page_life_expectancy", p->instanceID);
628
if (!p->st_buff_cache_page_life_expectancy) {
629
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_bufman_page_life_expectancy", p->instanceID);
630
+ netdata_fix_chart_name(id);
631
p->st_buff_cache_page_life_expectancy = rrdset_create_localhost(
632
"mssql",
633
id,
@@ -617,9 +642,8 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
642
update_every,
643
RRDSET_TYPE_LINE);
644
620
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_bufman_page_life_expectancy_seconds", p->instanceID);
621
- p->rd_buff_cache_page_life_expectancy =
622
- rrddim_add(p->st_buff_cache_page_life_expectancy, id, "life_expectancy", 1, 1, RRD_ALGORITHM_ABSOLUTE);
645
+ p->rd_buff_cache_page_life_expectancy = rrddim_add(
646
+ p->st_buff_cache_page_life_expectancy, "life_expectancy", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
647
648
rrdlabels_add(
649
p->st_buff_cache_page_life_expectancy->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
@@ -634,8 +658,9 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
658
659
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLBufferPageReads) &&
660
perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLBufferPageWrites)) {
637
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_bufman_iops", p->instanceID);
661
if (!p->st_buff_page_iops) {
662
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_bufman_iops", p->instanceID);
663
+ netdata_fix_chart_name(id);
664
p->st_buff_page_iops = rrdset_create_localhost(
665
"mssql",
666
id,
@@ -650,34 +675,34 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
675
update_every,
676
RRDSET_TYPE_LINE);
677
653
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_bufman_page_reads", p->instanceID);
654
- p->rd_buff_page_reads = rrddim_add(p->st_buff_page_iops, id, "read", 1, 1, RRD_ALGORITHM_INCREMENTAL);
655
-
656
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_bufman_page_writes", p->instanceID);
657
- p->rd_buff_page_writes = rrddim_add(p->st_buff_page_iops, id, "written", -1, 1, RRD_ALGORITHM_INCREMENTAL);
678
+ p->rd_buff_page_reads = rrddim_add(p->st_buff_page_iops, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
679
+ p->rd_buff_page_writes =
680
+ rrddim_add(p->st_buff_page_iops, "written", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
681
682
rrdlabels_add(p->st_buff_page_iops->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
683
}
684
685
rrddim_set_by_pointer(
686
p->st_buff_page_iops, p->rd_buff_page_reads, (collected_number)p->MSSQLBufferPageReads.current.Data);
664
-
687
rrddim_set_by_pointer(
688
p->st_buff_page_iops, p->rd_buff_page_writes, (collected_number)p->MSSQLBufferPageWrites.current.Data);
689
+
690
rrdset_done(p->st_buff_page_iops);
691
}
692
}
693
694
static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
695
char id[RRD_ID_LENGTH_MAX + 1];
696
+
697
PERF_OBJECT_TYPE *pObjectType =
698
perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_ACCESS_METHODS]);
699
if (!pObjectType)
700
return;
701
702
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLAccessMethodPageSplits)) {
679
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_accessmethods_page_splits", p->instanceID);
703
if (!p->st_access_method_page_splits) {
704
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_accessmethods_page_splits", p->instanceID);
705
+ netdata_fix_chart_name(id);
706
p->st_access_method_page_splits = rrdset_create_localhost(
707
"mssql",
708
id,
@@ -692,9 +717,8 @@ static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
717
update_every,
718
RRDSET_TYPE_LINE);
719
695
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_accessmethods_page_splits", p->instanceID);
720
p->rd_access_method_page_splits =
697
- rrddim_add(p->st_access_method_page_splits, id, "page", 1, 1, RRD_ALGORITHM_INCREMENTAL);
721
+ rrddim_add(p->st_access_method_page_splits, "page", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
722
723
rrdlabels_add(
724
p->st_access_method_page_splits->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
@@ -710,20 +734,22 @@ static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
734
735
static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
736
char id[RRD_ID_LENGTH_MAX + 1];
737
+
738
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_SQL_ERRORS]);
739
if (!pObjectType)
740
return;
741
742
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLSQLErrorsTotal)) {
718
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sql_errors_total", p->instanceID);
743
if (!p->st_sql_errors) {
744
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_sql_errors_total", p->instanceID);
745
+ netdata_fix_chart_name(id);
746
p->st_sql_errors = rrdset_create_localhost(
747
"mssql",
748
id,
749
NULL,
724
- "Errors",
725
- "mssql.instance_sql_errors",
750
"errors",
751
+ "mssql.instance_sql_errors",
752
+ "Errors",
753
"errors/s",
754
PLUGIN_WINDOWS_NAME,
755
"PerflibMSSQL",
@@ -731,8 +757,7 @@ static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *
757
update_every,
758
RRDSET_TYPE_LINE);
759
734
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_sql_errors_total", p->instanceID);
735
- p->rd_sql_errors = rrddim_add(p->st_sql_errors, id, "errors", 1, 1, RRD_ALGORITHM_INCREMENTAL);
760
+ p->rd_sql_errors = rrddim_add(p->st_sql_errors, "errors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
761
762
rrdlabels_add(p->st_sql_errors->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
763
}
@@ -745,6 +770,7 @@ static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *
770
771
int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
772
char id[RRD_ID_LENGTH_MAX + 1];
773
+
774
struct mssql_lock_instance *mli = value;
775
const char *instance = dictionary_acquired_item_name((DICTIONARY_ITEM *)item);
776
@@ -752,6 +778,7 @@ int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void
778
779
if (!mli->parent->st_lockWait) {
780
snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_locks_lock_wait", mli->parent->instanceID);
781
+ netdata_fix_chart_name(id);
782
mli->parent->st_lockWait = rrdset_create_localhost(
783
"mssql",
784
id,
@@ -766,24 +793,22 @@ int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void
793
*update_every,
794
RRDSET_TYPE_LINE);
795
769
- rrdlabels_add(mli->parent->st_lockWait->rrdlabels, "mssql_instance", instance, RRDLABEL_SRC_AUTO);
796
+ rrdlabels_add(
797
+ mli->parent->st_lockWait->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
798
}
799
800
if (!mli->rd_lockWait) {
773
- snprintfz(
774
- id,
775
- RRD_ID_LENGTH_MAX,
776
- "mssql_instance_%s_resource_%s_locks_lock_wait_seconds",
777
- mli->parent->instanceID,
778
- instance);
779
-
780
- mli->rd_lockWait = rrddim_add(mli->parent->st_lockWait, id, instance, 1, 1, RRD_ALGORITHM_INCREMENTAL);
801
+ mli->rd_lockWait = rrddim_add(mli->parent->st_lockWait, instance, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
802
}
803
783
- rrddim_set_by_pointer(mli->parent->st_lockWait, mli->rd_lockWait, (collected_number)mli->lockWait.current.Data);
804
+ if (mli->updated & (1 << NETDATA_MSSQL_ENUM_MLI_IDX_WAIT)) {
805
+ rrddim_set_by_pointer(
806
+ mli->parent->st_lockWait, mli->rd_lockWait, (collected_number)(mli->lockWait.current.Data));
807
+ }
808
809
if (!mli->parent->st_deadLocks) {
810
snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_locks_deadlocks", mli->parent->instanceID);
811
+ netdata_fix_chart_name(id);
812
mli->parent->st_deadLocks = rrdset_create_localhost(
813
"mssql",
814
id,
@@ -791,23 +816,25 @@ int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void
816
"locks",
817
"mssql.instance_locks_deadlocks",
818
"Lock requests that resulted in deadlock.",
794
- "locks/s",
819
+ "deadlocks/s",
820
PLUGIN_WINDOWS_NAME,
821
"PerflibMSSQL",
822
PRIO_MSSQL_LOCKS_DEADLOCK,
823
*update_every,
824
RRDSET_TYPE_LINE);
800
- rrdlabels_add(mli->parent->st_deadLocks->rrdlabels, "mssql_instance", instance, RRDLABEL_SRC_AUTO);
825
+
826
+ rrdlabels_add(
827
+ mli->parent->st_deadLocks->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
828
}
829
830
if (!mli->rd_deadLocks) {
804
- snprintfz(
805
- id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_resource_%s_locks_deadlocks", mli->parent->instanceID, instance);
806
-
807
- mli->rd_deadLocks = rrddim_add(mli->parent->st_deadLocks, id, instance, 1, 1, RRD_ALGORITHM_INCREMENTAL);
831
+ mli->rd_deadLocks = rrddim_add(mli->parent->st_deadLocks, instance, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
832
}
833
810
- rrddim_set_by_pointer(mli->parent->st_deadLocks, mli->rd_deadLocks, (collected_number)mli->deadLocks.current.Data);
834
+ if (mli->updated & (1 << NETDATA_MSSQL_ENUM_MLI_IDX_DEAD_LOCKS)) {
835
+ rrddim_set_by_pointer(
836
+ mli->parent->st_deadLocks, mli->rd_deadLocks, (collected_number)mli->deadLocks.current.Data);
837
+ }
838
839
return 1;
840
}
@@ -829,7 +856,6 @@ static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p
856
if (!strcasecmp(windows_shared_buffer, "_Total"))
857
continue;
858
832
- netdata_fix_chart_name(windows_shared_buffer);
859
struct mssql_lock_instance *mli = dictionary_set(p->locks_instances, windows_shared_buffer, NULL, sizeof(*mli));
860
if (!mli)
861
continue;
@@ -838,8 +864,11 @@ static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p
864
mli->parent = p;
865
}
866
841
- perflibGetObjectCounter(pDataBlock, pObjectType, &mli->lockWait);
842
- perflibGetObjectCounter(pDataBlock, pObjectType, &mli->deadLocks);
867
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mli->lockWait))
868
+ mli->updated |= (1 << NETDATA_MSSQL_ENUM_MLI_IDX_WAIT);
869
+
870
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mli->deadLocks))
871
+ mli->updated |= (1 << NETDATA_MSSQL_ENUM_MLI_IDX_DEAD_LOCKS);
872
}
873
874
dictionary_sorted_walkthrough_read(p->locks_instances, dict_mssql_locks_charts_cb, &update_every);
@@ -849,9 +878,11 @@ static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p
878
879
static void mssql_database_backup_restore_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
880
char id[RRD_ID_LENGTH_MAX + 1];
852
- if (!mli->parent->st_db_backup_restore_operations) {
881
+
882
+ if (!mli->st_db_backup_restore_operations) {
883
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_backup_restore_operations", db, mli->parent->instanceID);
854
- mli->parent->st_db_backup_restore_operations = rrdset_create_localhost(
884
+ netdata_fix_chart_name(id);
885
+ mli->st_db_backup_restore_operations = rrdset_create_localhost(
886
"mssql",
887
id,
888
NULL,
@@ -866,33 +897,35 @@ static void mssql_database_backup_restore_chart(struct mssql_db_instance *mli, c
897
RRDSET_TYPE_LINE);
898
899
rrdlabels_add(
869
- mli->parent->st_db_backup_restore_operations->rrdlabels,
900
+ mli->st_db_backup_restore_operations->rrdlabels,
901
"mssql_instance",
902
mli->parent->instanceID,
903
RRDLABEL_SRC_AUTO);
873
-
874
- rrdlabels_add(mli->parent->st_db_backup_restore_operations->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
904
+ rrdlabels_add(mli->st_db_backup_restore_operations->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
905
}
906
907
if (!mli->rd_db_backup_restore_operations) {
878
- snprintfz(
879
- id, RRD_ID_LENGTH_MAX, "mssql_db_%s_instance_%s_backup_restore_operations", db, mli->parent->instanceID);
880
-
908
mli->rd_db_backup_restore_operations =
882
- rrddim_add(mli->parent->st_db_backup_restore_operations, id, db, 1, 1, RRD_ALGORITHM_INCREMENTAL);
909
+ rrddim_add(mli->st_db_backup_restore_operations, "backup", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
910
}
911
885
- rrddim_set_by_pointer(
886
- mli->parent->st_db_backup_restore_operations,
887
- mli->rd_db_backup_restore_operations,
888
- (collected_number)mli->MSSQLDatabaseBackupRestoreOperations.current.Data);
912
+ if (mli->updated & (1 << NETDATA_MSSQL_ENUM_MDI_IDX_BACKUP_RESTORE_OP)) {
913
+ rrddim_set_by_pointer(
914
+ mli->st_db_backup_restore_operations,
915
+ mli->rd_db_backup_restore_operations,
916
+ (collected_number)mli->MSSQLDatabaseBackupRestoreOperations.current.Data);
917
+ }
918
+
919
+ rrdset_done(mli->st_db_backup_restore_operations);
920
}
921
922
static void mssql_database_log_flushes_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
923
char id[RRD_ID_LENGTH_MAX + 1];
893
- if (!mli->parent->st_db_log_flushes) {
924
+
925
+ if (!mli->st_db_log_flushes) {
926
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_log_flushes", db, mli->parent->instanceID);
895
- mli->parent->st_db_log_flushes = rrdset_create_localhost(
927
+ netdata_fix_chart_name(id);
928
+ mli->st_db_log_flushes = rrdset_create_localhost(
929
"mssql",
930
id,
931
NULL,
@@ -906,29 +939,31 @@ static void mssql_database_log_flushes_chart(struct mssql_db_instance *mli, cons
939
update_every,
940
RRDSET_TYPE_LINE);
941
909
- rrdlabels_add(
910
- mli->parent->st_db_log_flushes->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
911
-
912
- rrdlabels_add(mli->parent->st_db_log_flushes->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
942
+ rrdlabels_add(mli->st_db_log_flushes->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
943
+ rrdlabels_add(mli->st_db_log_flushes->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
944
}
945
946
if (!mli->rd_db_log_flushes) {
916
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_db_%s_instance_%s_log_flushes_bytes", db, mli->parent->instanceID);
947
+ mli->rd_db_log_flushes = rrddim_add(mli->st_db_log_flushes, "flushes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
948
+ }
949
918
- mli->rd_db_log_flushes = rrddim_add(mli->parent->st_db_log_flushes, id, db, 1, 1, RRD_ALGORITHM_INCREMENTAL);
950
+ if (mli->updated & (1 << NETDATA_MSSQL_ENUM_MDI_IDX_LOG_FLUSHES)) {
951
+ rrddim_set_by_pointer(
952
+ mli->st_db_log_flushes,
953
+ mli->rd_db_log_flushes,
954
+ (collected_number)mli->MSSQLDatabaseLogFlushes.current.Data);
955
}
956
921
- rrddim_set_by_pointer(
922
- mli->parent->st_db_log_flushes,
923
- mli->rd_db_log_flushes,
924
- (collected_number)mli->MSSQLDatabaseLogFlushes.current.Data);
957
+ rrdset_done(mli->st_db_log_flushes);
958
}
959
960
static void mssql_database_log_flushed_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
961
char id[RRD_ID_LENGTH_MAX + 1];
929
- if (!mli->parent->st_db_log_flushed) {
962
+
963
+ if (!mli->st_db_log_flushed) {
964
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_log_flushed", db, mli->parent->instanceID);
931
- mli->parent->st_db_log_flushed = rrdset_create_localhost(
965
+ netdata_fix_chart_name(id);
966
+ mli->st_db_log_flushed = rrdset_create_localhost(
967
"mssql",
968
id,
969
NULL,
@@ -942,29 +977,31 @@ static void mssql_database_log_flushed_chart(struct mssql_db_instance *mli, cons
977
update_every,
978
RRDSET_TYPE_LINE);
979
945
- rrdlabels_add(
946
- mli->parent->st_db_log_flushed->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
947
-
948
- rrdlabels_add(mli->parent->st_db_log_flushed->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
980
+ rrdlabels_add(mli->st_db_log_flushed->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
981
+ rrdlabels_add(mli->st_db_log_flushed->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
982
}
983
984
if (!mli->rd_db_log_flushed) {
952
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_db_%s_instance_%s_log_flushed_bytes", db, mli->parent->instanceID);
985
+ mli->rd_db_log_flushed = rrddim_add(mli->st_db_log_flushed, "flushed", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
986
+ }
987
954
- mli->rd_db_log_flushed = rrddim_add(mli->parent->st_db_log_flushed, id, db, 1, 1, RRD_ALGORITHM_INCREMENTAL);
988
+ if (mli->updated & (1 << NETDATA_MSSQL_ENUM_MDI_IDX_LOG_FLUSHED)) {
989
+ rrddim_set_by_pointer(
990
+ mli->st_db_log_flushed,
991
+ mli->rd_db_log_flushed,
992
+ (collected_number)mli->MSSQLDatabaseLogFlushed.current.Data);
993
}
994
957
- rrddim_set_by_pointer(
958
- mli->parent->st_db_log_flushed,
959
- mli->rd_db_log_flushed,
960
- (collected_number)mli->MSSQLDatabaseLogFlushed.current.Data);
995
+ rrdset_done(mli->st_db_log_flushed);
996
}
997
998
static void mssql_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
999
char id[RRD_ID_LENGTH_MAX + 1];
965
- if (!mli->parent->st_db_transactions) {
1000
+
1001
+ if (!mli->st_db_transactions) {
1002
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_transactions", db, mli->parent->instanceID);
967
- mli->parent->st_db_transactions = rrdset_create_localhost(
1003
+ netdata_fix_chart_name(id);
1004
+ mli->st_db_transactions = rrdset_create_localhost(
1005
"mssql",
1006
id,
1007
NULL,
@@ -978,29 +1015,32 @@ static void mssql_transactions_chart(struct mssql_db_instance *mli, const char *
1015
update_every,
1016
RRDSET_TYPE_LINE);
1017
981
- rrdlabels_add(
982
- mli->parent->st_db_transactions->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
983
-
984
- rrdlabels_add(mli->parent->st_db_transactions->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
1018
+ rrdlabels_add(mli->st_db_transactions->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
1019
+ rrdlabels_add(mli->st_db_transactions->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
1020
}
1021
1022
if (!mli->rd_db_transactions) {
988
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_db_%s_instance_%s_transactions", db, mli->parent->instanceID);
1023
+ mli->rd_db_transactions =
1024
+ rrddim_add(mli->st_db_transactions, "transactions", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1025
+ }
1026
990
- mli->rd_db_transactions = rrddim_add(mli->parent->st_db_transactions, id, db, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1027
+ if (mli->updated & (1 << NETDATA_MSSQL_ENUM_MDI_IDX_TRANSACTIONS)) {
1028
+ rrddim_set_by_pointer(
1029
+ mli->st_db_transactions,
1030
+ mli->rd_db_transactions,
1031
+ (collected_number)mli->MSSQLDatabaseTransactions.current.Data);
1032
}
1033
993
- rrddim_set_by_pointer(
994
- mli->parent->st_db_transactions,
995
- mli->rd_db_transactions,
996
- (collected_number)mli->MSSQLDatabaseTransactions.current.Data);
1034
+ rrdset_done(mli->st_db_transactions);
1035
}
1036
1037
static void mssql_write_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1038
char id[RRD_ID_LENGTH_MAX + 1];
1001
- if (!mli->parent->st_db_write_transactions) {
1039
+
1040
+ if (!mli->st_db_write_transactions) {
1041
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_write_transactions", db, mli->parent->instanceID);
1003
- mli->parent->st_db_write_transactions = rrdset_create_localhost(
1042
+ netdata_fix_chart_name(id);
1043
+ mli->st_db_write_transactions = rrdset_create_localhost(
1044
"mssql",
1045
id,
1046
NULL,
@@ -1015,32 +1055,32 @@ static void mssql_write_transactions_chart(struct mssql_db_instance *mli, const
1055
RRDSET_TYPE_LINE);
1056
1057
rrdlabels_add(
1018
- mli->parent->st_db_write_transactions->rrdlabels,
1019
- "mssql_instance",
1020
- mli->parent->instanceID,
1021
- RRDLABEL_SRC_AUTO);
1022
-
1023
- rrdlabels_add(mli->parent->st_db_write_transactions->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
1058
+ mli->st_db_write_transactions->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
1059
+ rrdlabels_add(mli->st_db_write_transactions->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
1060
}
1061
1062
if (!mli->rd_db_write_transactions) {
1027
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_db_%s_instance_%s_write_transactions", db, mli->parent->instanceID);
1028
-
1063
mli->rd_db_write_transactions =
1030
- rrddim_add(mli->parent->st_db_write_transactions, id, db, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1064
+ rrddim_add(mli->st_db_write_transactions, "write", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1065
+ }
1066
+
1067
+ if (mli->updated & (1 << NETDATA_MSSQL_ENUM_MDI_IDX_WRITE_TRANSACTIONS)) {
1068
+ rrddim_set_by_pointer(
1069
+ mli->st_db_write_transactions,
1070
+ mli->rd_db_write_transactions,
1071
+ (collected_number)mli->MSSQLDatabaseWriteTransactions.current.Data);
1072
}
1073
1033
- rrddim_set_by_pointer(
1034
- mli->parent->st_db_write_transactions,
1035
- mli->rd_db_write_transactions,
1036
- (collected_number)mli->MSSQLDatabaseWriteTransactions.current.Data);
1074
+ rrdset_done(mli->st_db_write_transactions);
1075
}
1076
1077
static void mssql_active_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1078
char id[RRD_ID_LENGTH_MAX + 1];
1041
- if (!mli->parent->st_db_active_transactions) {
1079
+
1080
+ if (!mli->st_db_active_transactions) {
1081
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_active_transactions", db, mli->parent->instanceID);
1043
- mli->parent->st_db_active_transactions = rrdset_create_localhost(
1082
+ netdata_fix_chart_name(id);
1083
+ mli->st_db_active_transactions = rrdset_create_localhost(
1084
"mssql",
1085
id,
1086
NULL,
@@ -1055,32 +1095,32 @@ static void mssql_active_transactions_chart(struct mssql_db_instance *mli, const
1095
RRDSET_TYPE_LINE);
1096
1097
rrdlabels_add(
1058
- mli->parent->st_db_active_transactions->rrdlabels,
1059
- "mssql_instance",
1060
- mli->parent->instanceID,
1061
- RRDLABEL_SRC_AUTO);
1062
-
1063
- rrdlabels_add(mli->parent->st_db_active_transactions->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
1098
+ mli->st_db_active_transactions->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
1099
+ rrdlabels_add(mli->st_db_active_transactions->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
1100
}
1101
1102
if (!mli->rd_db_active_transactions) {
1067
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_db_%s_instance_%s_active_transactions", db, mli->parent->instanceID);
1068
-
1103
mli->rd_db_active_transactions =
1070
- rrddim_add(mli->parent->st_db_active_transactions, id, db, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1104
+ rrddim_add(mli->st_db_active_transactions, "active", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1105
}
1106
1073
- rrddim_set_by_pointer(
1074
- mli->parent->st_db_active_transactions,
1075
- mli->rd_db_active_transactions,
1076
- (collected_number)mli->MSSQLDatabaseActiveTransactions.current.Data);
1107
+ if (mli->updated & (1 << NETDATA_MSSQL_ENUM_MDI_IDX_ACTIVE_TRANSACTIONS)) {
1108
+ rrddim_set_by_pointer(
1109
+ mli->st_db_active_transactions,
1110
+ mli->rd_db_active_transactions,
1111
+ (collected_number)mli->MSSQLDatabaseActiveTransactions.current.Data);
1112
+ }
1113
+
1114
+ rrdset_done(mli->st_db_active_transactions);
1115
}
1116
1117
static void mssql_data_file_size_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1118
char id[RRD_ID_LENGTH_MAX + 1];
1081
- if (!mli->parent->st_db_data_file_size) {
1119
+
1120
+ if (!mli->st_db_data_file_size) {
1121
snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_data_files_size", db, mli->parent->instanceID);
1083
- mli->parent->st_db_data_file_size = rrdset_create_localhost(
1122
+ netdata_fix_chart_name(id);
1123
+ mli->st_db_data_file_size = rrdset_create_localhost(
1124
"mssql",
1125
id,
1126
NULL,
@@ -1095,21 +1135,20 @@ static void mssql_data_file_size_chart(struct mssql_db_instance *mli, const char
1135
RRDSET_TYPE_LINE);
1136
1137
rrdlabels_add(
1098
- mli->parent->st_db_data_file_size->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
1099
-
1100
- rrdlabels_add(mli->parent->st_db_data_file_size->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
1138
+ mli->st_db_data_file_size->rrdlabels, "mssql_instance", mli->parent->instanceID, RRDLABEL_SRC_AUTO);
1139
+ rrdlabels_add(mli->st_db_data_file_size->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
1140
}
1141
1142
if (!mli->rd_db_data_file_size) {
1104
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_db_%s_instance_%s_data_files_size_bytes", db, mli->parent->instanceID);
1105
-
1106
- mli->rd_db_data_file_size = rrddim_add(mli->parent->st_db_data_file_size, id, db, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1143
+ mli->rd_db_data_file_size = rrddim_add(mli->st_db_data_file_size, "size", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1144
}
1145
1109
- rrddim_set_by_pointer(
1110
- mli->parent->st_db_data_file_size,
1111
- mli->rd_db_data_file_size,
1112
- (collected_number)mli->MSSQLDatabaseDataFileSize.current.Data * 1024);
1146
+ // FIXME: If the value cannot be retrieved, remove the chart instead of displaying a 0 value.
1147
+ collected_number data =
1148
+ (mli->updated & (1 << NETDATA_MSSQL_ENUM_MDI_IDX_FILE_SIZE)) ? mli->MSSQLDatabaseDataFileSize.current.Data : 0;
1149
+ rrddim_set_by_pointer(mli->st_db_data_file_size, mli->rd_db_data_file_size, data);
1150
+
1151
+ rrdset_done(mli->st_db_data_file_size);
1152
}
1153
1154
int dict_mssql_databases_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
@@ -1119,7 +1158,9 @@ int dict_mssql_databases_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, v
1158
int *update_every = data;
1159
1160
void (*transaction_chart[])(struct mssql_db_instance *, const char *, int) = {
1122
- mssql_data_file_size_chart,
1161
+ // FIXME: allegedly Netdata collects negative values (MSSQLDatabaseDataFileSize).
1162
+ // something is wrong, perflibdump shows correct values.
1163
+ // mssql_data_file_size_chart,
1164
mssql_transactions_chart,
1165
mssql_database_backup_restore_chart,
1166
mssql_database_log_flushed_chart,
@@ -1155,43 +1196,54 @@ static void do_mssql_databases(PERF_DATA_BLOCK *pDataBlock, struct mssql_instanc
1196
if (!strcasecmp(windows_shared_buffer, "_Total"))
1197
continue;
1198
1158
- netdata_fix_chart_name(windows_shared_buffer);
1199
struct mssql_db_instance *mdi = dictionary_set(p->databases, windows_shared_buffer, NULL, sizeof(*mdi));
1200
if (!mdi)
1201
continue;
1202
1203
+ mdi->updated = 0;
1204
if (!mdi->parent) {
1205
mdi->parent = p;
1206
}
1207
1167
- perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseDataFileSize);
1168
- perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseActiveTransactions);
1169
- perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseBackupRestoreOperations);
1170
- perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseLogFlushed);
1171
- perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseLogFlushes);
1172
- perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseTransactions);
1173
- perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseWriteTransactions);
1208
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseDataFileSize)) {
1209
+ LONGLONG value = (LONGLONG)mdi->MSSQLDatabaseDataFileSize.current.Data;
1210
+ if (value > 0)
1211
+ mdi->updated |= (1 << NETDATA_MSSQL_ENUM_MDI_IDX_FILE_SIZE);
1212
+ }
1213
+
1214
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseActiveTransactions))
1215
+ mdi->updated |= (1 << NETDATA_MSSQL_ENUM_MDI_IDX_ACTIVE_TRANSACTIONS);
1216
+
1217
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseBackupRestoreOperations))
1218
+ mdi->updated |= (1 << NETDATA_MSSQL_ENUM_MDI_IDX_BACKUP_RESTORE_OP);
1219
+
1220
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseLogFlushed))
1221
+ mdi->updated |= (1 << NETDATA_MSSQL_ENUM_MDI_IDX_LOG_FLUSHED);
1222
+
1223
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseLogFlushes))
1224
+ mdi->updated |= (1 << NETDATA_MSSQL_ENUM_MDI_IDX_LOG_FLUSHES);
1225
+
1226
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseTransactions))
1227
+ mdi->updated |= (1 << NETDATA_MSSQL_ENUM_MDI_IDX_TRANSACTIONS);
1228
+
1229
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &mdi->MSSQLDatabaseWriteTransactions))
1230
+ mdi->updated |= (1 << NETDATA_MSSQL_ENUM_MDI_IDX_WRITE_TRANSACTIONS);
1231
}
1232
1233
dictionary_sorted_walkthrough_read(p->databases, dict_mssql_databases_charts_cb, &update_every);
1177
- rrdset_done(p->st_db_data_file_size);
1178
- rrdset_done(p->st_db_active_transactions);
1179
- rrdset_done(p->st_db_backup_restore_operations);
1180
- rrdset_done(p->st_db_log_flushed);
1181
- rrdset_done(p->st_db_log_flushes);
1182
- rrdset_done(p->st_db_transactions);
1183
- rrdset_done(p->st_db_write_transactions);
1234
}
1235
1236
static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
1237
char id[RRD_ID_LENGTH_MAX + 1];
1238
+
1239
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_MEMORY]);
1240
if (!pObjectType)
1241
return;
1242
1243
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLConnectionMemoryBytes)) {
1193
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_connection_memory_bytes", p->instanceID);
1244
if (!p->st_conn_memory) {
1245
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_connection_memory_bytes", p->instanceID);
1246
+ netdata_fix_chart_name(id);
1247
p->st_conn_memory = rrdset_create_localhost(
1248
"mssql",
1249
id,
@@ -1206,8 +1258,7 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1258
update_every,
1259
RRDSET_TYPE_LINE);
1260
1209
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_memmgr_connection_memory_bytes", p->instanceID);
1210
- p->rd_conn_memory = rrddim_add(p->st_conn_memory, id, "memory", 1, 1, RRD_ALGORITHM_ABSOLUTE);
1261
+ p->rd_conn_memory = rrddim_add(p->st_conn_memory, "memory", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1262
1263
rrdlabels_add(p->st_conn_memory->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
1264
}
@@ -1220,8 +1271,9 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1271
}
1272
1273
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLExternalBenefitOfMemory)) {
1223
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_external_benefit_of_memory", p->instanceID);
1274
if (!p->st_ext_benefit_mem) {
1275
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_external_benefit_of_memory", p->instanceID);
1276
+ netdata_fix_chart_name(id);
1277
p->st_ext_benefit_mem = rrdset_create_localhost(
1278
"mssql",
1279
id,
@@ -1236,8 +1288,7 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1288
update_every,
1289
RRDSET_TYPE_LINE);
1290
1239
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_memmgr_external_benefit_of_memory", p->instanceID);
1240
- p->rd_ext_benefit_mem = rrddim_add(p->st_ext_benefit_mem, id, "benefit", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1291
+ p->rd_ext_benefit_mem = rrddim_add(p->st_ext_benefit_mem, "benefit", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1292
1293
rrdlabels_add(p->st_ext_benefit_mem->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
1294
}
@@ -1250,8 +1301,9 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1301
}
1302
1303
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLPendingMemoryGrants)) {
1253
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_pending_memory_grants", p->instanceID);
1304
if (!p->st_pending_mem_grant) {
1305
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_pending_memory_grants", p->instanceID);
1306
+ netdata_fix_chart_name(id);
1307
p->st_pending_mem_grant = rrdset_create_localhost(
1308
"mssql",
1309
id,
@@ -1259,15 +1311,15 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1311
"memory",
1312
"mssql.instance_memmgr_pending_memory_grants",
1313
"Process waiting for memory grant",
1262
- "process",
1314
+ "processes",
1315
PLUGIN_WINDOWS_NAME,
1316
"PerflibMSSQL",
1317
PRIO_MSSQL_MEMMGR_PENDING_MEMORY_GRANTS,
1318
update_every,
1319
RRDSET_TYPE_LINE);
1320
1269
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_memmgr_pending_memory_grants", p->instanceID);
1270
- p->rd_pending_mem_grant = rrddim_add(p->st_pending_mem_grant, id, "pending", 1, 1, RRD_ALGORITHM_ABSOLUTE);
1321
+ p->rd_pending_mem_grant =
1322
+ rrddim_add(p->st_pending_mem_grant, "pending", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1323
1324
rrdlabels_add(p->st_pending_mem_grant->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
1325
}
@@ -1276,12 +1328,14 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1328
p->st_pending_mem_grant,
1329
p->rd_pending_mem_grant,
1330
(collected_number)p->MSSQLPendingMemoryGrants.current.Data);
1331
+
1332
rrdset_done(p->st_pending_mem_grant);
1333
}
1334
1335
if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->MSSQLTotalServerMemory)) {
1283
- snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_server_memory", p->instanceID);
1336
if (!p->st_mem_tot_server) {
1337
+ snprintfz(id, RRD_ID_LENGTH_MAX, "instance_%s_memmgr_server_memory", p->instanceID);
1338
+ netdata_fix_chart_name(id);
1339
p->st_mem_tot_server = rrdset_create_localhost(
1340
"mssql",
1341
id,
@@ -1296,8 +1350,7 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1350
update_every,
1351
RRDSET_TYPE_LINE);
1352
1299
- snprintfz(id, RRD_ID_LENGTH_MAX, "mssql_instance_%s_memmgr_total_server_memory_bytes", p->instanceID);
1300
- p->rd_mem_tot_server = rrddim_add(p->st_mem_tot_server, id, "memory", 1, 1, RRD_ALGORITHM_ABSOLUTE);
1353
+ p->rd_mem_tot_server = rrddim_add(p->st_mem_tot_server, "memory", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
1354
1355
rrdlabels_add(p->st_mem_tot_server->rrdlabels, "mssql_instance", p->instanceID, RRDLABEL_SRC_AUTO);
1356
}
@@ -1306,6 +1359,7 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1359
p->st_mem_tot_server,
1360
p->rd_mem_tot_server,
1361
(collected_number)(p->MSSQLTotalServerMemory.current.Data * 1024));
1362
+
1363
rrdset_done(p->st_mem_tot_server);
1364
}
1365
}