Commit 64fc766c authored by He Zhenxing's avatar He Zhenxing

BUG#45674 FLUSH STATUS does not reset semisynchronous counters

Semi-sync status were not reset by FLUSH STATUS, this was because
all semi-sync status variables are defined as SHOW_FUNC and FLUSH
STATUS could only reset SHOW_LONG type variables.

This problem is fixed by change all status variables that should
be reset by FLUSH STATUS from SHOW_FUNC to SHOW_LONG.

After the fix, the following status variables will be reset by
FLUSH STATUS:
  Rpl_semi_sync_master_yes_tx
  Rpl_semi_sync_master_no_tx

Note: normally, FLUSH STATUS itself will be written into binlog
and be replicated, so after FLUSH STATS, one of
  Rpl_semi_sync_master_yes_tx
  Rpl_semi_sync_master_no_tx
can be 1 dependent on the semi-sync status. So it's recommended
to use FLUSH NO_WRITE_TO_BINLOG STATUS to avoid this.
parent 7d3d0fc3
...@@ -204,6 +204,24 @@ Rpl_semi_sync_master_clients 1 ...@@ -204,6 +204,24 @@ Rpl_semi_sync_master_clients 1
drop table t1; drop table t1;
[ on slave ] [ on slave ]
include/stop_slave.inc include/stop_slave.inc
#
# Flush status
#
[ Semi-sync master status variables before FLUSH STATUS ]
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
Variable_name Value
Rpl_semi_sync_master_no_tx 3
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
Variable_name Value
Rpl_semi_sync_master_yes_tx 302
FLUSH NO_WRITE_TO_BINLOG STATUS;
[ Semi-sync master status variables after FLUSH STATUS ]
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
Variable_name Value
Rpl_semi_sync_master_no_tx 0
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
Variable_name Value
Rpl_semi_sync_master_yes_tx 0
[ on master ] [ on master ]
show master logs; show master logs;
Log_name master-bin.000001 Log_name master-bin.000001
......
...@@ -287,6 +287,20 @@ echo [ on slave ]; ...@@ -287,6 +287,20 @@ echo [ on slave ];
source include/stop_slave.inc; source include/stop_slave.inc;
--echo #
--echo # Flush status
--echo #
connection master;
echo [ Semi-sync master status variables before FLUSH STATUS ];
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
# Do not write the FLUSH STATUS to binlog, to make sure we'll get a
# clean status after this.
FLUSH NO_WRITE_TO_BINLOG STATUS;
echo [ Semi-sync master status variables after FLUSH STATUS ];
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
connection master; connection master;
echo [ on master ]; echo [ on master ];
......
...@@ -30,16 +30,16 @@ unsigned long rpl_semi_sync_master_yes_transactions = 0; ...@@ -30,16 +30,16 @@ unsigned long rpl_semi_sync_master_yes_transactions = 0;
unsigned long rpl_semi_sync_master_no_transactions = 0; unsigned long rpl_semi_sync_master_no_transactions = 0;
unsigned long rpl_semi_sync_master_off_times = 0; unsigned long rpl_semi_sync_master_off_times = 0;
unsigned long rpl_semi_sync_master_timefunc_fails = 0; unsigned long rpl_semi_sync_master_timefunc_fails = 0;
unsigned long rpl_semi_sync_master_num_timeouts = 0; unsigned long rpl_semi_sync_master_wait_timeouts = 0;
unsigned long rpl_semi_sync_master_wait_sessions = 0; unsigned long rpl_semi_sync_master_wait_sessions = 0;
unsigned long rpl_semi_sync_master_back_wait_pos = 0; unsigned long rpl_semi_sync_master_wait_pos_backtraverse = 0;
unsigned long rpl_semi_sync_master_trx_wait_time = 0; unsigned long rpl_semi_sync_master_avg_trx_wait_time = 0;
unsigned long long rpl_semi_sync_master_trx_wait_num = 0; unsigned long long rpl_semi_sync_master_trx_wait_num = 0;
unsigned long rpl_semi_sync_master_net_wait_time = 0; unsigned long rpl_semi_sync_master_avg_net_wait_time = 0;
unsigned long long rpl_semi_sync_master_net_wait_num = 0; unsigned long long rpl_semi_sync_master_net_wait_num = 0;
unsigned long rpl_semi_sync_master_clients = 0; unsigned long rpl_semi_sync_master_clients = 0;
unsigned long long rpl_semi_sync_master_net_wait_total_time = 0; unsigned long long rpl_semi_sync_master_net_wait_time = 0;
unsigned long long rpl_semi_sync_master_trx_wait_total_time = 0; unsigned long long rpl_semi_sync_master_trx_wait_time = 0;
static int getWaitTime(const struct timeval& start_tv); static int getWaitTime(const struct timeval& start_tv);
...@@ -379,16 +379,6 @@ ReplSemiSyncMaster::ReplSemiSyncMaster() ...@@ -379,16 +379,6 @@ ReplSemiSyncMaster::ReplSemiSyncMaster()
master_enabled_(false), master_enabled_(false),
wait_timeout_(0L), wait_timeout_(0L),
state_(0), state_(0),
enabled_transactions_(0),
disabled_transactions_(0),
switched_off_times_(0),
timefunc_fails_(0),
wait_sessions_(0),
wait_backtraverse_(0),
total_trx_wait_num_(0),
total_trx_wait_time_(0),
total_net_wait_num_(0),
total_net_wait_time_(0),
max_transactions_(0L) max_transactions_(0L)
{ {
strcpy(reply_file_name_, ""); strcpy(reply_file_name_, "");
...@@ -611,7 +601,7 @@ int ReplSemiSyncMaster::reportReplyBinlog(uint32 server_id, ...@@ -611,7 +601,7 @@ int ReplSemiSyncMaster::reportReplyBinlog(uint32 server_id,
log_file_name, (unsigned long)log_file_pos); log_file_name, (unsigned long)log_file_pos);
} }
if (wait_sessions_ > 0) if (rpl_semi_sync_master_wait_sessions > 0)
{ {
/* Let us check if some of the waiting threads doing a trx /* Let us check if some of the waiting threads doing a trx
* commit can now proceed. * commit can now proceed.
...@@ -707,7 +697,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name, ...@@ -707,7 +697,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
strcpy(wait_file_name_, trx_wait_binlog_name); strcpy(wait_file_name_, trx_wait_binlog_name);
wait_file_pos_ = trx_wait_binlog_pos; wait_file_pos_ = trx_wait_binlog_pos;
wait_backtraverse_++; rpl_semi_sync_master_wait_pos_backtraverse++;
if (trace_level_ & kTraceDetail) if (trace_level_ & kTraceDetail)
sql_print_information("%s: move back wait position (%s, %lu),", sql_print_information("%s: move back wait position (%s, %lu),",
kWho, wait_file_name_, (unsigned long)wait_file_pos_); kWho, wait_file_name_, (unsigned long)wait_file_pos_);
...@@ -752,7 +742,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name, ...@@ -752,7 +742,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
* when replication has progressed far enough, we will release * when replication has progressed far enough, we will release
* these waiting threads. * these waiting threads.
*/ */
wait_sessions_++; rpl_semi_sync_master_wait_sessions++;
if (trace_level_ & kTraceDetail) if (trace_level_ & kTraceDetail)
sql_print_information("%s: wait %lu ms for binlog sent (%s, %lu)", sql_print_information("%s: wait %lu ms for binlog sent (%s, %lu)",
...@@ -760,7 +750,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name, ...@@ -760,7 +750,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
wait_file_name_, (unsigned long)wait_file_pos_); wait_file_name_, (unsigned long)wait_file_pos_);
wait_result = cond_timewait(&abstime); wait_result = cond_timewait(&abstime);
wait_sessions_--; rpl_semi_sync_master_wait_sessions--;
if (wait_result != 0) if (wait_result != 0)
{ {
...@@ -769,7 +759,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name, ...@@ -769,7 +759,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
"semi-sync up to file %s, position %lu.", "semi-sync up to file %s, position %lu.",
trx_wait_binlog_name, (unsigned long)trx_wait_binlog_pos, trx_wait_binlog_name, (unsigned long)trx_wait_binlog_pos,
reply_file_name_, (unsigned long)reply_file_pos_); reply_file_name_, (unsigned long)reply_file_pos_);
total_wait_timeouts_++; rpl_semi_sync_master_wait_timeouts++;
/* switch semi-sync off */ /* switch semi-sync off */
switch_off(); switch_off();
...@@ -788,12 +778,12 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name, ...@@ -788,12 +778,12 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
"wait position (%s, %lu)", "wait position (%s, %lu)",
trx_wait_binlog_name, (unsigned long)trx_wait_binlog_pos); trx_wait_binlog_name, (unsigned long)trx_wait_binlog_pos);
} }
timefunc_fails_++; rpl_semi_sync_master_timefunc_fails++;
} }
else else
{ {
total_trx_wait_num_++; rpl_semi_sync_master_trx_wait_num++;
total_trx_wait_time_ += wait_time; rpl_semi_sync_master_trx_wait_time += wait_time;
} }
} }
} }
...@@ -806,7 +796,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name, ...@@ -806,7 +796,7 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
"wait position (%s, %lu)", "wait position (%s, %lu)",
trx_wait_binlog_name, (unsigned long)trx_wait_binlog_pos); trx_wait_binlog_name, (unsigned long)trx_wait_binlog_pos);
} }
timefunc_fails_++; rpl_semi_sync_master_timefunc_fails++;
/* switch semi-sync off */ /* switch semi-sync off */
switch_off(); switch_off();
...@@ -823,9 +813,9 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name, ...@@ -823,9 +813,9 @@ int ReplSemiSyncMaster::commitTrx(const char* trx_wait_binlog_name,
/* Update the status counter. */ /* Update the status counter. */
if (is_on() && rpl_semi_sync_master_clients) if (is_on() && rpl_semi_sync_master_clients)
enabled_transactions_++; rpl_semi_sync_master_yes_transactions++;
else else
disabled_transactions_++; rpl_semi_sync_master_no_transactions++;
/* The lock held will be released by thd_exit_cond, so no need to /* The lock held will be released by thd_exit_cond, so no need to
call unlock() here */ call unlock() here */
...@@ -865,7 +855,7 @@ int ReplSemiSyncMaster::switch_off() ...@@ -865,7 +855,7 @@ int ReplSemiSyncMaster::switch_off()
assert(active_tranxs_ != NULL); assert(active_tranxs_ != NULL);
result = active_tranxs_->clear_active_tranx_nodes(NULL, 0); result = active_tranxs_->clear_active_tranx_nodes(NULL, 0);
switched_off_times_++; rpl_semi_sync_master_off_times++;
wait_file_name_inited_ = false; wait_file_name_inited_ = false;
reply_file_name_inited_ = false; reply_file_name_inited_ = false;
sql_print_information("Semi-sync replication switched OFF."); sql_print_information("Semi-sync replication switched OFF.");
...@@ -1232,16 +1222,16 @@ int ReplSemiSyncMaster::resetMaster() ...@@ -1232,16 +1222,16 @@ int ReplSemiSyncMaster::resetMaster()
reply_file_name_inited_ = false; reply_file_name_inited_ = false;
commit_file_name_inited_ = false; commit_file_name_inited_ = false;
enabled_transactions_ = 0; rpl_semi_sync_master_yes_transactions = 0;
disabled_transactions_ = 0; rpl_semi_sync_master_no_transactions = 0;
switched_off_times_ = 0; rpl_semi_sync_master_off_times = 0;
timefunc_fails_ = 0; rpl_semi_sync_master_timefunc_fails = 0;
wait_sessions_ = 0; rpl_semi_sync_master_wait_sessions = 0;
wait_backtraverse_ = 0; rpl_semi_sync_master_wait_pos_backtraverse = 0;
total_trx_wait_num_ = 0; rpl_semi_sync_master_trx_wait_num = 0;
total_trx_wait_time_ = 0; rpl_semi_sync_master_trx_wait_time = 0;
total_net_wait_num_ = 0; rpl_semi_sync_master_net_wait_num = 0;
total_net_wait_time_ = 0; rpl_semi_sync_master_net_wait_time = 0;
unlock(); unlock();
...@@ -1253,26 +1243,14 @@ void ReplSemiSyncMaster::setExportStats() ...@@ -1253,26 +1243,14 @@ void ReplSemiSyncMaster::setExportStats()
lock(); lock();
rpl_semi_sync_master_status = state_ && rpl_semi_sync_master_clients; rpl_semi_sync_master_status = state_ && rpl_semi_sync_master_clients;
rpl_semi_sync_master_yes_transactions = enabled_transactions_; rpl_semi_sync_master_avg_trx_wait_time=
rpl_semi_sync_master_no_transactions = disabled_transactions_; ((rpl_semi_sync_master_trx_wait_num) ?
rpl_semi_sync_master_off_times = switched_off_times_; (unsigned long)((double)rpl_semi_sync_master_trx_wait_time /
rpl_semi_sync_master_timefunc_fails = timefunc_fails_; ((double)rpl_semi_sync_master_trx_wait_num)) : 0);
rpl_semi_sync_master_num_timeouts = total_wait_timeouts_; rpl_semi_sync_master_avg_net_wait_time=
rpl_semi_sync_master_wait_sessions = wait_sessions_; ((rpl_semi_sync_master_net_wait_num) ?
rpl_semi_sync_master_back_wait_pos = wait_backtraverse_; (unsigned long)((double)rpl_semi_sync_master_net_wait_time /
rpl_semi_sync_master_trx_wait_num = total_trx_wait_num_; ((double)rpl_semi_sync_master_net_wait_num)) : 0);
rpl_semi_sync_master_trx_wait_time =
((total_trx_wait_num_) ?
(unsigned long)((double)total_trx_wait_time_ /
((double)total_trx_wait_num_)) : 0);
rpl_semi_sync_master_net_wait_num = total_net_wait_num_;
rpl_semi_sync_master_net_wait_time =
((total_net_wait_num_) ?
(unsigned long)((double)total_net_wait_time_ /
((double)total_net_wait_num_)) : 0);
rpl_semi_sync_master_net_wait_total_time = total_net_wait_time_;
rpl_semi_sync_master_trx_wait_total_time = total_trx_wait_time_;
unlock(); unlock();
} }
......
...@@ -175,19 +175,7 @@ class ReplSemiSyncMaster ...@@ -175,19 +175,7 @@ class ReplSemiSyncMaster
volatile bool master_enabled_; /* semi-sync is enabled on the master */ volatile bool master_enabled_; /* semi-sync is enabled on the master */
unsigned long wait_timeout_; /* timeout period(ms) during tranx wait */ unsigned long wait_timeout_; /* timeout period(ms) during tranx wait */
/* All status variables. */
bool state_; /* whether semi-sync is switched */ bool state_; /* whether semi-sync is switched */
unsigned long enabled_transactions_; /* semi-sync'ed tansactions */
unsigned long disabled_transactions_; /* non-semi-sync'ed tansactions */
unsigned long switched_off_times_; /* how many times are switched off? */
unsigned long timefunc_fails_; /* how many time function fails? */
unsigned long total_wait_timeouts_; /* total number of wait timeouts */
unsigned long wait_sessions_; /* how many sessions wait for replies? */
unsigned long wait_backtraverse_; /* wait position back traverses */
unsigned long long total_trx_wait_num_; /* total trx waits: non-timeout ones */
unsigned long long total_trx_wait_time_; /* total trx wait time: in us */
unsigned long long total_net_wait_num_; /* total network waits */
unsigned long long total_net_wait_time_; /* total network wait time */
/* The number of maximum active transactions. This should be the same as /* The number of maximum active transactions. This should be the same as
* maximum connections because MySQL does not do connection sharing now. * maximum connections because MySQL does not do connection sharing now.
...@@ -356,22 +344,23 @@ class ReplSemiSyncMaster ...@@ -356,22 +344,23 @@ class ReplSemiSyncMaster
/* System and status variables for the master component */ /* System and status variables for the master component */
extern char rpl_semi_sync_master_enabled; extern char rpl_semi_sync_master_enabled;
extern char rpl_semi_sync_master_status;
extern unsigned long rpl_semi_sync_master_clients;
extern unsigned long rpl_semi_sync_master_timeout; extern unsigned long rpl_semi_sync_master_timeout;
extern unsigned long rpl_semi_sync_master_trace_level; extern unsigned long rpl_semi_sync_master_trace_level;
extern char rpl_semi_sync_master_status;
extern unsigned long rpl_semi_sync_master_yes_transactions; extern unsigned long rpl_semi_sync_master_yes_transactions;
extern unsigned long rpl_semi_sync_master_no_transactions; extern unsigned long rpl_semi_sync_master_no_transactions;
extern unsigned long rpl_semi_sync_master_off_times; extern unsigned long rpl_semi_sync_master_off_times;
extern unsigned long rpl_semi_sync_master_wait_timeouts;
extern unsigned long rpl_semi_sync_master_timefunc_fails; extern unsigned long rpl_semi_sync_master_timefunc_fails;
extern unsigned long rpl_semi_sync_master_num_timeouts; extern unsigned long rpl_semi_sync_master_num_timeouts;
extern unsigned long rpl_semi_sync_master_wait_sessions; extern unsigned long rpl_semi_sync_master_wait_sessions;
extern unsigned long rpl_semi_sync_master_back_wait_pos; extern unsigned long rpl_semi_sync_master_wait_pos_backtraverse;
extern unsigned long rpl_semi_sync_master_trx_wait_time; extern unsigned long rpl_semi_sync_master_avg_trx_wait_time;
extern unsigned long rpl_semi_sync_master_net_wait_time; extern unsigned long rpl_semi_sync_master_avg_net_wait_time;
extern unsigned long long rpl_semi_sync_master_net_wait_num; extern unsigned long long rpl_semi_sync_master_net_wait_num;
extern unsigned long long rpl_semi_sync_master_trx_wait_num; extern unsigned long long rpl_semi_sync_master_trx_wait_num;
extern unsigned long long rpl_semi_sync_master_net_wait_total_time; extern unsigned long long rpl_semi_sync_master_net_wait_time;
extern unsigned long long rpl_semi_sync_master_trx_wait_total_time; extern unsigned long long rpl_semi_sync_master_trx_wait_time;
extern unsigned long rpl_semi_sync_master_clients;
#endif /* SEMISYNC_MASTER_H */ #endif /* SEMISYNC_MASTER_H */
...@@ -268,45 +268,60 @@ Binlog_transmit_observer transmit_observer = { ...@@ -268,45 +268,60 @@ Binlog_transmit_observer transmit_observer = {
return 0; \ return 0; \
} }
DEF_SHOW_FUNC(clients, SHOW_LONG)
DEF_SHOW_FUNC(net_wait_time, SHOW_LONG)
DEF_SHOW_FUNC(net_wait_total_time, SHOW_LONGLONG)
DEF_SHOW_FUNC(net_wait_num, SHOW_LONGLONG)
DEF_SHOW_FUNC(off_times, SHOW_LONG)
DEF_SHOW_FUNC(no_transactions, SHOW_LONG)
DEF_SHOW_FUNC(status, SHOW_BOOL) DEF_SHOW_FUNC(status, SHOW_BOOL)
DEF_SHOW_FUNC(timefunc_fails, SHOW_LONG) DEF_SHOW_FUNC(clients, SHOW_LONG)
DEF_SHOW_FUNC(trx_wait_time, SHOW_LONG) DEF_SHOW_FUNC(trx_wait_time, SHOW_LONGLONG)
DEF_SHOW_FUNC(trx_wait_total_time, SHOW_LONGLONG)
DEF_SHOW_FUNC(trx_wait_num, SHOW_LONGLONG) DEF_SHOW_FUNC(trx_wait_num, SHOW_LONGLONG)
DEF_SHOW_FUNC(back_wait_pos, SHOW_LONG) DEF_SHOW_FUNC(net_wait_time, SHOW_LONGLONG)
DEF_SHOW_FUNC(wait_sessions, SHOW_LONG) DEF_SHOW_FUNC(net_wait_num, SHOW_LONGLONG)
DEF_SHOW_FUNC(yes_transactions, SHOW_LONG) DEF_SHOW_FUNC(avg_net_wait_time, SHOW_LONG)
DEF_SHOW_FUNC(avg_trx_wait_time, SHOW_LONG)
/* plugin status variables */ /* plugin status variables */
static SHOW_VAR semi_sync_master_status_vars[]= { static SHOW_VAR semi_sync_master_status_vars[]= {
{"Rpl_semi_sync_master_clients", (char*) &SHOW_FNAME(clients), SHOW_FUNC}, {"Rpl_semi_sync_master_status",
{"Rpl_semi_sync_master_net_avg_wait_time", (char*) &SHOW_FNAME(status),
(char*) &SHOW_FNAME(net_wait_time), SHOW_FUNC}, SHOW_FUNC},
{"Rpl_semi_sync_master_net_wait_time", {"Rpl_semi_sync_master_clients",
(char*) &SHOW_FNAME(net_wait_total_time), SHOW_FUNC}, (char*) &SHOW_FNAME(clients),
{"Rpl_semi_sync_master_net_waits", (char*) &SHOW_FNAME(net_wait_num), SHOW_FUNC}, SHOW_FUNC},
{"Rpl_semi_sync_master_no_times", (char*) &SHOW_FNAME(off_times), SHOW_FUNC}, {"Rpl_semi_sync_master_yes_tx",
{"Rpl_semi_sync_master_no_tx", (char*) &SHOW_FNAME(no_transactions), SHOW_FUNC}, (char*) &rpl_semi_sync_master_yes_transactions,
{"Rpl_semi_sync_master_status", (char*) &SHOW_FNAME(status), SHOW_FUNC}, SHOW_LONG},
{"Rpl_semi_sync_master_no_tx",
(char*) &rpl_semi_sync_master_no_transactions,
SHOW_LONG},
{"Rpl_semi_sync_master_wait_sessions",
(char*) &rpl_semi_sync_master_wait_sessions,
SHOW_LONG},
{"Rpl_semi_sync_master_no_times",
(char*) &rpl_semi_sync_master_off_times,
SHOW_LONG},
{"Rpl_semi_sync_master_timefunc_failures", {"Rpl_semi_sync_master_timefunc_failures",
(char*) &SHOW_FNAME(timefunc_fails), SHOW_FUNC}, (char*) &rpl_semi_sync_master_timefunc_fails,
{"Rpl_semi_sync_master_tx_avg_wait_time", SHOW_LONG},
(char*) &SHOW_FNAME(trx_wait_time), SHOW_FUNC},
{"Rpl_semi_sync_master_tx_wait_time",
(char*) &SHOW_FNAME(trx_wait_total_time), SHOW_FUNC},
{"Rpl_semi_sync_master_tx_waits", (char*) &SHOW_FNAME(trx_wait_num), SHOW_FUNC},
{"Rpl_semi_sync_master_wait_pos_backtraverse", {"Rpl_semi_sync_master_wait_pos_backtraverse",
(char*) &SHOW_FNAME(back_wait_pos), SHOW_FUNC}, (char*) &rpl_semi_sync_master_wait_pos_backtraverse,
{"Rpl_semi_sync_master_wait_sessions", SHOW_LONG},
(char*) &SHOW_FNAME(wait_sessions), SHOW_FUNC}, {"Rpl_semi_sync_master_tx_wait_time",
{"Rpl_semi_sync_master_yes_tx", (char*) &SHOW_FNAME(yes_transactions), SHOW_FUNC}, (char*) &SHOW_FNAME(trx_wait_time),
SHOW_FUNC},
{"Rpl_semi_sync_master_tx_waits",
(char*) &SHOW_FNAME(trx_wait_num),
SHOW_FUNC},
{"Rpl_semi_sync_master_tx_avg_wait_time",
(char*) &SHOW_FNAME(avg_trx_wait_time),
SHOW_FUNC},
{"Rpl_semi_sync_master_net_wait_time",
(char*) &SHOW_FNAME(net_wait_time),
SHOW_FUNC},
{"Rpl_semi_sync_master_net_waits",
(char*) &SHOW_FNAME(net_wait_num),
SHOW_FUNC},
{"Rpl_semi_sync_master_net_avg_wait_time",
(char*) &SHOW_FNAME(avg_net_wait_time),
SHOW_FUNC},
{NULL, NULL, SHOW_LONG}, {NULL, NULL, SHOW_LONG},
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment