Skip to content

Commit

Permalink
Bug #21040050 PURGE THREAD MUST EXIT SOONER AT SERVER SHUTDOWN
Browse files Browse the repository at this point in the history
PROBLEM

The purge thread takes too much long time during
shutdown. This is because we call trx_purge()
three times during shutdown,each time it is
called 300 undo log pages are being processed.
so even though you set batch size as 300,
900 undo pages are processed during shutdown,
whereas in 5.5 it is only called once
during shutdown.  This is the reason we are
seeing a 10 minute delay in shutdown time.

FIX
---
Instead of calling a separate trx_purge()
for truncating the history log, do it
with the trx_purge() in work loop once every
128 (TRX_SYS_N_RSEGS) times. Also reduce the
batch size to 20 for trx_purge() which is
called after detecting shutdown.

[#rb 9359 Approved by jimmy]
  • Loading branch information
Aditya A committed Jul 14, 2015
1 parent c86abd1 commit 3e8202f
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions storage/innobase/srv/srv0srv.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2585,13 +2585,8 @@ srv_do_purge(
}

n_pages_purged = trx_purge(
n_use_threads, srv_purge_batch_size, false);

if (!(count++ % TRX_SYS_N_RSEGS)) {
/* Force a truncate of the history list. */
n_pages_purged += trx_purge(
1, srv_purge_batch_size, true);
}
n_use_threads, srv_purge_batch_size,
(++count % TRX_SYS_N_RSEGS) == 0);

*n_total_purged += n_pages_purged;

Expand Down Expand Up @@ -2784,8 +2779,17 @@ DECLARE_THREAD(srv_purge_coordinator_thread)(
n_pages_purged = trx_purge(1, srv_purge_batch_size, false);
}

/* Force a truncate of the history list. */
n_pages_purged = trx_purge(1, srv_purge_batch_size, true);
/* This trx_purge is called to remove any undo records (added by
background threads) after completion of the above loop. When
srv_fast_shutdown != 0, a large batch size can cause significant
delay in shutdown ,so reducing the batch size to magic number 20
(which was default in 5.5), which we hope will be sufficient to
remove all the undo records */
const uint temp_batch_size = 20;

n_pages_purged = trx_purge(1, srv_purge_batch_size <= temp_batch_size
? srv_purge_batch_size : temp_batch_size,
true);
ut_a(n_pages_purged == 0 || srv_fast_shutdown != 0);

/* The task queue should always be empty, independent of fast
Expand Down

0 comments on commit 3e8202f

Please sign in to comment.