@cryptotaxi247 / netdata-1 / commits / 466b1fcc5

Add sqlite page cache hit and miss statistics (#13665)

* Add sqlite page cache hit/ miss statistics * Proper function definition Co-authored-by: Vladimir Kobal <vlad@prokk.net> * Proper function calls Co-authored-by: Vladimir Kobal <vlad@prokk.net> Co-authored-by: Vladimir Kobal <vlad@prokk.net>

Stelios Fragkakis committed Sep 14, 2022 at 19:22 UTC 466b1fcc56d3dc4787f332d76db0623f5dad9f91
5 files changed +56
daemon/global_statistics.c
+40
@@ -38,6 +38,8 @@ static struct global_statistics {
38 volatile uint64_t sqlite3_queries_failed_busy;
39 volatile uint64_t sqlite3_queries_failed_locked;
40 volatile uint64_t sqlite3_rows;
41 + volatile uint64_t sqlite3_cache_hit;
42 + volatile uint64_t sqlite3_cache_miss;
43
44 } global_statistics = {
45 .connected_clients = 0,
@@ -134,6 +136,11 @@ static inline void global_statistics_copy(struct global_statistics *gs, uint8_t
136 gs->sqlite3_queries_failed_busy = __atomic_load_n(&global_statistics.sqlite3_queries_failed_busy, __ATOMIC_RELAXED);
137 gs->sqlite3_queries_failed_locked = __atomic_load_n(&global_statistics.sqlite3_queries_failed_locked, __ATOMIC_RELAXED);
138 gs->sqlite3_rows = __atomic_load_n(&global_statistics.sqlite3_rows, __ATOMIC_RELAXED);
139 +
140 + gs->sqlite3_cache_hit = (uint64_t) sql_context_cache_stats(SQLITE_DBSTATUS_CACHE_HIT);
141 + gs->sqlite3_cache_hit += (uint64_t) sql_metadata_cache_stats(SQLITE_DBSTATUS_CACHE_HIT);
142 + gs->sqlite3_cache_miss = (uint64_t) sql_context_cache_stats(SQLITE_DBSTATUS_CACHE_MISS);
143 + gs->sqlite3_cache_miss += (uint64_t) sql_metadata_cache_stats(SQLITE_DBSTATUS_CACHE_MISS);
144 }
145
146 static void global_statistics_charts(void) {
@@ -581,6 +588,39 @@ static void global_statistics_charts(void) {
588 rrdset_done(st_sqlite3_rows);
589 }
590
591 + if(gs.sqlite3_cache_hit) {
592 + static RRDSET *st_sqlite3_cache = NULL;
593 + static RRDDIM *rd_cache_hit = NULL;
594 + static RRDDIM *rd_cache_miss= NULL;
595 +
596 + if (unlikely(!st_sqlite3_cache)) {
597 + st_sqlite3_cache = rrdset_create_localhost(
598 + "netdata"
599 + , "sqlite3_cache"
600 + , NULL
601 + , "sqlite3"
602 + , NULL
603 + , "Netdata SQLite3 Cache"
604 + , "ops/s"
605 + , "netdata"
606 + , "stats"
607 + , 131103
608 + , localhost->rrd_update_every
609 + , RRDSET_TYPE_LINE
610 + );
611 +
612 + rd_cache_hit = rrddim_add(st_sqlite3_cache, "cache_hit", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
613 + rd_cache_miss = rrddim_add(st_sqlite3_cache, "cache_miss", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
614 + }
615 + else
616 + rrdset_next(st_sqlite3_cache);
617 +
618 + rrddim_set_by_pointer(st_sqlite3_cache, rd_cache_hit, (collected_number)gs.sqlite3_cache_hit);
619 + rrddim_set_by_pointer(st_sqlite3_cache, rd_cache_miss, (collected_number)gs.sqlite3_cache_miss);
620 +
621 + rrdset_done(st_sqlite3_cache);
622 + }
623 +
624 // ----------------------------------------------------------------
625 }
626
database/sqlite/sqlite_context.c
+7
@@ -444,6 +444,13 @@ skip_delete:
444 return (rc_stored != SQLITE_DONE);
445 }
446
447 +int sql_context_cache_stats(int op)
448 +{
449 + int count, dummy;
450 + sqlite3_db_status(db_context_meta, op, &count, &dummy, 0);
451 + return count;
452 +}
453 +
454 //
455 // TESTING FUNCTIONS
456 //
database/sqlite/sqlite_context.h
+1
@@ -6,6 +6,7 @@
6 #include "daemon/common.h"
7 #include "sqlite3.h"
8
9 +extern int sql_context_cache_stats(int op);
10 typedef struct ctx_chart {
11 uuid_t chart_id;
12 const char *id;
database/sqlite/sqlite_functions.c
+7
@@ -2760,3 +2760,10 @@ int bind_text_null(sqlite3_stmt *res, int position, const char *text, bool can_b
2760 return 1;
2761 return sqlite3_bind_null(res, position);
2762 }
2763 +
2764 +int sql_metadata_cache_stats(int op)
2765 +{
2766 + int count, dummy;
2767 + sqlite3_db_status(db_meta, op, &count, &dummy, 0);
2768 + return count;
2769 +}
database/sqlite/sqlite_functions.h
+1
@@ -121,5 +121,6 @@ void migrate_localhost(uuid_t *host_uuid);
121 extern void sql_store_host_system_info(uuid_t *host_id, const struct rrdhost_system_info *system_info);
122 extern void sql_build_host_system_info(uuid_t *host_id, struct rrdhost_system_info *system_info);
123 void sql_store_host_labels(RRDHOST *host);
124 +extern int sql_metadata_cache_stats(int op);
125 DICTIONARY *sql_load_host_labels(uuid_t *host_id);
126 #endif //NETDATA_SQLITE_FUNCTIONS_H