summaryrefslogtreecommitdiff
path: root/storage/xtradb/include/btr0sea.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/xtradb/include/btr0sea.h')
-rw-r--r--storage/xtradb/include/btr0sea.h187
1 files changed, 100 insertions, 87 deletions
diff --git a/storage/xtradb/include/btr0sea.h b/storage/xtradb/include/btr0sea.h
index 074e6595258..5c50829e874 100644
--- a/storage/xtradb/include/btr0sea.h
+++ b/storage/xtradb/include/btr0sea.h
@@ -16,7 +16,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
*****************************************************************************/
-/************************************************************************
+/********************************************************************//**
+@file include/btr0sea.h
The index tree adaptive search
Created 2/17/1996 Heikki Tuuri
@@ -33,81 +34,81 @@ Created 2/17/1996 Heikki Tuuri
#include "mtr0mtr.h"
#include "ha0ha.h"
-/*********************************************************************
+/*****************************************************************//**
Creates and initializes the adaptive search system at a database start. */
UNIV_INTERN
void
btr_search_sys_create(
/*==================*/
- ulint hash_size); /* in: hash index hash table size */
+ ulint hash_size); /*!< in: hash index hash table size */
-/************************************************************************
+/********************************************************************//**
Disable the adaptive hash search system and empty the index. */
UNIV_INTERN
void
btr_search_disable(void);
/*====================*/
-/************************************************************************
+/********************************************************************//**
Enable the adaptive hash search system. */
UNIV_INTERN
void
btr_search_enable(void);
/*====================*/
-/************************************************************************
-Returns search info for an index. */
+/********************************************************************//**
+Returns search info for an index.
+@return search info; search mutex reserved */
UNIV_INLINE
btr_search_t*
btr_search_get_info(
/*================*/
- /* out: search info; search mutex reserved */
- dict_index_t* index); /* in: index */
-/*********************************************************************
-Creates and initializes a search info struct. */
+ dict_index_t* index); /*!< in: index */
+/*****************************************************************//**
+Creates and initializes a search info struct.
+@return own: search info struct */
UNIV_INTERN
btr_search_t*
btr_search_info_create(
/*===================*/
- /* out, own: search info struct */
- mem_heap_t* heap); /* in: heap where created */
-/*********************************************************************
+ mem_heap_t* heap); /*!< in: heap where created */
+/*****************************************************************//**
Returns the value of ref_count. The value is protected by
-btr_search_latch. */
+btr_search_latch.
+@return ref_count value. */
UNIV_INTERN
ulint
btr_search_info_get_ref_count(
/*==========================*/
- /* out: ref_count value. */
- btr_search_t* info); /* in: search info. */
-/*************************************************************************
+ btr_search_t* info); /*!< in: search info. */
+/*********************************************************************//**
Updates the search info. */
UNIV_INLINE
void
btr_search_info_update(
/*===================*/
- dict_index_t* index, /* in: index of the cursor */
- btr_cur_t* cursor);/* in: cursor which was just positioned */
-/**********************************************************************
+ dict_index_t* index, /*!< in: index of the cursor */
+ btr_cur_t* cursor);/*!< in: cursor which was just positioned */
+/******************************************************************//**
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. */
+both have sensible values.
+@return TRUE if succeeded */
UNIV_INTERN
ibool
btr_search_guess_on_hash(
/*=====================*/
- /* out: TRUE if succeeded */
- dict_index_t* index, /* in: index */
- btr_search_t* info, /* in: index search info */
- const dtuple_t* tuple, /* in: logical record */
- ulint mode, /* in: PAGE_CUR_L, ... */
- ulint latch_mode, /* in: BTR_SEARCH_LEAF, ... */
- btr_cur_t* cursor, /* out: tree cursor */
- ulint has_search_latch,/* in: latch mode the caller
+ dict_index_t* index, /*!< in: index */
+ btr_search_t* info, /*!< in: index search info */
+ const dtuple_t* tuple, /*!< in: logical record */
+ ulint mode, /*!< in: PAGE_CUR_L, ... */
+ ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
+ btr_cur_t* cursor, /*!< out: tree cursor */
+ ulint has_search_latch,/*!< in: latch mode the caller
currently has on btr_search_latch:
RW_S_LATCH, RW_X_LATCH, or 0 */
- mtr_t* mtr); /* in: mtr */
-/************************************************************************
+ mtr_t* mtr); /*!< in: mtr */
+/********************************************************************//**
Moves or deletes hash entries for moved records. If new_page is already hashed,
then the hash index for page, if any, is dropped. If new_page is not hashed,
and page is hashed, then a new hash index is built to new_page with the same
@@ -116,139 +117,153 @@ UNIV_INTERN
void
btr_search_move_or_delete_hash_entries(
/*===================================*/
- buf_block_t* new_block, /* in: records are copied
+ buf_block_t* new_block, /*!< in: records are copied
to this page */
- buf_block_t* block, /* in: index page from which
+ buf_block_t* block, /*!< in: index page from which
records were copied, and the
copied records will be deleted
from this page */
- dict_index_t* index); /* in: record descriptor */
-/************************************************************************
+ dict_index_t* index); /*!< in: record descriptor */
+/********************************************************************//**
Drops a page hash index. */
UNIV_INTERN
void
btr_search_drop_page_hash_index(
/*============================*/
- buf_block_t* block); /* in: block containing index page,
+ buf_block_t* block); /*!< in: block containing index page,
s- or x-latched, or an index page
for which we know that
block->buf_fix_count == 0 */
/************************************************************************
+Drops a page hash index based on index */
+UNIV_INTERN
+void
+btr_search_drop_page_hash_index_on_index(
+/*=====================================*/
+ dict_index_t* index); /* in: record descriptor */
+/********************************************************************//**
Drops a page hash index when a page is freed from a fseg to the file system.
Drops possible hash index if the page happens to be in the buffer pool. */
UNIV_INTERN
void
btr_search_drop_page_hash_when_freed(
/*=================================*/
- ulint space, /* in: space id */
- ulint zip_size, /* in: compressed page size in bytes
+ ulint space, /*!< in: space id */
+ ulint zip_size, /*!< in: compressed page size in bytes
or 0 for uncompressed pages */
- ulint page_no); /* in: page number */
-/************************************************************************
+ ulint page_no); /*!< in: page number */
+/********************************************************************//**
Updates the page hash index when a single record is inserted on a page. */
UNIV_INTERN
void
btr_search_update_hash_node_on_insert(
/*==================================*/
- btr_cur_t* cursor);/* in: cursor which was positioned to the
+ btr_cur_t* cursor);/*!< in: cursor which was positioned to the
place to insert using btr_cur_search_...,
and the new record has been inserted next
to the cursor */
-/************************************************************************
+/********************************************************************//**
Updates the page hash index when a single record is inserted on a page. */
UNIV_INTERN
void
btr_search_update_hash_on_insert(
/*=============================*/
- btr_cur_t* cursor);/* in: cursor which was positioned to the
+ btr_cur_t* cursor);/*!< in: cursor which was positioned to the
place to insert using btr_cur_search_...,
and the new record has been inserted next
to the cursor */
-/************************************************************************
+/********************************************************************//**
Updates the page hash index when a single record is deleted from a page. */
UNIV_INTERN
void
btr_search_update_hash_on_delete(
/*=============================*/
- btr_cur_t* cursor);/* in: cursor which was positioned on the
+ btr_cur_t* cursor);/*!< in: cursor which was positioned on the
record to delete using btr_cur_search_...,
the record is not yet deleted */
-/************************************************************************
-Validates the search system. */
+/********************************************************************//**
+Validates the search system.
+@return TRUE if ok */
UNIV_INTERN
ibool
btr_search_validate(void);
/*======================*/
- /* out: TRUE if ok */
-/* Flag: has the search system been enabled?
+/** Flag: has the search system been enabled?
Protected by btr_search_latch and btr_search_enabled_mutex. */
extern char btr_search_enabled;
-/* The search info struct in an index */
-
+/** The search info struct in an index */
struct btr_search_struct{
- ulint ref_count; /* Number of blocks in this index tree
+ ulint ref_count; /*!< Number of blocks in this index tree
that have search index built
i.e. block->index points to this index.
Protected by btr_search_latch except
when during initialization in
btr_search_info_create(). */
- /* The following fields are not protected by any latch.
+ /* @{ The following fields are not protected by any latch.
Unfortunately, this means that they must be aligned to
the machine word, i.e., they cannot be turned into bit-fields. */
- buf_block_t* root_guess;/* the root page frame when it was last time
+ buf_block_t* root_guess;/*!< the root page frame when it was last time
fetched, or NULL */
- ulint hash_analysis; /* when this exceeds BTR_SEARCH_HASH_ANALYSIS,
- the hash analysis starts; this is reset if no
+ ulint hash_analysis; /*!< when this exceeds
+ BTR_SEARCH_HASH_ANALYSIS, the hash
+ analysis starts; this is reset if no
success noticed */
- ibool last_hash_succ; /* TRUE if the last search would have
+ ibool last_hash_succ; /*!< TRUE if the last search would have
succeeded, or did succeed, using the hash
index; NOTE that the value here is not exact:
it is not calculated for every search, and the
calculation itself is not always accurate! */
ulint n_hash_potential;
- /* number of consecutive searches
+ /*!< number of consecutive searches
which would have succeeded, or did succeed,
using the hash index;
the range is 0 .. BTR_SEARCH_BUILD_LIMIT + 5 */
- /*----------------------*/
- ulint n_fields; /* recommended prefix length for hash search:
+ /* @} */
+ /*---------------------- @{ */
+ ulint n_fields; /*!< recommended prefix length for hash search:
number of full fields */
- ulint n_bytes; /* recommended prefix: number of bytes in
- an incomplete field;
- see also BTR_PAGE_MAX_REC_SIZE */
- ibool left_side; /* TRUE or FALSE, depending on whether
+ ulint n_bytes; /*!< recommended prefix: number of bytes in
+ an incomplete field
+ @see BTR_PAGE_MAX_REC_SIZE */
+ ibool left_side; /*!< TRUE or FALSE, depending on whether
the leftmost record of several records with
the same prefix should be indexed in the
hash index */
- /*----------------------*/
+ /*---------------------- @} */
#ifdef UNIV_SEARCH_PERF_STAT
- ulint n_hash_succ; /* number of successful hash searches thus
+ ulint n_hash_succ; /*!< number of successful hash searches thus
far */
- ulint n_hash_fail; /* number of failed hash searches */
- ulint n_patt_succ; /* number of successful pattern searches thus
+ ulint n_hash_fail; /*!< number of failed hash searches */
+ ulint n_patt_succ; /*!< number of successful pattern searches thus
far */
- ulint n_searches; /* number of searches */
+ ulint n_searches; /*!< number of searches */
#endif /* UNIV_SEARCH_PERF_STAT */
#ifdef UNIV_DEBUG
- ulint magic_n; /* magic number */
+ ulint magic_n; /*!< magic number @see BTR_SEARCH_MAGIC_N */
+/** value of btr_search_struct::magic_n, used in assertions */
# define BTR_SEARCH_MAGIC_N 1112765
#endif /* UNIV_DEBUG */
};
-/* The hash index system */
-
+/** The hash index system */
typedef struct btr_search_sys_struct btr_search_sys_t;
+/** The hash index system */
struct btr_search_sys_struct{
- hash_table_t* hash_index;
+ hash_table_t* hash_index; /*!< the adaptive hash index,
+ mapping dtuple_fold values
+ to rec_t pointers on index pages */
};
+/** The adaptive hash index */
extern btr_search_sys_t* btr_search_sys;
-/* The latch protecting the adaptive search system: this latch protects the
+/** @brief The latch protecting the adaptive search system
+
+This latch protects the
(1) hash index;
(2) columns of a record to which we have a pointer in the hash index;
@@ -259,36 +274,34 @@ but does NOT protect:
Bear in mind (3) and (4) when using the hash index.
*/
-
extern rw_lock_t* btr_search_latch_temp;
+/** The latch protecting the adaptive search system */
#define btr_search_latch (*btr_search_latch_temp)
#ifdef UNIV_SEARCH_PERF_STAT
+/** Number of successful adaptive hash index lookups */
extern ulint btr_search_n_succ;
+/** Number of failed adaptive hash index lookups */
extern ulint btr_search_n_hash_fail;
#endif /* UNIV_SEARCH_PERF_STAT */
-/* After change in n_fields or n_bytes in info, this many rounds are waited
+/** 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. */
-
#define BTR_SEARCH_HASH_ANALYSIS 17
-/* Limit of consecutive searches for trying a search shortcut on the search
+/** Limit of consecutive searches for trying a search shortcut on the search
pattern */
-
#define BTR_SEARCH_ON_PATTERN_LIMIT 3
-/* Limit of consecutive searches for trying a search shortcut using the hash
-index */
-
+/** Limit of consecutive searches for trying a search shortcut using
+the hash index */
#define BTR_SEARCH_ON_HASH_LIMIT 3
-/* We do this many searches before trying to keep the search latch over calls
-from MySQL. If we notice someone waiting for the latch, we again set this
-much timeout. This is to reduce contention. */
-
+/** We do this many searches before trying to keep the search latch
+over calls from MySQL. If we notice someone waiting for the latch, we
+again set this much timeout. This is to reduce contention. */
#define BTR_SEA_TIMEOUT 10000
#ifndef UNIV_NONINL