Skip to content

Commit

Permalink
Merge pull request #4672 from sysown/v3.0_pgsql_digest_stats_tables
Browse files Browse the repository at this point in the history
Added stats table for PgSQL query digest
  • Loading branch information
rahim-kanji authored Sep 25, 2024
2 parents 48ae9f6 + 0229dae commit 3e89a66
Show file tree
Hide file tree
Showing 10 changed files with 223 additions and 19 deletions.
12 changes: 5 additions & 7 deletions include/ProxySQL_Admin_Tables_Definitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -288,13 +288,6 @@
#define ADMIN_SQLITE_TABLE_RUNTIME_PGSQL_HOSTGROUP_ATTRIBUTES "CREATE TABLE runtime_pgsql_hostgroup_attributes (hostgroup_id INT NOT NULL PRIMARY KEY , max_num_online_servers INT CHECK (max_num_online_servers>=0 AND max_num_online_servers <= 1000000) NOT NULL DEFAULT 1000000 , autocommit INT CHECK (autocommit IN (-1, 0, 1)) NOT NULL DEFAULT -1 , free_connections_pct INT CHECK (free_connections_pct >= 0 AND free_connections_pct <= 100) NOT NULL DEFAULT 10 , init_connect VARCHAR NOT NULL DEFAULT '' , multiplex INT CHECK (multiplex IN (0, 1)) NOT NULL DEFAULT 1 , connection_warming INT CHECK (connection_warming IN (0, 1)) NOT NULL DEFAULT 0 , throttle_connections_per_sec INT CHECK (throttle_connections_per_sec >= 1 AND throttle_connections_per_sec <= 1000000) NOT NULL DEFAULT 1000000 , ignore_session_variables VARCHAR CHECK (JSON_VALID(ignore_session_variables) OR ignore_session_variables = '') NOT NULL DEFAULT '' , hostgroup_settings VARCHAR CHECK (JSON_VALID(hostgroup_settings) OR hostgroup_settings = '') NOT NULL DEFAULT '' , servers_defaults VARCHAR CHECK (JSON_VALID(servers_defaults) OR servers_defaults = '') NOT NULL DEFAULT '' , comment VARCHAR NOT NULL DEFAULT '')"
#define ADMIN_SQLITE_TABLE_RUNTIME_PGSQL_REPLICATION_HOSTGROUPS "CREATE TABLE runtime_pgsql_replication_hostgroups (writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY , reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>=0) , check_type VARCHAR CHECK (LOWER(check_type) IN ('read_only','innodb_read_only','super_read_only','read_only|innodb_read_only','read_only&innodb_read_only')) NOT NULL DEFAULT 'read_only' , comment VARCHAR NOT NULL DEFAULT '', UNIQUE (reader_hostgroup))"

/*
#define STATS_SQLITE_TABLE_PGSQL_QUERY_RULES "CREATE TABLE stats_pgsql_query_rules (rule_id INTEGER PRIMARY KEY , hits INT NOT NULL)"
#define STATS_SQLITE_TABLE_PGSQL_COMMANDS_COUNTERS "CREATE TABLE stats_pgsql_commands_counters (Command VARCHAR NOT NULL PRIMARY KEY , Total_Time_us INT NOT NULL , Total_cnt INT NOT NULL , cnt_100us INT NOT NULL , cnt_500us INT NOT NULL , cnt_1ms INT NOT NULL , cnt_5ms INT NOT NULL , cnt_10ms INT NOT NULL , cnt_50ms INT NOT NULL , cnt_100ms INT NOT NULL , cnt_500ms INT NOT NULL , cnt_1s INT NOT NULL , cnt_5s INT NOT NULL , cnt_10s INT NOT NULL , cnt_INFs)"
#define STATS_SQLITE_TABLE_PGSQL_QUERY_DIGEST "CREATE TABLE stats_pgsql_query_digest (hostgroup INT , schemaname VARCHAR NOT NULL , username VARCHAR NOT NULL , client_address VARCHAR NOT NULL , digest VARCHAR NOT NULL , digest_text VARCHAR NOT NULL , count_star INTEGER NOT NULL , first_seen INTEGER NOT NULL , last_seen INTEGER NOT NULL , sum_time INTEGER NOT NULL , min_time INTEGER NOT NULL , max_time INTEGER NOT NULL , sum_rows_affected INTEGER NOT NULL , sum_rows_sent INTEGER NOT NULL , PRIMARY KEY(hostgroup, schemaname, username, client_address, digest))"
#define STATS_SQLITE_TABLE_PGSQL_QUERY_DIGEST_RESET "CREATE TABLE stats_pgsql_query_digest_reset (hostgroup INT , schemaname VARCHAR NOT NULL , username VARCHAR NOT NULL , client_address VARCHAR NOT NULL , digest VARCHAR NOT NULL , digest_text VARCHAR NOT NULL , count_star INTEGER NOT NULL , first_seen INTEGER NOT NULL , last_seen INTEGER NOT NULL , sum_time INTEGER NOT NULL , min_time INTEGER NOT NULL , max_time INTEGER NOT NULL , sum_rows_affected INTEGER NOT NULL , sum_rows_sent INTEGER NOT NULL , PRIMARY KEY(hostgroup, schemaname, username, client_address, digest))"
*/

