Commit ae1d6c3e authored by Inaam Rana's avatar Inaam Rana

Bug #57611 ibdata file and continuous growing undo logs

rb://498

Fix handling of update_undo_logs at trx commit. Previously, when
rseg->update_undo_list grows beyond 500 the update_undo_logs were
marked with state TRX_UNDO_TO_FREE which should have been
TRX_UNDO_TO_PURGE.

Approved by: Sunny Bains
parent ce7d61b8
...@@ -1752,21 +1752,11 @@ trx_undo_set_state_at_finish( ...@@ -1752,21 +1752,11 @@ trx_undo_set_state_at_finish(
if (undo->size == 1 if (undo->size == 1
&& mach_read_from_2(page_hdr + TRX_UNDO_PAGE_FREE) && mach_read_from_2(page_hdr + TRX_UNDO_PAGE_FREE)
< TRX_UNDO_PAGE_REUSE_LIMIT) { < TRX_UNDO_PAGE_REUSE_LIMIT
&& UT_LIST_GET_LEN(rseg->update_undo_list) < 500
&& UT_LIST_GET_LEN(rseg->insert_undo_list) < 500) {
/* This is a heuristic to avoid the problem of all UNDO state = TRX_UNDO_CACHED;
slots ending up in one of the UNDO lists. Previously if
the server crashed with all the slots in one of the lists,
transactions that required the slots of a different type
would fail for lack of slots. */
if (UT_LIST_GET_LEN(rseg->update_undo_list) < 500
&& UT_LIST_GET_LEN(rseg->insert_undo_list) < 500) {
state = TRX_UNDO_CACHED;
} else {
state = TRX_UNDO_TO_FREE;
}
} else if (undo->type == TRX_UNDO_INSERT) { } else if (undo->type == TRX_UNDO_INSERT) {
......
...@@ -1823,21 +1823,11 @@ trx_undo_set_state_at_finish( ...@@ -1823,21 +1823,11 @@ trx_undo_set_state_at_finish(
if (undo->size == 1 if (undo->size == 1
&& mach_read_from_2(page_hdr + TRX_UNDO_PAGE_FREE) && mach_read_from_2(page_hdr + TRX_UNDO_PAGE_FREE)
< TRX_UNDO_PAGE_REUSE_LIMIT) { < TRX_UNDO_PAGE_REUSE_LIMIT
&& UT_LIST_GET_LEN(rseg->update_undo_list) < 500
&& UT_LIST_GET_LEN(rseg->insert_undo_list) < 500) {
/* This is a heuristic to avoid the problem of all UNDO state = TRX_UNDO_CACHED;
slots ending up in one of the UNDO lists. Previously if
the server crashed with all the slots in one of the lists,
transactions that required the slots of a different type
would fail for lack of slots. */
if (UT_LIST_GET_LEN(rseg->update_undo_list) < 500
&& UT_LIST_GET_LEN(rseg->insert_undo_list) < 500) {
state = TRX_UNDO_CACHED;
} else {
state = TRX_UNDO_TO_FREE;
}
} else if (undo->type == TRX_UNDO_INSERT) { } else if (undo->type == TRX_UNDO_INSERT) {
......
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