InnoDB Plugin
1.0
|
Go to the source code of this file.
Data Structures | |
struct | buf_LRU_stat_t |
Statistics for selecting the LRU list for eviction. More... |
Macros | |
#define | BUF_LRU_OLD_MIN_LEN 512 /* 8 megabytes of 16k pages */ |
#define | buf_LRU_stat_inc_io() buf_LRU_stat_cur.io++ |
#define | buf_LRU_stat_inc_unzip() buf_LRU_stat_cur.unzip++ |
Variables | |
buf_LRU_stat_t | buf_LRU_stat_cur |
buf_LRU_stat_t | buf_LRU_stat_sum |
Heuristics for detecting index scan @{ | |
#define | BUF_LRU_OLD_RATIO_DIV 1024 |
#define | BUF_LRU_OLD_RATIO_MAX BUF_LRU_OLD_RATIO_DIV |
#define | BUF_LRU_OLD_RATIO_MIN 51 |
uint | buf_LRU_old_threshold_ms |
The database buffer pool LRU replacement algorithm
Created 11/5/1995 Heikki Tuuri
#define BUF_LRU_OLD_MIN_LEN 512 /* 8 megabytes of 16k pages */ |
Minimum LRU list length for which the LRU_old pointer is defined
#define BUF_LRU_OLD_RATIO_DIV 1024 |
The denominator of buf_pool->LRU_old_ratio.
#define BUF_LRU_OLD_RATIO_MAX BUF_LRU_OLD_RATIO_DIV |
Maximum value of buf_pool->LRU_old_ratio.
#define BUF_LRU_OLD_RATIO_MIN 51 |
Minimum value of buf_pool->LRU_old_ratio.
#define buf_LRU_stat_inc_io | ( | ) | buf_LRU_stat_cur.io++ |
Increments the I/O counter in buf_LRU_stat_cur.
#define buf_LRU_stat_inc_unzip | ( | ) | buf_LRU_stat_cur.unzip++ |
Increments the page_zip_decompress() counter in buf_LRU_stat_cur.
UNIV_INTERN void buf_LRU_add_block | ( | buf_page_t * | bpage, |
ibool | old | ||
) |
Adds a block to the LRU list. Please make sure that the zip_size is already set into the page zip when invoking the function, so that we can get correct zip_size from the buffer page when adding a block into LRU in: TRUE if should be put to the old blocks in the LRU list, else put to the start; if the LRU list is very short, added to the start regardless of this parameter
bpage | in: control block |
UNIV_INTERN void buf_LRU_block_free_non_file_page | ( | buf_block_t * | block | ) |
Puts a block back to the free list. in: block, must not contain a file page
UNIV_INTERN ibool buf_LRU_buf_pool_running_out | ( | void | ) |
Returns TRUE if less than 25 % of the buffer pool is available. This can be used in heuristics to prevent huge transactions eating up the whole buffer pool for their locks.
UNIV_INTERN ibool buf_LRU_evict_from_unzip_LRU | ( | buf_pool_t * | buf_pool | ) |
Determines if the unzip_LRU list should be used for evicting a victim instead of the general LRU list.
UNIV_INTERN void buf_LRU_flush_or_remove_pages | ( | ulint | id, |
buf_remove_t | buf_remove, | ||
const trx_t * | trx | ||
) |
Flushes all dirty pages or removes all pages belonging to a given tablespace. A PROBLEM: if readahead is being started, what guarantees that it will not try to read in pages after this operation has completed? to check if the operation must be interrupted
id | in: space id |
buf_remove | in: remove or flush strategy |
UNIV_INTERN void buf_LRU_free_one_page | ( | buf_page_t * | bpage | ) |
Remove one page from LRU list and put it to free list
bpage | in/out: block, must contain a file page and be in a state where it can be freed; there may or may not be a hash index to the page |
UNIV_INTERN bool buf_LRU_free_page | ( | buf_page_t * | bpage, |
bool | zip | ||
) |
Try to free a block. If bpage is a descriptor of a compressed-only page, the descriptor object will be freed as well.
NOTE: If this function returns true, it will temporarily release buf_pool->mutex. Furthermore, the page frame will no longer be accessible via bpage.
The caller must hold buf_pool->mutex and must not hold any buf_page_get_mutex() when calling this function.
bpage | in: block to be freed |
zip | in: true if should remove also the compressed page of an uncompressed page |
UNIV_INTERN buf_block_t* buf_LRU_get_free_block | ( | buf_pool_t * | buf_pool | ) |
Returns a free block from the buf_pool. The block is taken off the free list. If it is empty, blocks are moved from the end of the LRU list to the free list. This function is called from a user thread when it needs a clean block to read in a page. Note that we only ever get a block from the free list. Even when we flush a page or find a page in LRU scan we put it to free list to be used. iteration 0: get a block from free list, success:done if there is an LRU flush batch in progress: wait for batch to end: retry free list if buf_pool->try_LRU_scan is set scan LRU up to srv_LRU_scan_depth to find a clean block the above will put the block on free list success:retry the free list flush one dirty page from tail of LRU to disk the above will put the block on free list success: retry the free list iteration 1: same as iteration 0 except: scan whole LRU list scan LRU list even if buf_pool->try_LRU_scan is not set iteration > 1: same as iteration 1 but sleep 100ms
buf_pool | in/out: buffer pool instance |
UNIV_INTERN buf_block_t* buf_LRU_get_free_only | ( | buf_pool_t * | buf_pool | ) |
Returns a free block from the buf_pool. The block is taken off the free list. If it is empty, returns NULL.
UNIV_INTERN void buf_LRU_insert_zip_clean | ( | buf_page_t * | bpage | ) |
Insert a compressed block into buf_pool->zip_clean in the LRU order. in: pointer to the block in question
UNIV_INTERN void buf_LRU_make_block_old | ( | buf_page_t * | bpage | ) |
Moves a block to the end of the LRU list. in: control block
UNIV_INTERN void buf_LRU_make_block_young | ( | buf_page_t * | bpage | ) |
Moves a block to the start of the LRU list. in: control block
UNIV_INTERN ulint buf_LRU_old_ratio_update | ( | uint | old_pct, |
ibool | adjust | ||
) |
Updates buf_pool->LRU_old_ratio.
old_pct | in: Reserve this percentage of the buffer pool for "old" blocks. |
UNIV_INTERN void buf_LRU_print | ( | void | ) |
Prints the LRU list.
UNIV_INTERN ibool buf_LRU_scan_and_free_block | ( | buf_pool_t * | buf_pool, |
ibool | scan_all | ||
) |
Try to free a replaceable block.
buf_pool | in: buffer pool instance |
scan_all | in: scan whole LRU list if TRUE, otherwise scan only 'old' blocks. |
UNIV_INTERN void buf_LRU_stat_update | ( | void | ) |
Update the historical stats that we are collecting for LRU eviction policy at the end of each interval.
UNIV_INTERN ibool buf_LRU_validate | ( | void | ) |
Validates the LRU list.
UNIV_INTERN void buf_unzip_LRU_add_block | ( | buf_block_t * | block, |
ibool | old | ||
) |
Adds a block to the LRU list of decompressed zip pages. in: TRUE if should be put to the end of the list, else put to the start
block | in: control block |
uint buf_LRU_old_threshold_ms |
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.
buf_LRU_stat_t buf_LRU_stat_cur |
Current operation counters. Not protected by any mutex.
Cleared by buf_LRU_stat_update().
buf_LRU_stat_t buf_LRU_stat_sum |
Running sum of past values of buf_LRU_stat_cur.
Updated by buf_LRU_stat_update(). Protected by buf_pool->mutex.