mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
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:
parent
2d0011fce8
commit
5a7198f54d
3 changed files with 26 additions and 2 deletions
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue