• Marko Mäkelä's avatar
    Bug#13006367 62487: innodb takes 3 minutes to clean up the adaptive · 41b97529
    Marko Mäkelä authored
    hash index at shutdown
    
    btr_search_disable(): Just drop the entire adaptive hash index,
    without dropping every record separately.
    
    buf_pool_clear_hash_index(): Renamed and simplified from
    buf_pool_drop_hash_index(). Set block->index = NULL for every block in
    the buffer pool. Do not release the btr_search_latch. The caller will
    have to adjust other data structures.
    
    Remove block->is_hashed. It is redundant, should be always equal to
    block->index != NULL.
    
    Remove btr_search_fully_disabled, btr_search_enabled_mutex, and
    SYNC_SEARCH_SYS_CONF. We drop the AHI in one pass, without releasing
    the btr_search_latch in between.
    
    Replace void* with const rec_t* and add assertions on btr_search_latch
    and btr_search_enabled to ha0ha.h, ha0ha.ic, ha0ha.c.
    
    page_set_max_trx_id(): Ignore the adaptive hash index. I forgot to
    push this in rb:750.
    
    btr0sea.c: Always after acquiring btr_search_latch, check for
    block->index==NULL or !btr_search_enabled. We can now set
    block->index=NULL while only holding btr_search_latch in exclusive
    mode. Always acquire btr_search_latch before reading block->index,
    except in shortcuts when testing for block->index == NULL.
    
    ha_clear(), ha_search(): Unused function, remove.
    
    buf_page_peek_if_search_hashed(): Remove. This function may avoid
    latching a page at the cost of doing a duplicate buf_pool->page_hash
    lookup.
    
    rb:775 approved by Inaam Rana
    41b97529
btr0sea.h 10.5 KB