mirror of
https://github.com/MariaDB/server.git
synced 2025-10-26 01:18:31 +02:00
Let us use implement a simple fixed-size allocator for the adaptive hash index, insted of complicating mem_heap_t or mem_block_info_t. MEM_HEAP_BTR_SEARCH: Remove. mem_block_info_t::free_block(), mem_heap_free_block_free(): Remove. mem_heap_free_top(), mem_heap_get_top(): Remove. btr_sea::partition::spare: Replaces mem_block_info_t::free_block. This keeps one spare block per adaptive hash index partition, to process an insert. We must not wait for buf_pool.mutex while holding any btr_sea::partition::latch. That is why we cache one block for future allocations. This is protected by a new btr_sea::partition::blocks_mutex in order to relieve pressure on btr_sea::partition::latch. btr_sea::partition::prepare_insert(): Replaces btr_search_check_free_space_in_heap(). btr_sea::partition::erase(): Replaces ha_search_and_delete_if_found(). btr_sea::partition::cleanup_after_erase(): Replaces the most part of ha_delete_hash_node(). Unlike the previous implementation, we will retain a spare block for prepare_insert(). This should reduce some contention on buf_pool.mutex. btr_search.n_parts: Replaces btr_ahi_parts. btr_search.enabled: Replaces btr_search_enabled. This must hold whenever buf_block_t::index is set while a thread is holding a btr_sea::partition::latch. dict_index_t::search_info: Remove pointer indirection, and use Atomic_relaxed or Atomic_counter for most fields. btr_search_guess_on_hash(): Let the caller ensure that latch_mode is BTR_MODIFY_LEAF or BTR_SEARCH_LEAF. Release btr_sea::partition::latch before buffer-fixing the block. The page latch that we already acquired is preventing buffer pool eviction. We must validate both block->index and block->page.state while holding part.latch in order to avoid race conditions with buffer page relocation or buf_pool_t::resize(). btr_search_check_guess(): Remove the constant parameter can_only_compare_to_cursor_rec=false. ahi_node: Replaces ha_node_t. This has been tested by running the regression test suite with the adaptive hash index enabled: ./mtr --mysqld=--loose-innodb-adaptive-hash-index=ON Reviewed by: Vladislav Lesin |
||
|---|---|---|
| .. | ||
| quicklz | ||
| aria_backup_client.cc | ||
| aria_backup_client.h | ||
| backup_copy.cc | ||
| backup_copy.h | ||
| backup_debug.h | ||
| backup_mysql.cc | ||
| backup_mysql.h | ||
| backup_wsrep.h | ||
| CMakeLists.txt | ||
| common.h | ||
| common_engine.cc | ||
| common_engine.h | ||
| datasink.cc | ||
| datasink.h | ||
| ddl_log.cc | ||
| ddl_log.h | ||
| ds_buffer.cc | ||
| ds_buffer.h | ||
| ds_compress.cc | ||
| ds_compress.h | ||
| ds_local.cc | ||
| ds_local.h | ||
| ds_stdout.cc | ||
| ds_stdout.h | ||
| ds_tmpfile.cc | ||
| ds_tmpfile.h | ||
| ds_xbstream.cc | ||
| ds_xbstream.h | ||
| encryption_plugin.cc | ||
| encryption_plugin.h | ||
| fil_cur.cc | ||
| fil_cur.h | ||
| innobackupex.cc | ||
| innobackupex.h | ||
| read_filt.cc | ||
| read_filt.h | ||
| thread_pool.cc | ||
| thread_pool.h | ||
| write_filt.cc | ||
| write_filt.h | ||
| wsrep.cc | ||
| xb_regex.h | ||
| xbcloud.cc | ||
| xbstream.cc | ||
| xbstream.h | ||
| xbstream_read.cc | ||
| xbstream_write.cc | ||
| xtrabackup.cc | ||
| xtrabackup.h | ||