/** Minimum LRU list length for which the LRU_old pointer is defined */ #define BUF_LRU_OLD_MIN_LEN 512/* 8 megabytes of 16k pages */
/** Try to free a block. If bpage is a descriptor of a compressed-only ROW_FORMAT=COMPRESSEDpage,thebuf_page_tobjectwillbefreedaswell. Thecallermustholdbuf_pool.mutex. @parambpageblocktobefreed @paramzipwhethertoremovebothcopiesofaROW_FORMAT=COMPRESSEDpage @retvaltrueiffreedandbuf_pool.mutexmayhavebeentemporarilyreleased
@retval false if the page was not freed */ bool buf_LRU_free_page(buf_page_t *bpage, bool zip)
MY_ATTRIBUTE((nonnull));
/** Try to free a replaceable block. @paramlimitmaximumnumberofblockstoscan
@return true if found and freed */ bool buf_LRU_scan_and_free_block(ulint limit= ULINT_UNDEFINED);
/** How to acquire a block */ enum buf_LRU_get { /** The caller is not holding buf_pool.mutex */
have_no_mutex= 0, /** The caller is holding buf_pool.mutex */
have_mutex, /** The caller is not holding buf_pool.mutex and is OK if a block
cannot be allocated. */
have_no_mutex_soft
};
/** Get a block from the buf_pool.free list. Ifthelistisempty,blockswillbemovedfromtheendofbuf_pool.LRU tobuf_pool.free.
@paramgethowtoallocatetheblock @returnthefreecontrolblock,instateBUF_BLOCK_MEMORY
@retval nullptr if get==have_no_mutex_soft and memory was not available */
buf_block_t* buf_LRU_get_free_block(buf_LRU_get get)
MY_ATTRIBUTE((malloc,warn_unused_result));
/** @return whether the unzip_LRU list should be used for evicting a victim
instead of the general LRU list */ bool buf_LRU_evict_from_unzip_LRU();
/** Free a buffer block which does not contain a file page, whileholdingbuf_pool.mutex.
@param block block to be put to buf_pool.free */ void buf_LRU_block_free_non_file_page(buf_block_t *block);
/******************************************************************//**
Adds a block to the LRU list. Please make sure that the page_size is
already set when invoking the function, so that we can get correct
page_size from the buffer page when adding a block into LRU */ void
buf_LRU_add_block( /*==============*/
buf_page_t* bpage, /*!< in: control block */ bool old); /*!< in: true if should be put to the old blocksintheLRUlist,elseputtothe start;iftheLRUlistisveryshort,addedto
the start regardless of this parameter */
/** Move a block to the start of the buf_pool.LRU list.
@param bpage buffer pool page */ void buf_page_make_young(buf_page_t *bpage); /** Flag a page accessed in buf_pool and move it to the start of buf_pool.LRU ifitistooold. @parambpagebufferpoolpage
@return whether this is not the first access */ bool buf_page_make_young_if_needed(buf_page_t *bpage);
/******************************************************************//**
Adds a block to the LRU list of decompressed zip pages. */ void
buf_unzip_LRU_add_block( /*====================*/
buf_block_t* block, /*!< in: control block */
ibool old); /*!< in: TRUE if should be put to the end
of the list, else put to the start */
/** Evict the temporary tablespace pages above the given threshold
@param threshold Above this page to be removed from LRU list */ void buf_LRU_truncate_temp(uint32_t threshold);
/** Update buf_pool.LRU_old_ratio. @param[in]old_pctReservethispercentageof thebufferpoolfor"old"blocks @param[in]adjusttrue=adjusttheLRUlist; false=justassignbuf_pool.LRU_old_ratio duringtheinitializationofInnoDB
@return updated old_pct */
uint buf_LRU_old_ratio_update(uint old_pct, bool adjust); /********************************************************************//**
Update the historical stats that we are collecting for LRU eviction
policy at the end of each interval. */ void
buf_LRU_stat_update();
#ifdef UNIV_DEBUG /** Validate the LRU list. */ void buf_LRU_validate(); #endif/* UNIV_DEBUG */ #ifdefined UNIV_DEBUG_PRINT || defined UNIV_DEBUG /** Dump the LRU list to stderr. */ void buf_LRU_print(); #endif/* UNIV_DEBUG_PRINT || UNIV_DEBUG */
/** @name Heuristics for detecting index scan @{ */ /** The denominator of buf_pool.LRU_old_ratio. */ #define BUF_LRU_OLD_RATIO_DIV 1024 /** Maximum value of buf_pool.LRU_old_ratio. @seebuf_LRU_old_adjust_len
@see buf_pool.LRU_old_ratio_update */ #define BUF_LRU_OLD_RATIO_MAX BUF_LRU_OLD_RATIO_DIV /** Minimum value of buf_pool.LRU_old_ratio. @seebuf_LRU_old_adjust_len @seebuf_pool.LRU_old_ratio_update Theminimummustexceed
(BUF_LRU_OLD_TOLERANCE + 5) * BUF_LRU_OLD_RATIO_DIV / BUF_LRU_OLD_MIN_LEN. */ #define BUF_LRU_OLD_RATIO_MIN 51
/** Move blocks to "new" LRU list only if the first access was at
least this many milliseconds ago. Not protected by any mutex or latch. */ extern uint buf_LRU_old_threshold_ms; /* @} */
/** @brief Statistics for selecting the LRU list for eviction.
Thesestatisticsarenot'of'LRUbut'for'LRU.WekeepcountofI/O andpage_zip_decompress()operations.Basedonthestatisticswedecide
if we want to evict from buf_pool.unzip_LRU or buf_pool.LRU. */ struct buf_LRU_stat_t
{
ulint io; /**< Counter of buffer pool I/O operations. */
ulint unzip; /**< Counter of page_zip_decompress operations. */
};
/** Current operation counters. Not protected by any mutex.
Cleared by buf_LRU_stat_update(). */ extern buf_LRU_stat_t buf_LRU_stat_cur;
/** Running sum of past values of buf_LRU_stat_cur.
Updated by buf_LRU_stat_update(). Protected by buf_pool.mutex. */ extern buf_LRU_stat_t buf_LRU_stat_sum;
/********************************************************************//**
Increments the I/O counter in buf_LRU_stat_cur. */ #define buf_LRU_stat_inc_io() buf_LRU_stat_cur.io++ /********************************************************************//**
Increments the page_zip_decompress() counter in buf_LRU_stat_cur. */ #define buf_LRU_stat_inc_unzip() buf_LRU_stat_cur.unzip++
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.