From f10cf420686e19f47039ac0b3a9f4f94f977961c Mon Sep 17 00:00:00 2001 From: Marko Makela Date: Thu, 29 Apr 2010 15:37:50 +0200 Subject: recv_sys_init(), recv_sys_empty_hash(): Shrink recv_sys->addr_hash. recv_addr_t: Turn space,page_no into bitfields to save space on 64-bit. This addresses Bug #53122 in the InnoDB Plugin. --- storage/innodb_plugin/ChangeLog | 6 ++++++ storage/innodb_plugin/include/log0recv.h | 4 ++-- storage/innodb_plugin/log/log0recv.c | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/storage/innodb_plugin/ChangeLog b/storage/innodb_plugin/ChangeLog index ef71ac90f84..fb34b7bf493 100644 --- a/storage/innodb_plugin/ChangeLog +++ b/storage/innodb_plugin/ChangeLog @@ -1,3 +1,9 @@ +2010-04-28 The InnoDB Team + + * log/log0recv.h, log/log0recv.c: + Fix Bug#53122 InnoDB recovery uses too big a hash table for redo + log records + 2010-04-27 The InnoDB Team * handler/ha_innodb.cc, lock/lock0lock.c, row/row0mysql.c, diff --git a/storage/innodb_plugin/include/log0recv.h b/storage/innodb_plugin/include/log0recv.h index 3209799e140..9f334a34b44 100644 --- a/storage/innodb_plugin/include/log0recv.h +++ b/storage/innodb_plugin/include/log0recv.h @@ -368,8 +368,8 @@ typedef struct recv_addr_struct recv_addr_t; struct recv_addr_struct{ enum recv_addr_state state; /*!< recovery state of the page */ - ulint space; /*!< space id */ - ulint page_no;/*!< page number */ + unsigned space:32;/*!< space id */ + unsigned page_no:32;/*!< page number */ UT_LIST_BASE_NODE_T(recv_t) rec_list;/*!< list of log records for this page */ hash_node_t addr_hash;/*!< hash node in the hash bucket chain */ diff --git a/storage/innodb_plugin/log/log0recv.c b/storage/innodb_plugin/log/log0recv.c index dc1459b2c0f..a727d6be768 100644 --- a/storage/innodb_plugin/log/log0recv.c +++ b/storage/innodb_plugin/log/log0recv.c @@ -321,7 +321,7 @@ recv_sys_init( recv_sys->len = 0; recv_sys->recovered_offset = 0; - recv_sys->addr_hash = hash_create(available_memory / 64); + recv_sys->addr_hash = hash_create(available_memory / 512); recv_sys->n_addrs = 0; recv_sys->apply_log_recs = FALSE; @@ -361,7 +361,7 @@ recv_sys_empty_hash(void) hash_table_free(recv_sys->addr_hash); mem_heap_empty(recv_sys->heap); - recv_sys->addr_hash = hash_create(buf_pool_get_curr_size() / 256); + recv_sys->addr_hash = hash_create(buf_pool_get_curr_size() / 512); } #ifndef UNIV_HOTBACKUP -- cgit v1.2.1