Added aws_aurora_replicas_skipped_during_query

aws_aurora_replicas_skipped_during_query is a status variable for better
monitoring behavior due to replication lag in AWS Aurora

Also fixed lag computing in connection pool
pull/2044/head
René Cannaò 7 years ago
parent af0a7100e2
commit b74181eeea

@ -384,7 +384,7 @@ class MyHGC { // MySQL Host Group Container
MySrvList *mysrvs;
MyHGC(int);
~MyHGC();
MySrvC *get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_lag_ms);
MySrvC *get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_lag_ms, MySQL_Session *sess);
};
class Group_Replication_Info {

@ -247,6 +247,7 @@ class MySQL_Thread
unsigned long long unexpected_packet;
unsigned long long killed_connections;
unsigned long long killed_queries;
unsigned long long aws_aurora_replicas_skipped_during_query;
unsigned int active_transactions;
} status_variables;
@ -513,6 +514,7 @@ class MySQL_Threads_Handler
unsigned long long get_max_connect_timeout();
unsigned long long get_unexpected_com_quit();
unsigned long long get_unexpected_packet();
unsigned long long get_aws_aurora_replicas_skipped_during_query();
unsigned long long get_killed_connections();
unsigned long long get_killed_queries();
iface_info *MLM_find_iface_from_fd(int fd) {

@ -2190,7 +2190,7 @@ void MySQL_HostGroups_Manager::push_MyConn_to_pool_array(MySQL_Connection **ca,
wrunlock();
}
MySrvC *MyHGC::get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_lag_ms) {
MySrvC *MyHGC::get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_lag_ms, MySQL_Session *sess) {
MySrvC *mysrvc=NULL;
unsigned int j;
unsigned int sum=0;
@ -2210,9 +2210,11 @@ MySrvC *MyHGC::get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_
}
} else {
if (max_lag_ms >= 0) {
if (max_lag_ms <= mysrvc->aws_aurora_current_lag_us/1000) {
if (max_lag_ms >= mysrvc->aws_aurora_current_lag_us/1000) {
sum+=mysrvc->weight;
TotalUsedConn+=mysrvc->ConnectionsUsed->conns_length();
} else {
sess->thread->status_variables.aws_aurora_replicas_skipped_during_query++;
}
} else {
sum+=mysrvc->weight;
@ -2256,7 +2258,7 @@ MySrvC *MyHGC::get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_
}
} else {
if (max_lag_ms >= 0) {
if (max_lag_ms <= mysrvc->aws_aurora_current_lag_us/1000) {
if (max_lag_ms >= mysrvc->aws_aurora_current_lag_us/1000) {
sum+=mysrvc->weight;
TotalUsedConn+=mysrvc->ConnectionsUsed->conns_length();
}
@ -2299,7 +2301,7 @@ MySrvC *MyHGC::get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_
}
} else {
if (max_lag_ms >= 0) {
if (max_lag_ms <= mysrvc->aws_aurora_current_lag_us/1000) {
if (max_lag_ms >= mysrvc->aws_aurora_current_lag_us/1000) {
sum+=mysrvc->weight;
TotalUsedConn+=mysrvc->ConnectionsUsed->conns_length();
}
@ -2336,7 +2338,7 @@ MySrvC *MyHGC::get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_
}
} else {
if (max_lag_ms >= 0) {
if (max_lag_ms <= mysrvc->aws_aurora_current_lag_us/1000) {
if (max_lag_ms >= mysrvc->aws_aurora_current_lag_us/1000) {
New_sum+=mysrvc->weight;
New_TotalUsedConn+=len;
}
@ -2379,7 +2381,7 @@ MySrvC *MyHGC::get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_
}
} else {
if (max_lag_ms >= 0) {
if (max_lag_ms <= mysrvc->aws_aurora_current_lag_us/1000) {
if (max_lag_ms >= mysrvc->aws_aurora_current_lag_us/1000) {
New_sum+=mysrvc->weight;
}
} else {
@ -2486,7 +2488,7 @@ MySQL_Connection * MySQL_HostGroups_Manager::get_MyConn_from_pool(unsigned int _
wrlock();
status.myconnpoll_get++;
MyHGC *myhgc=MyHGC_lookup(_hid);
MySrvC *mysrvc=myhgc->get_random_MySrvC(gtid_uuid, gtid_trxid, max_lag_ms);
MySrvC *mysrvc=myhgc->get_random_MySrvC(gtid_uuid, gtid_trxid, max_lag_ms, sess);
if (mysrvc) { // a MySrvC exists. If not, we return NULL = no targets
conn=mysrvc->ConnectionsFree->get_random_MyConn(sess, ff);
if (conn) {

@ -3813,6 +3813,7 @@ MySQL_Thread::MySQL_Thread() {
status_variables.unexpected_packet = 0;
status_variables.killed_connections = 0;
status_variables.killed_queries = 0;
status_variables.aws_aurora_replicas_skipped_during_query = 0;
match_regexes=NULL;
@ -4321,6 +4322,12 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_GlobalStatus(bool _memory) {
pta[1]=buf;
result->add_row(pta);
}
{ // AWS Aurora replicas skipped during query
pta[0]=(char *)"aws_aurora_replicas_skipped_during_query";
sprintf(buf,"%llu",get_aws_aurora_replicas_skipped_during_query());
pta[1]=buf;
result->add_row(pta);
}
{ // killed connections
pta[0]=(char *)"mysql_killed_backend_connections";
sprintf(buf,"%llu",get_killed_connections());
@ -5126,7 +5133,8 @@ MySQL_Connection * MySQL_Thread::get_MyConn_local(unsigned int _hid, MySQL_Sessi
// c=(MySQL_Connection *)cached_connections->remove_index_fast(i);
if (max_lag_ms >= 0) {
if (max_lag_ms >= (c->parent->aws_aurora_current_lag_us / 1000)) {
if (max_lag_ms < (c->parent->aws_aurora_current_lag_us / 1000)) {
status_variables.aws_aurora_replicas_skipped_during_query++;
continue;
}
}
@ -5289,6 +5297,19 @@ unsigned long long MySQL_Threads_Handler::get_unexpected_packet() {
return q;
}
unsigned long long MySQL_Threads_Handler::get_aws_aurora_replicas_skipped_during_query() {
unsigned long long q=0;
unsigned int i;
for (i=0;i<num_threads;i++) {
if (mysql_threads) {
MySQL_Thread *thr=(MySQL_Thread *)mysql_threads[i].worker;
if (thr)
q+=__sync_fetch_and_add(&thr->status_variables.aws_aurora_replicas_skipped_during_query,0);
}
}
return q;
}
unsigned long long MySQL_Threads_Handler::get_killed_connections() {
unsigned long long q=0;
unsigned int i;

Loading…
Cancel
Save