trx0undo.c, trx0purge.c:

Print a warning to the .err log if the InnoDB history list length is > 20 000 even though purge reaches the list head; this is to track corruption reported on the MySQL mailing list Nov 9, 2004
lock0lock.c:
  Let SHOW INNODB STATUS print the history list length


innobase/lock/lock0lock.c:
  Let SHOW INNODB STATUS print the history list length
innobase/trx/trx0purge.c:
  Print a warning to the .err log if the InnoDB history list length is > 20 000 even though purge reaches the list head; this is to track corruption reported on the MySQL mailing list Nov 9, 2004
innobase/trx/trx0undo.c:
  Print a warning to the .err log if the InnoDB history list length is > 20 000 even though purge reaches the list head; this is to track corruption reported on the MySQL mailing list Nov 9, 2004
This commit is contained in:
unknown 2004-11-21 17:38:15 +02:00
parent 2d0011fce8
commit 5a7198f54d
3 changed files with 26 additions and 2 deletions

View file

@ -4063,6 +4063,9 @@ lock_print_info(
(ulong) ut_dulint_get_high(purge_sys->purge_undo_no),
(ulong) ut_dulint_get_low(purge_sys->purge_undo_no));
fprintf(file,
"History list length %lu\n", (ulong) trx_sys->rseg_history_len);
fprintf(file,
"Total number of lock structs in row lock hash table %lu\n",
(ulong) lock_get_n_rec_locks());

View file

@ -289,7 +289,7 @@ trx_purge_add_update_undo_to_history(
flst_get_len(seg_header + TRX_UNDO_PAGE_LIST, mtr));
mlog_write_ulint(rseg_header + TRX_RSEG_HISTORY_SIZE,
hist_size + undo->size, MLOG_4BYTES, mtr);
hist_size + undo->size, MLOG_4BYTES, mtr);
}
/* Add the log as the first in the history list */
@ -646,6 +646,27 @@ trx_purge_rseg_get_next_history_log(
mutex_exit(&(rseg->mutex));
mtr_commit(&mtr);
mutex_enter(&kernel_mutex);
/* Add debug code to track history list corruption reported
on the MySQL mailing list on Nov 9, 2004. The fut0lst.c
file-based list was corrupt. The prev node pointer was
FIL_NULL, even though the list length was over 8 million nodes!
We assume that purge truncates the history list in moderate
size pieces, and if we here reach the head of the list, the
list cannot be longer than 20 000 undo logs now. */
if (trx_sys->rseg_history_len > 20000) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Warning: purge reached the head of the history list,\n"
"InnoDB: but its length is still reported as %lu! Make a detailed bug\n"
"InnoDB: report, and post it to bugs.mysql.com\n",
(ulong)trx_sys->rseg_history_len);
}
mutex_exit(&kernel_mutex);
return;
}

View file

@ -1241,7 +1241,7 @@ trx_undo_lists_init(
if (page_no != FIL_NULL
&& srv_force_recovery < SRV_FORCE_NO_UNDO_LOG_SCAN) {
undo = trx_undo_mem_create_at_db_start(rseg, i,
page_no, &mtr);
size += undo->size;