From a98a034c5e8bd4cac8794bb59e6fce138344ce0c Mon Sep 17 00:00:00 2001 From: Kristian Nielsen Date: Thu, 13 Nov 2014 09:56:28 +0100 Subject: [PATCH] MDEV-7102: Incorrect PSI_stage_info message in SHOW PROCESSLIST during parallel replication In parallel replication, threads can do two different waits for a prior transaction. One is for the prior transaction to start commit, the other is for it to complete commit. It turns out that the same PSI_stage_info message was errorneously used in both cases (probably a merge error), causing SHOW PROCESSLIST to be misleading. Fix by using correct, distinct message in each case. --- sql/mysqld.cc | 4 +++- sql/mysqld.h | 1 + sql/rpl_parallel.cc | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 5b93942081b..b1b8e6b11c0 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -9484,7 +9484,8 @@ PSI_stage_info stage_binlog_waiting_background_tasks= { 0, "Waiting for backgrou PSI_stage_info stage_binlog_processing_checkpoint_notify= { 0, "Processing binlog checkpoint notification", 0}; PSI_stage_info stage_binlog_stopping_background_thread= { 0, "Stopping binlog background thread", 0}; PSI_stage_info stage_waiting_for_work_from_sql_thread= { 0, "Waiting for work from SQL thread", 0}; -PSI_stage_info stage_waiting_for_prior_transaction_to_commit= { 0, "Waiting for prior transaction to start commit before starting next transaction", 0}; +PSI_stage_info stage_waiting_for_prior_transaction_to_commit= { 0, "Waiting for prior transaction to commit", 0}; +PSI_stage_info stage_waiting_for_prior_transaction_to_start_commit= { 0, "Waiting for prior transaction to start commit before starting next transaction", 0}; PSI_stage_info stage_waiting_for_room_in_worker_thread= { 0, "Waiting for room in worker thread event queue", 0}; PSI_stage_info stage_master_gtid_wait_primary= { 0, "Waiting in MASTER_GTID_WAIT() (primary waiter)", 0}; PSI_stage_info stage_master_gtid_wait= { 0, "Waiting in MASTER_GTID_WAIT()", 0}; @@ -9599,6 +9600,7 @@ PSI_stage_info *all_server_stages[]= & stage_waiting_for_master_to_send_event, & stage_waiting_for_master_update, & stage_waiting_for_prior_transaction_to_commit, + & stage_waiting_for_prior_transaction_to_start_commit, & stage_waiting_for_query_cache_lock, & stage_waiting_for_relay_log_space, & stage_waiting_for_room_in_worker_thread, diff --git a/sql/mysqld.h b/sql/mysqld.h index 90cad2a604f..d66ea8f2e97 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -448,6 +448,7 @@ extern PSI_stage_info stage_binlog_processing_checkpoint_notify; extern PSI_stage_info stage_binlog_stopping_background_thread; extern PSI_stage_info stage_waiting_for_work_from_sql_thread; extern PSI_stage_info stage_waiting_for_prior_transaction_to_commit; +extern PSI_stage_info stage_waiting_for_prior_transaction_to_start_commit; extern PSI_stage_info stage_waiting_for_room_in_worker_thread; extern PSI_stage_info stage_master_gtid_wait_primary; extern PSI_stage_info stage_master_gtid_wait; diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc index cda224ff01b..c26469acb78 100644 --- a/sql/rpl_parallel.cc +++ b/sql/rpl_parallel.cc @@ -656,7 +656,7 @@ handle_rpl_parallel_thread(void *arg) DEBUG_SYNC(thd, "rpl_parallel_start_waiting_for_prior"); thd->ENTER_COND(&gco->COND_group_commit_orderer, &entry->LOCK_parallel_entry, - &stage_waiting_for_prior_transaction_to_commit, + &stage_waiting_for_prior_transaction_to_start_commit, &old_stage); did_enter_cond= true; do