Backport into build-201102032246-5.1.52sp1

> ------------------------------------------------------------
> revno: 3351.14.280
> revision-id: inaam.rana@oracle.com-20101026205418-aq835zpvxdskdf4c
> parent: jimmy.yang@oracle.com-20101025055121-j319j363abfgdh6n
> committer: Inaam Rana <inaam.rana@oracle.com>
> branch nick: mysql-5.1-innodb
> timestamp: Tue 2010-10-26 16:54:18 -0400
> message:
>   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
This commit is contained in:
MySQL Build Team 2011-02-09 21:10:07 +01:00
parent 10fd22ad8b
commit a0dfae2591
2 changed files with 8 additions and 28 deletions

View file

@ -1752,21 +1752,11 @@ trx_undo_set_state_at_finish(
if (undo->size == 1
&& 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
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;
}
state = TRX_UNDO_CACHED;
} else if (undo->type == TRX_UNDO_INSERT) {

View file

@ -1823,21 +1823,11 @@ trx_undo_set_state_at_finish(
if (undo->size == 1
&& 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
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;
}
state = TRX_UNDO_CACHED;
} else if (undo->type == TRX_UNDO_INSERT) {