#define STATS_SQLITE_TABLE_PGSQL_GLOBAL "CREATE TABLE stats_pgsql_global (Variable_Name VARCHAR NOT NULL PRIMARY KEY , Variable_Value VARCHAR NOT NULL)"
#define STATS_SQLITE_TABLE_PGSQL_CONNECTION_POOL "CREATE TABLE stats_pgsql_connection_pool (hostgroup INT , srv_host VARCHAR , srv_port INT , status VARCHAR , ConnUsed INT , ConnFree INT , ConnOK INT , ConnERR INT , MaxConnUsed INT , Queries INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)"
#define STATS_SQLITE_TABLE_PGSQL_CONNECTION_POOL_RESET "CREATE TABLE stats_pgsql_connection_pool_reset (hostgroup INT , srv_host VARCHAR , srv_port INT , status VARCHAR , ConnUsed INT , ConnFree INT , ConnOK INT , ConnERR INT , MaxConnUsed INT , Queries INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)"
Expand All @@ -305,6 +298,11 @@
#define STATS_SQLITE_TABLE_PGSQL_ERRORS_RESET "CREATE TABLE stats_pgsql_errors_reset (hostgroup INT NOT NULL , hostname VARCHAR NOT NULL , port INT NOT NULL , username VARCHAR NOT NULL , client_address VARCHAR NOT NULL , database VARCHAR NOT NULL , sqlstate VARCHAR NOT NULL , count_star INTEGER NOT NULL , first_seen INTEGER NOT NULL , last_seen INTEGER NOT NULL , last_error VARCHAR NOT NULL DEFAULT '' , PRIMARY KEY (hostgroup, hostname, port, username, database, sqlstate) )"
#define STATS_SQLITE_TABLE_PGSQL_CLIENT_HOST_CACHE "CREATE TABLE stats_pgsql_client_host_cache (client_address VARCHAR NOT NULL , error_count INT NOT NULL , last_updated BIGINT NOT NULL)"
#define STATS_SQLITE_TABLE_PGSQL_CLIENT_HOST_CACHE_RESET "CREATE TABLE stats_pgsql_client_host_cache_reset (client_address VARCHAR NOT NULL , error_count INT NOT NULL , last_updated BIGINT NOT NULL)"
#define STATS_SQLITE_TABLE_PGSQL_QUERY_RULES "CREATE TABLE stats_pgsql_query_rules (rule_id INTEGER PRIMARY KEY , hits INT NOT NULL)"
#define STATS_SQLITE_TABLE_PGSQL_COMMANDS_COUNTERS "CREATE TABLE stats_pgsql_commands_counters (Command VARCHAR NOT NULL PRIMARY KEY , Total_Time_us INT NOT NULL , Total_cnt INT NOT NULL , cnt_100us INT NOT NULL , cnt_500us INT NOT NULL , cnt_1ms INT NOT NULL , cnt_5ms INT NOT NULL , cnt_10ms INT NOT NULL , cnt_50ms INT NOT NULL , cnt_100ms INT NOT NULL , cnt_500ms INT NOT NULL , cnt_1s INT NOT NULL , cnt_5s INT NOT NULL , cnt_10s INT NOT NULL , cnt_INFs)"
#define STATS_SQLITE_TABLE_PGSQL_QUERY_DIGEST "CREATE TABLE stats_pgsql_query_digest (hostgroup INT , database VARCHAR NOT NULL , username VARCHAR NOT NULL , client_address VARCHAR NOT NULL , digest VARCHAR NOT NULL , digest_text VARCHAR NOT NULL , count_star INTEGER NOT NULL , first_seen INTEGER NOT NULL , last_seen INTEGER NOT NULL , sum_time INTEGER NOT NULL , min_time INTEGER NOT NULL , max_time INTEGER NOT NULL , sum_rows_affected INTEGER NOT NULL , sum_rows_sent INTEGER NOT NULL , PRIMARY KEY(hostgroup, database, username, client_address, digest))"
#define STATS_SQLITE_TABLE_PGSQL_QUERY_DIGEST_RESET "CREATE TABLE stats_pgsql_query_digest_reset (hostgroup INT , database VARCHAR NOT NULL , username VARCHAR NOT NULL , client_address VARCHAR NOT NULL , digest VARCHAR NOT NULL , digest_text VARCHAR NOT NULL , count_star INTEGER NOT NULL , first_seen INTEGER NOT NULL , last_seen INTEGER NOT NULL , sum_time INTEGER NOT NULL , min_time INTEGER NOT NULL , max_time INTEGER NOT NULL , sum_rows_affected INTEGER NOT NULL , sum_rows_sent INTEGER NOT NULL , PRIMARY KEY(hostgroup, database, username, client_address, digest))"


