![]() |
MySQL 9.0.0
Source Code Documentation
|
The index tree adaptive search. More...
#include "univ.i"
#include "btr0types.h"
#include "dict0dict.h"
#include "ha0ha.h"
#include "mtr0mtr.h"
#include "rem0rec.h"
#include "btr0sea.ic"
Go to the source code of this file.
Classes | |
struct | btr_search_t |
The search info struct in an index. More... | |
class | btr_search_sys_t |
The hash index system. More... | |
class | btr_search_sys_t::search_part_t |
Functions | |
void | btr_search_sys_create (ulint hash_size) |
Creates and initializes the adaptive search system at a database start. More... | |
void | btr_search_sys_resize (ulint hash_size) |
Resize hash index hash table. More... | |
void | btr_search_sys_free () |
Frees the adaptive search system at a database shutdown. More... | |
bool | btr_search_disable () |
Disable the adaptive hash search system and empty the index. More... | |
void | btr_search_enable () |
Enable the adaptive hash search system. More... | |
btr_search_t * | btr_search_info_create (mem_heap_t *heap) |
Creates and initializes a search info struct. More... | |
void | btr_search_await_no_reference (dict_table_t *table, dict_index_t *index, bool force) |
Wait for the specified index to have all references from AHI dropped. More... | |
static void | btr_search_info_update (btr_cur_t *cursor) |
Updates the search info statistics following a search in B-tree that was performed not using or not finding row with the AHI index. More... | |
bool | btr_search_guess_on_hash (const dtuple_t *tuple, ulint mode, ulint latch_mode, btr_cur_t *cursor, ulint has_search_latch, mtr_t *mtr) |
Tries to guess the right search position based on the hash search info of the index. More... | |
void | btr_search_update_hash_on_move (buf_block_t *new_block, buf_block_t *block, dict_index_t *index) |
Moves or deletes hash entries for moved records. More... | |
void | btr_search_drop_page_hash_index (buf_block_t *block, bool force=false) |
Drop any adaptive hash index entries that point to an index page. More... | |
void | btr_search_set_block_not_cached (buf_block_t *block) |
Resets block's AHI index field to nullptr, removes the reference from index's reference counter. More... | |
void | btr_search_drop_page_hash_when_freed (const page_id_t &page_id, const page_size_t &page_size) |
Drop any adaptive hash index entries that may point to an index page that may be in the buffer pool, when a page is evicted from the buffer pool or freed in a file segment. More... | |
void | btr_drop_ahi_for_table (dict_table_t *table) |
Drop any adaptive hash index entries for a table. More... | |
void | btr_drop_ahi_for_index (const dict_index_t *index) |
Drop any adaptive hash index entries for a index. More... | |
void | btr_search_update_hash_node_on_insert (btr_cur_t *cursor) |
Updates the page hash index when a single record is inserted on a page. More... | |
void | btr_search_update_hash_on_insert (btr_cur_t *cursor) |
Updates the page hash index when a single record is inserted on a page. More... | |
void | btr_search_update_hash_on_delete (btr_cur_t *cursor) |
Updates the page hash index when a single record is deleted from a page. More... | |
bool | btr_search_validate () |
Validates the search system. More... | |
static void | btr_search_x_lock (const dict_index_t *index, ut::Location location) |
X-Lock the search latch (corresponding to given index) More... | |
static bool | btr_search_x_lock_nowait (const dict_index_t *index, ut::Location location) |
X-Lock the search latch (corresponding to given index), does not block. More... | |
static void | btr_search_x_unlock (const dict_index_t *index) |
X-Unlock the search latch (corresponding to given index) More... | |
static void | btr_search_x_lock_all (ut::Location location) |
Lock all search latches in exclusive mode. More... | |
static void | btr_search_x_unlock_all () |
Unlock all search latches from exclusive mode. More... | |
static void | btr_search_s_lock (const dict_index_t *index, ut::Location location) |
S-Lock the search latch (corresponding to given index) More... | |
static bool | btr_search_s_lock_nowait (const dict_index_t *index, ut::Location location) |
S-Lock the search latch (corresponding to given index), does not block. More... | |
static void | btr_search_s_unlock (const dict_index_t *index) |
S-Unlock the search latch (corresponding to given index) More... | |
static void | btr_search_s_lock_all (ut::Location location) |
Lock all search latches in shared mode. More... | |
static bool | btr_search_own_all (ulint mode) |
Check if thread owns all the search latches. More... | |
static bool | btr_search_own_any (ulint mode) |
Check if thread owns any of the search latches. More... | |
static void | btr_search_s_unlock_all () |
Unlock all search latches from shared mode. More... | |
static size_t | btr_search_hash_index_id (const dict_index_t *index) |
Compute a hash value for a specified index. More... | |
static class btr_search_sys_t::search_part_t & | btr_get_search_part (const dict_index_t *index) |
Gets a pointer to a adaptive search part structure for a specified index. More... | |
static rw_lock_t * | btr_get_search_latch (const dict_index_t *index) |
Get the latch based on index attributes. More... | |
Variables | |
constexpr uint32_t | BTR_SEARCH_MAGIC_N = 1112765 |
value of btr_search_t::magic_n, used in assertions More... | |
btr_search_sys_t * | btr_search_sys |
The adaptive hash index. More... | |
constexpr uint32_t | BTR_SEARCH_HASH_ANALYSIS = 17 |
After change in n_fields or n_bytes in info, this many rounds are waited before starting the hash analysis again: this is to save CPU time when there is no hope in building a hash index. More... | |
constexpr uint32_t | BTR_SEARCH_ON_PATTERN_LIMIT = 3 |
Limit of consecutive searches for trying a search shortcut on the search pattern. More... | |
constexpr uint32_t | BTR_SEARCH_ON_HASH_LIMIT = 3 |
Limit of consecutive searches for trying a search shortcut using the hash index. More... | |
The index tree adaptive search.
Created 2/17/1996 Heikki Tuuri
void btr_drop_ahi_for_index | ( | const dict_index_t * | index | ) |
Drop any adaptive hash index entries for a index.
[in,out] | index | to drop hash indexes for this index |
void btr_drop_ahi_for_table | ( | dict_table_t * | table | ) |
Drop any adaptive hash index entries for a table.
[in,out] | table | to drop indexes of this table |
|
inlinestatic |
Get the latch based on index attributes.
A latch is selected from an array of latches using pair of index-id, space-id.
[in] | index | index handler |
|
inlinestatic |
Gets a pointer to a adaptive search part structure for a specified index.
[in] | index | Index structure |
void btr_search_await_no_reference | ( | dict_table_t * | table, |
dict_index_t * | index, | ||
bool | force | ||
) |
Wait for the specified index to have all references from AHI dropped.
We assume the caller prevents the new references from AHI from being created. This means the reference count will monotonically drop to zero.
[in,out] | table | table handler |
[in,out] | index | index data dictionary structure |
[in] | force | should the wait be forced even if SRV_SHUTDOWN_CLEANUP state was reached? |
bool btr_search_disable | ( | ) |
Disable the adaptive hash search system and empty the index.
void btr_search_drop_page_hash_index | ( | buf_block_t * | block, |
bool | force = false |
||
) |
Drop any adaptive hash index entries that point to an index page.
[in,out] | block | block containing index page, s- or x-latched, or an index page for which we know that block->buf_fix_count == 0 or it is an index page which has already been removed from the buf_pool->page_hash i.e.: it is in state BUF_BLOCK_REMOVE_HASH |
[in] | force | Should the block's index be reset even if AHI is disabled? |
void btr_search_drop_page_hash_when_freed | ( | const page_id_t & | page_id, |
const page_size_t & | page_size | ||
) |
Drop any adaptive hash index entries that may point to an index page that may be in the buffer pool, when a page is evicted from the buffer pool or freed in a file segment.
[in] | page_id | page id |
[in] | page_size | page size |
void btr_search_enable | ( | ) |
Enable the adaptive hash search system.
bool btr_search_guess_on_hash | ( | const dtuple_t * | tuple, |
ulint | mode, | ||
ulint | latch_mode, | ||
btr_cur_t * | cursor, | ||
ulint | has_search_latch, | ||
mtr_t * | mtr | ||
) |
Tries to guess the right search position based on the hash search info of the index.
Note that if mode is PAGE_CUR_LE, which is used in inserts, and the function returns true, then cursor->up_match and cursor->low_match both have sensible values.
[in] | tuple | Logical record |
[in] | mode | PAGE_CUR_L, .... |
[in] | latch_mode | BTR_SEARCH_LEAF, ...; NOTE that only if has_search_latch is 0, we will have a latch set on the cursor page, otherwise we assume the caller uses his search latch to protect the record! |
[out] | cursor | Tree cursor |
[in] | has_search_latch | Latch mode the caller currently has on search system: RW_S/X_LATCH or 0 |
[in] | mtr | Mini-transaction |
|
inlinestatic |
Compute a hash value for a specified index.
[in] | index | Index structure |
btr_search_t * btr_search_info_create | ( | mem_heap_t * | heap | ) |
Creates and initializes a search info struct.
[in] | heap | heap where created. |
|
inlinestatic |
Updates the search info statistics following a search in B-tree that was performed not using or not finding row with the AHI index.
It may do nothing or decide to try to update the searched record on which the supplied cursor in positioned at, or add the whole page to AHI.
[in] | cursor | cursor which was just positioned |
|
inlinestatic |
Check if thread owns all the search latches.
[in] | mode | lock mode check |
true | if owns all of them |
false | if does not own some of them |
|
inlinestatic |
Check if thread owns any of the search latches.
[in] | mode | lock mode check |
true | if owns any of them |
false | if owns no search latch |
|
inlinestatic |
S-Lock the search latch (corresponding to given index)
[in] | index | index handler |
[in] | location | source location |
|
inlinestatic |
Lock all search latches in shared mode.
[in] | location | source location |
|
inlinestatic |
S-Lock the search latch (corresponding to given index), does not block.
[in] | index | index handler |
[in] | location | source location |
|
inlinestatic |
S-Unlock the search latch (corresponding to given index)
[in] | index | index handler |
|
inlinestatic |
Unlock all search latches from shared mode.
void btr_search_set_block_not_cached | ( | buf_block_t * | block | ) |
Resets block's AHI index field to nullptr, removes the reference from index's reference counter.
This is done after all blocks' records were removed from AHI hash tables and caller assures the block still has reference to index.
[in,out] | block | index page from which records were removed from AHI hash tables. |
void btr_search_sys_create | ( | ulint | hash_size | ) |
Creates and initializes the adaptive search system at a database start.
[in] | hash_size | hash table size. |
void btr_search_sys_free | ( | ) |
Frees the adaptive search system at a database shutdown.
void btr_search_sys_resize | ( | ulint | hash_size | ) |
Resize hash index hash table.
[in] | hash_size | hash index hash table size |
void btr_search_update_hash_node_on_insert | ( | btr_cur_t * | cursor | ) |
Updates the page hash index when a single record is inserted on a page.
[in] | cursor | cursor which was positioned to the place to insert using btr_cur_search_, and the new record has been inserted next to the cursor. |
void btr_search_update_hash_on_delete | ( | btr_cur_t * | cursor | ) |
Updates the page hash index when a single record is deleted from a page.
[in] | cursor | cursor which was positioned on the record to delete using btr_cur_search_, the record is not yet deleted. |
void btr_search_update_hash_on_insert | ( | btr_cur_t * | cursor | ) |
Updates the page hash index when a single record is inserted on a page.
[in,out] | cursor | cursor which was positioned to the place to insert using btr_cur_search_..., and the new record has been inserted next to the cursor. |
void btr_search_update_hash_on_move | ( | buf_block_t * | new_block, |
buf_block_t * | block, | ||
dict_index_t * | index | ||
) |
Moves or deletes hash entries for moved records.
If new_page is already hashed in compatible way or not cached at all, then the hash index for the new page is (re-)built. Otherwise the old page hash records are dropped.
[in,out] | new_block | records are copied to this page. |
[in,out] | block | index page from which record are copied, and the copied records will be deleted from this page. |
[in,out] | index | record descriptor |
bool btr_search_validate | ( | ) |
Validates the search system.
|
inlinestatic |
X-Lock the search latch (corresponding to given index)
[in] | index | index handler |
[in] | location | source location |
|
inlinestatic |
Lock all search latches in exclusive mode.
[in] | location | source location |
|
inlinestatic |
X-Lock the search latch (corresponding to given index), does not block.
[in] | index | index handler |
[in] | location | source location |
|
inlinestatic |
X-Unlock the search latch (corresponding to given index)
[in] | index | index handler |
|
inlinestatic |
Unlock all search latches from exclusive mode.
|
constexpr |
After change in n_fields or n_bytes in info, this many rounds are waited before starting the hash analysis again: this is to save CPU time when there is no hope in building a hash index.
|
constexpr |
value of btr_search_t::magic_n, used in assertions
|
constexpr |
Limit of consecutive searches for trying a search shortcut using the hash index.
|
constexpr |
Limit of consecutive searches for trying a search shortcut on the search pattern.
|
extern |
The adaptive hash index.