Expanding stats_mysql_connection_pool

Added counters of queries using gtid sync
Added PR #1343 for FR #1207
pull/1404/merge
René Cannaò 8 years ago
parent 46d7f9a14b
commit 9a6b176d31

@ -317,6 +317,7 @@ class MySrvC { // MySQL Server Container
unsigned int compression;
unsigned int max_connections;
unsigned int max_replication_lag;
unsigned int max_connections_used; // The maximum number of connections that has been opened
unsigned int connect_OK;
unsigned int connect_ERR;
// note that these variables are in microsecond, while user defines max lantency in millisecond
@ -325,6 +326,7 @@ class MySrvC { // MySQL Server Container
time_t time_last_detected_error;
unsigned int connect_ERR_at_time_last_detected_error;
unsigned long long queries_sent;
unsigned long long queries_gtid_sync;
unsigned long long bytes_sent;
unsigned long long bytes_recv;
bool shunned_automatic;
@ -337,6 +339,18 @@ class MySrvC { // MySQL Server Container
~MySrvC();
void connect_error(int);
void shun_and_killall();
/**
* Update the maximum number of used connections
* @return
* the maximum number of used connections
*/
unsigned int update_max_connections_used()
{
unsigned int connections_used = ConnectionsUsed->conns_length();
if (max_connections_used < connections_used)
max_connections_used = connections_used;
return max_connections_used;
}
};
class MySrvList { // MySQL Server List

@ -172,6 +172,9 @@ class MySQL_Session
bool session_fast_forward;
bool started_sending_data_to_client; // this status variable tracks if some result set was sent to the client, of if proysql is still buffering everything
bool with_gtid;
MySQL_STMTs_meta *sess_STMTs_meta;
StmtLongDataHandler *SLDH;

@ -652,6 +652,8 @@ MySrvC::MySrvC(char *add, uint16_t p, uint16_t gp, unsigned int _weight, enum My
queries_sent=0;
bytes_sent=0;
bytes_recv=0;
max_connections_used=0;
queries_gtid_sync=0;
time_last_detected_error=0;
connect_ERR_at_time_last_detected_error=0;
shunned_automatic=false;
@ -2030,6 +2032,7 @@ MySQL_Connection * MySQL_HostGroups_Manager::get_MyConn_from_pool(unsigned int _
if (conn) {
mysrvc->ConnectionsUsed->add(conn);
status.myconnpoll_get_ok++;
mysrvc->update_max_connections_used();
}
}
wrunlock();
@ -2210,7 +2213,7 @@ void MySQL_HostGroups_Manager::set_incoming_group_replication_hostgroups(SQLite3
}
SQLite3_result * MySQL_HostGroups_Manager::SQL3_Connection_Pool(bool _reset) {
const int colnum=12;
const int colnum=14;
proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 4, "Dumping Connection Pool\n");
SQLite3_result *result=new SQLite3_result(colnum);
result->add_column_definition(SQLITE_TEXT,"hostgroup");
@ -2221,7 +2224,9 @@ SQLite3_result * MySQL_HostGroups_Manager::SQL3_Connection_Pool(bool _reset) {
result->add_column_definition(SQLITE_TEXT,"ConnFree");
result->add_column_definition(SQLITE_TEXT,"ConnOK");
result->add_column_definition(SQLITE_TEXT,"ConnERR");
result->add_column_definition(SQLITE_TEXT,"MaxConnUsed");
result->add_column_definition(SQLITE_TEXT,"Queries");
result->add_column_definition(SQLITE_TEXT,"Queries_GTID_sync");
result->add_column_definition(SQLITE_TEXT,"Bytes_sent");
result->add_column_definition(SQLITE_TEXT,"Bytes_recv");
result->add_column_definition(SQLITE_TEXT,"Latency_us");
@ -2284,23 +2289,33 @@ SQLite3_result * MySQL_HostGroups_Manager::SQL3_Connection_Pool(bool _reset) {
if (_reset) {
mysrvc->connect_ERR=0;
}
sprintf(buf,"%llu", mysrvc->queries_sent);
sprintf(buf,"%u", mysrvc->max_connections_used);
pta[8]=strdup(buf);
if (_reset) {
mysrvc->max_connections_used=0;
}
sprintf(buf,"%llu", mysrvc->queries_sent);
pta[9]=strdup(buf);
if (_reset) {
mysrvc->queries_sent=0;
}
sprintf(buf,"%llu", mysrvc->queries_gtid_sync);
pta[10]=strdup(buf);
if (_reset) {
mysrvc->queries_gtid_sync=0;
}
sprintf(buf,"%llu", mysrvc->bytes_sent);
pta[9]=strdup(buf);
pta[11]=strdup(buf);
if (_reset) {
mysrvc->bytes_sent=0;
}
sprintf(buf,"%llu", mysrvc->bytes_recv);
pta[10]=strdup(buf);
pta[12]=strdup(buf);
if (_reset) {
mysrvc->bytes_recv=0;
}
sprintf(buf,"%u", mysrvc->current_latency_us);
pta[11]=strdup(buf);
pta[13]=strdup(buf);
result->add_row(pta);
for (k=0; k<colnum; k++) {
if (pta[k])

@ -273,6 +273,8 @@ MySQL_Session::MySQL_Session() {
mirror_flagOUT=-1;
active_transactions=0;
with_gtid = false;
match_regexes=NULL;
/*
match_regexes=(Session_Regex **)malloc(sizeof(Session_Regex *)*3);
@ -3821,7 +3823,7 @@ void MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C
void MySQL_Session::handler___client_DSS_QUERY_SENT___server_DSS_NOT_INITIALIZED__get_connection() {
// Get a MySQL Connection
bool with_gtid = false;
with_gtid = false;
MySQL_Connection *mc=NULL;
MySQL_Backend * _gtid_from_backend = NULL;
char uuid[64];

@ -266,9 +266,9 @@ static int http_handler(void *cls, struct MHD_Connection *connection, const char
#define STATS_SQLITE_TABLE_MYSQL_USERS "CREATE TABLE stats_mysql_users (username VARCHAR PRIMARY KEY , frontend_connections INT NOT NULL , frontend_max_connections INT NOT NULL)"
#define STATS_SQLITE_TABLE_MYSQL_COMMANDS_COUNTERS "CREATE TABLE stats_mysql_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_MYSQL_PROCESSLIST "CREATE TABLE stats_mysql_processlist (ThreadID INT NOT NULL , SessionID INTEGER PRIMARY KEY , user VARCHAR , db VARCHAR , cli_host VARCHAR , cli_port INT , hostgroup INT , l_srv_host VARCHAR , l_srv_port INT , srv_host VARCHAR , srv_port INT , command VARCHAR , time_ms INT NOT NULL , info VARCHAR)"
#define STATS_SQLITE_TABLE_MYSQL_CONNECTION_POOL "CREATE TABLE stats_mysql_connection_pool (hostgroup INT , srv_host VARCHAR , srv_port INT , status VARCHAR , ConnUsed INT , ConnFree INT , ConnOK INT , ConnERR INT , Queries INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)"
#define STATS_SQLITE_TABLE_MYSQL_CONNECTION_POOL "CREATE TABLE stats_mysql_connection_pool (hostgroup INT , srv_host VARCHAR , srv_port INT , status VARCHAR , ConnUsed INT , ConnFree INT , ConnOK INT , ConnERR INT , MaxConnUsed INT , Queries INT , Queries_GTID_sync INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)"
#define STATS_SQLITE_TABLE_MYSQL_CONNECTION_POOL_RESET "CREATE TABLE stats_mysql_connection_pool_reset (hostgroup INT , srv_host VARCHAR , srv_port INT , status VARCHAR , ConnUsed INT , ConnFree INT , ConnOK INT , ConnERR INT , Queries INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)"
#define STATS_SQLITE_TABLE_MYSQL_CONNECTION_POOL_RESET "CREATE TABLE stats_mysql_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 , Queries_GTID_sync INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)"
#define STATS_SQLITE_TABLE_MYSQL_QUERY_DIGEST "CREATE TABLE stats_mysql_query_digest (hostgroup INT , schemaname VARCHAR NOT NULL , username 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 , PRIMARY KEY(hostgroup, schemaname, username, digest))"
@ -5176,15 +5176,15 @@ void ProxySQL_Admin::stats___mysql_connection_pool(bool _reset) {
if (resultset==NULL) return;
statsdb->execute("BEGIN");
statsdb->execute("DELETE FROM stats_mysql_connection_pool");
char *a=(char *)"INSERT INTO stats_mysql_connection_pool VALUES (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")";
char *a=(char *)"INSERT INTO stats_mysql_connection_pool VALUES (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")";
for (std::vector<SQLite3_row *>::iterator it = resultset->rows.begin() ; it != resultset->rows.end(); ++it) {
SQLite3_row *r=*it;
int arg_len=0;
for (int i=0; i<12; i++) {
for (int i=0; i<14; i++) {
arg_len+=strlen(r->fields[i]);
}
char *query=(char *)malloc(strlen(a)+arg_len+32);
sprintf(query,a,r->fields[0],r->fields[1],r->fields[2],r->fields[3],r->fields[4],r->fields[5],r->fields[6],r->fields[7],r->fields[8],r->fields[9],r->fields[10],r->fields[11]);
sprintf(query,a,r->fields[0],r->fields[1],r->fields[2],r->fields[3],r->fields[4],r->fields[5],r->fields[6],r->fields[7],r->fields[8],r->fields[9],r->fields[10],r->fields[11],r->fields[12],r->fields[13]);
statsdb->execute(query);
free(query);
}

@ -710,6 +710,9 @@ handler_again:
__sync_fetch_and_add(&parent->queries_sent,1);
__sync_fetch_and_add(&parent->bytes_sent,query.length);
myds->sess->thread->status_variables.queries_backends_bytes_sent+=query.length;
if (myds->sess->with_gtid == true) {
__sync_fetch_and_add(&parent->queries_gtid_sync,1);
}
if (async_exit_status) {
next_event(ASYNC_QUERY_CONT);
} else {

Loading…
Cancel
Save