//#define STATS_SQLITE_TABLE_MEMORY_METRICS "CREATE TABLE stats_memory_metrics (Variable_Name VARCHAR NOT NULL PRIMARY KEY , Variable_Value VARCHAR NOT NULL)"

Expand Down
3 changes: 3 additions & 0 deletions include/proxysql_admin.h
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,7 @@ class ProxySQL_Admin {
);
int stats___mysql_query_digests(bool reset, bool copy=false);
int stats___mysql_query_digests_v2(bool reset, bool copy, bool use_resultset);
int stats___pgsql_query_digests_v2(bool reset, bool copy, bool use_resultset);
//void stats___mysql_query_digests_reset();
void stats___mysql_commands_counters();
void stats___mysql_processlist();
Expand All @@ -657,6 +658,8 @@ class ProxySQL_Admin {
void stats___pgsql_processlist();
void stats___pgsql_errors(bool reset);
void stats___pgsql_client_host_cache(bool reset);
void stats___pgsql_query_rules();
void stats___pgsql_commands_counters();
int stats___save_pgsql_query_digest_to_sqlite(
const bool reset, const bool copy, const SQLite3_result* resultset,
const umap_query_digest* digest_umap, const umap_query_digest_text* digest_text_umap
Expand Down
5 changes: 5 additions & 0 deletions lib/Admin_Bootstrap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ extern struct MHD_Daemon *Admin_HTTP_Server;

extern ProxySQL_Statistics *GloProxyStats;

template<enum SERVER_TYPE>
int ProxySQL_Test___PurgeDigestTable(bool async_purge, bool parallel, char **msg);

extern char *ssl_key_fp;
Expand Down Expand Up @@ -684,6 +685,10 @@ bool ProxySQL_Admin::init(const bootstrap_info_t& bootstrap_info) {
insert_into_tables_defs(tables_defs_stats,"stats_pgsql_errors_reset", STATS_SQLITE_TABLE_PGSQL_ERRORS_RESET);
insert_into_tables_defs(tables_defs_stats,"stats_pgsql_client_host_cache", STATS_SQLITE_TABLE_PGSQL_CLIENT_HOST_CACHE);
insert_into_tables_defs(tables_defs_stats,"stats_pgsql_client_host_cache_reset", STATS_SQLITE_TABLE_PGSQL_CLIENT_HOST_CACHE_RESET);
insert_into_tables_defs(tables_defs_stats,"stats_pgsql_query_rules", STATS_SQLITE_TABLE_PGSQL_QUERY_RULES);
insert_into_tables_defs(tables_defs_stats,"stats_pgsql_commands_counters", STATS_SQLITE_TABLE_PGSQL_COMMANDS_COUNTERS);
insert_into_tables_defs(tables_defs_stats,"stats_pgsql_query_digest", STATS_SQLITE_TABLE_PGSQL_QUERY_DIGEST);
insert_into_tables_defs(tables_defs_stats,"stats_pgsql_query_digest_reset", STATS_SQLITE_TABLE_PGSQL_QUERY_DIGEST_RESET);

// ProxySQL Cluster
insert_into_tables_defs(tables_defs_admin,"proxysql_servers", ADMIN_SQLITE_TABLE_PROXYSQL_SERVERS);
Expand Down
1 change: 1 addition & 0 deletions lib/Admin_FlushVariables.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ extern struct MHD_Daemon *Admin_HTTP_Server;

extern ProxySQL_Statistics *GloProxyStats;

template<enum SERVER_TYPE>
int ProxySQL_Test___PurgeDigestTable(bool async_purge, bool parallel, char **msg);

extern char *ssl_key_fp;
Expand Down
54 changes: 52 additions & 2 deletions lib/Admin_Handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ extern struct MHD_Daemon *Admin_HTTP_Server;

extern ProxySQL_Statistics *GloProxyStats;

template<enum SERVER_TYPE>
int ProxySQL_Test___PurgeDigestTable(bool async_purge, bool parallel, char **msg);

extern char *ssl_key_fp;
Expand Down Expand Up @@ -1198,7 +1199,7 @@ bool admin_handler_command_load_or_save(char *query_no_space, unsigned int query
unsigned long long curtime2 = monotonic_time();
curtime1 = curtime1 / 1000;
curtime2 = curtime2 / 1000;
proxy_info("Saved stats_mysql_query_digest to disk: %llums to write %u entries\n", curtime2 - curtime1, r1);
proxy_info("Saved stats_pgsql_query_digest to disk: %llums to write %u entries\n", curtime2 - curtime1, r1);
SPA->send_ok_msg_to_client(sess, NULL, r1, query_no_space);
return false;
}
Expand Down Expand Up @@ -2386,6 +2387,19 @@ void admin_session_handler(S* sess, void *_pa, PtrSize_t *pkt) {
goto __run_query;
}

// if the client simply executes:
// SELECT COUNT(*) FROM runtime_pgsql_query_rules_fast_routing
// we just return the count
if (strcmp("SELECT COUNT(*) FROM runtime_pgsql_query_rules_fast_routing", query_no_space) == 0) {
int cnt = GloPgQPro->get_current_query_rules_fast_routing_count();
l_free(query_length, query);
char buf[256];
sprintf(buf, "SELECT %d AS 'COUNT(*)'", cnt);
query = l_strdup(buf);
query_length = strlen(query) + 1;
goto __run_query;
}

if (!strncasecmp("TRUNCATE ", query_no_space, strlen("TRUNCATE "))) {
if (sess->session_type == PROXYSQL_SESSION_ADMIN) { // no stats
if (strstr(query_no_space,"stats_mysql_query_digest")) {
Expand Down Expand Up @@ -2416,13 +2430,49 @@ void admin_session_handler(S* sess, void *_pa, PtrSize_t *pkt) {
SPA->vacuum_stats(true);
// purge the digest map, asynchronously, in single thread
char *msg = NULL;
int r1 = ProxySQL_Test___PurgeDigestTable(true, false, &msg);
int r1 = ProxySQL_Test___PurgeDigestTable<SERVER_TYPE_MYSQL>(true, false, &msg);
SPA->send_ok_msg_to_client(sess, msg, r1, query_no_space);
free(msg);
run_query=false;
goto __run_query;
}
}

if (strstr(query_no_space, "stats_pgsql_query_digest")) {
bool truncate_digest_table = false;
static char* truncate_digest_table_queries[] = {
(char*)"TRUNCATE TABLE stats.stats_pgsql_query_digest",
(char*)"TRUNCATE TABLE stats.stats_pgsql_query_digest_reset",
(char*)"TRUNCATE TABLE stats_pgsql_query_digest",
(char*)"TRUNCATE TABLE stats_pgsql_query_digest_reset",
(char*)"TRUNCATE stats.stats_pgsql_query_digest",
(char*)"TRUNCATE stats.stats_pgsql_query_digest_reset",
(char*)"TRUNCATE stats_pgsql_query_digest",
(char*)"TRUNCATE stats_pgsql_query_digest_reset"
};
size_t l = sizeof(truncate_digest_table_queries) / sizeof(char*);
unsigned int i;
for (i = 0; i < l; i++) {
if (truncate_digest_table == false) {
if (strcasecmp(truncate_digest_table_queries[i], query_no_space) == 0) {
truncate_digest_table = true;
}
}
}
if (truncate_digest_table == true) {
ProxySQL_Admin* SPA = (ProxySQL_Admin*)pa;
SPA->admindb->execute("DELETE FROM stats.stats_pgsql_query_digest");
SPA->admindb->execute("DELETE FROM stats.stats_pgsql_query_digest_reset");
SPA->vacuum_stats(true);
// purge the digest map, asynchronously, in single thread
char* msg = NULL;
int r1 = ProxySQL_Test___PurgeDigestTable<SERVER_TYPE_PGSQL>(true, false, &msg);
SPA->send_ok_msg_to_client(sess, msg, r1, query_no_space);
free(msg);
run_query = false;
goto __run_query;
}
}
}
}
#ifdef DEBUG
Expand Down
52 changes: 51 additions & 1 deletion lib/ProxySQL_Admin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ struct MHD_Daemon *Admin_HTTP_Server;

extern ProxySQL_Statistics *GloProxyStats;

template<enum SERVER_TYPE>
int ProxySQL_Test___PurgeDigestTable(bool async_purge, bool parallel, char **msg);

extern char *ssl_key_fp;
Expand Down Expand Up @@ -1147,15 +1148,19 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
bool stats_mysql_connection_pool=false;
bool stats_mysql_connection_pool_reset=false;
bool stats_mysql_query_digest=false;
bool stats_pgsql_query_digest = false;
bool stats_mysql_query_digest_reset=false;
bool stats_pgsql_query_digest_reset = false;
bool stats_mysql_errors=false;
bool stats_mysql_errors_reset=false;
bool stats_pgsql_errors = false;
bool stats_pgsql_errors_reset = false;
bool stats_mysql_global=false;
bool stats_memory_metrics=false;
bool stats_mysql_commands_counters=false;
bool stats_pgsql_commands_counters = false;
bool stats_mysql_query_rules=false;
bool stats_pgsql_query_rules = false;
bool stats_mysql_users=false;
bool stats_pgsql_users = false;
bool stats_mysql_gtid_executed=false;
Expand Down Expand Up @@ -1228,8 +1233,12 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
}
if (strstr(query_no_space,"stats_mysql_query_digest"))
{ stats_mysql_query_digest=true; refresh=true; }
if (strstr(query_no_space, "stats_pgsql_query_digest"))
{ stats_pgsql_query_digest = true; refresh = true; }
if (strstr(query_no_space,"stats_mysql_query_digest_reset"))
{ stats_mysql_query_digest_reset=true; refresh=true; }
if (strstr(query_no_space, "stats_pgsql_query_digest_reset"))
{ stats_pgsql_query_digest_reset = true; refresh = true; }
if (stats_mysql_query_digest_reset == true && stats_mysql_query_digest == true) {
int nd = 0;
int ndr= 0;
Expand All @@ -1251,6 +1260,27 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
stats_mysql_query_digest = false;
}
}
if (stats_pgsql_query_digest_reset == true && stats_pgsql_query_digest == true) {
int nd = 0;
int ndr = 0;
char* c = NULL;
char* _ret = NULL;
c=(char*)query_no_space;
_ret=NULL;
while ((_ret=strstr(c,"stats_pgsql_query_digest_reset"))) {
ndr++;
c = _ret+strlen("stats_pgsql_query_digest_reset");
}
c=(char*)query_no_space;
_ret = NULL;
while ((_ret=strstr(c,"stats_pgsql_query_digest"))) {
nd++;
c = _ret+strlen("stats_pgsql_query_digest");
}
if (nd==ndr) {
stats_pgsql_query_digest = false;
}
}
if (strstr(query_no_space,"stats_mysql_errors"))
{ stats_mysql_errors=true; refresh=true; }
if (strstr(query_no_space,"stats_mysql_errors_reset"))
Expand Down Expand Up @@ -1284,8 +1314,12 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
{ stats_pgsql_free_connections=true; refresh=true; }
if (strstr(query_no_space,"stats_mysql_commands_counters"))
{ stats_mysql_commands_counters=true; refresh=true; }
if (strstr(query_no_space, "stats_pgsql_commands_counters"))
{ stats_pgsql_commands_counters = true; refresh = true; }
if (strstr(query_no_space,"stats_mysql_query_rules"))
{ stats_mysql_query_rules=true; refresh=true; }
if (strstr(query_no_space,"stats_pgsql_query_rules"))
{ stats_pgsql_query_rules = true; refresh = true; }
if (strstr(query_no_space,"stats_mysql_users"))
{ stats_mysql_users=true; refresh=true; }
if (strstr(query_no_space,"stats_pgsql_users"))
Expand Down Expand Up @@ -1441,6 +1475,13 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
stats___mysql_query_digests_v2(false, false, false);
}
}
if (stats_pgsql_query_digest_reset) {
stats___pgsql_query_digests_v2(true, stats_pgsql_query_digest, false);
} else {
if (stats_pgsql_query_digest) {
stats___pgsql_query_digests_v2(false, false, false);
}
}
if (stats_mysql_errors)
stats___mysql_errors(false);
if (stats_mysql_errors_reset) {
Expand Down Expand Up @@ -1476,8 +1517,12 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
stats___memory_metrics();
if (stats_mysql_query_rules)
stats___mysql_query_rules();
if (stats_pgsql_query_rules)
stats___pgsql_query_rules();
if (stats_mysql_commands_counters)
stats___mysql_commands_counters();
if (stats_pgsql_commands_counters)
stats___pgsql_commands_counters();
if (stats_mysql_users)
stats___mysql_users();
if (stats_pgsql_users)
Expand Down Expand Up @@ -1641,7 +1686,8 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
stats_mysql_gtid_executed || stats_mysql_free_connections ||
stats_pgsql_global || stats_pgsql_connection_pool || stats_pgsql_connection_pool_reset ||
stats_pgsql_free_connections || stats_pgsql_users || stats_pgsql_processlist ||
stats_pgsql_errors || stats_pgsql_errors_reset
stats_pgsql_errors || stats_pgsql_errors_reset || stats_pgsql_query_rules || stats_pgsql_commands_counters ||
stats_pgsql_query_digest || stats_pgsql_query_digest_reset
) {
ret = true;
}
Expand Down Expand Up @@ -1835,6 +1881,7 @@ void ProxySQL_Admin::vacuum_stats(bool is_admin) {
}
const vector<string> tablenames = {
"stats_mysql_commands_counters",
"stats_pgsql_commands_counters",
"stats_mysql_free_connections",
"stats_pgsql_free_connections",
"stats_mysql_connection_pool",
Expand All @@ -1846,7 +1893,10 @@ void ProxySQL_Admin::vacuum_stats(bool is_admin) {
"stats_pgsql_processlist",
"stats_mysql_query_digest",
"stats_mysql_query_digest_reset",
"stats_pgsql_query_digest",
"stats_pgsql_query_digest_reset",
"stats_mysql_query_rules",
"stats_pgsql_query_rules",
"stats_mysql_users",
"stats_pgsql_users",
"stats_proxysql_servers_checksums",
Expand Down
Loading

0 comments on commit 3e89a66

Please sign in to comment.