MySQL 5.6.14 Source Code Document
|
#include "univ.i"
#include "fil0fil.h"
#include "mtr0types.h"
#include "buf0types.h"
#include "hash0hash.h"
#include "ut0byte.h"
#include "page0types.h"
#include "ut0rbt.h"
#include "os0proc.h"
#include "log0log.h"
#include "buf0buf.ic"
Go to the source code of this file.
Classes | |
struct | buf_pool_info_t |
struct | buf_pools_list_size_t |
struct | buf_page_t |
struct | buf_block_t |
struct | buf_buddy_free_t |
struct | buf_pool_stat_t |
The buffer pool statistics structure. More... | |
struct | buf_buddy_stat_t |
struct | buf_pool_t |
The buffer pool structure. More... |
Macros | |
#define | MAX_BUFFER_POOLS_BITS 6 |
#define | MAX_BUFFER_POOLS (1 << MAX_BUFFER_POOLS_BITS) |
#define | BUF_POOL_WATCH_SIZE (srv_n_purge_threads + 1) |
#define | MAX_PAGE_HASH_LOCKS 1024 |
#define | BUF_NO_CHECKSUM_MAGIC 0xDEADBEEFUL |
#define | buf_page_get(SP, ZS, OF, LA, MTR) |
#define | buf_page_get_with_no_latch(SP, ZS, OF, MTR) |
#define | buf_page_try_get(space_id, page_no, mtr) buf_page_try_get_func(space_id, page_no, __FILE__, __LINE__, mtr); |
#define | buf_block_buf_fix_inc(b, f, l) buf_block_buf_fix_inc_func(b) |
#define | buf_block_dbg_add_level(block, level) /* nothing */ |
#define | buf_block_get_frame(block) (block)->frame |
#define | buf_block_get_page_zip(block) ((block)->page.zip.data ? &(block)->page.zip : NULL) |
#define | buf_pool_is_block_mutex(m) buf_pointer_is_block_field((const void*)(m)) |
#define | buf_pool_is_block_lock(l) buf_pointer_is_block_field((const void*)(l)) |
#define | buf_page_hash_get_s_locked(b, s, o, l) buf_page_hash_get_locked(b, s, o, l, RW_LOCK_SHARED) |
#define | buf_page_hash_get_x_locked(b, s, o, l) buf_page_hash_get_locked(b, s, o, l, RW_LOCK_EX) |
#define | buf_page_hash_get(b, s, o) buf_page_hash_get_locked(b, s, o, NULL, 0) |
#define | buf_block_hash_get_s_locked(b, s, o, l) buf_block_hash_get_locked(b, s, o, l, RW_LOCK_SHARED) |
#define | buf_block_hash_get_x_locked(b, s, o, l) buf_block_hash_get_locked(b, s, o, l, RW_LOCK_EX) |
#define | buf_block_hash_get(b, s, o) buf_block_hash_get_locked(b, s, o, NULL, 0) |
#define | BUF_PAGE_STATE_BITS 3 |
#define | buf_block_state_valid(block) |
Modes for buf_page_get_gen | |
#define | BUF_GET 10 |
#define | BUF_GET_IF_IN_POOL 11 |
#define | BUF_PEEK_IF_IN_POOL 12 |
#define | BUF_GET_NO_LATCH 14 |
#define | BUF_GET_IF_IN_POOL_OR_WATCH 15 |
#define | BUF_GET_POSSIBLY_FREED 16 |
Modes for buf_page_get_known_nowait | |
#define | BUF_MAKE_YOUNG 51 |
#define | BUF_KEEP_OLD 52 |
#define | BUF_POOL_ZIP_FOLD_PTR(ptr) ((ulint) (ptr) / UNIV_PAGE_SIZE) |
#define | BUF_POOL_ZIP_FOLD(b) BUF_POOL_ZIP_FOLD_PTR((b)->frame) |
#define | BUF_POOL_ZIP_FOLD_BPAGE(b) BUF_POOL_ZIP_FOLD((buf_block_t*) (b)) |
Accessors for buf_pool->mutex. | |
Use these instead of accessing buf_pool->mutex directly. | |
#define | buf_pool_mutex_own(b) mutex_own(&b->mutex) |
#define | buf_pool_mutex_enter(b) |
#define | buf_flush_list_mutex_own(b) mutex_own(&b->flush_list_mutex) |
#define | buf_flush_list_mutex_enter(b) |
#define | buf_flush_list_mutex_exit(b) |
#define | buf_page_hash_lock_get(b, f) hash_get_lock(b->page_hash, f) |
#define | buf_page_hash_lock_held_s(b, p) (TRUE) |
#define | buf_page_hash_lock_held_x(b, p) (TRUE) |
#define | buf_page_hash_lock_held_s_or_x(b, p) (TRUE) |
#define | buf_block_hash_lock_held_s(b, p) (TRUE) |
#define | buf_block_hash_lock_held_x(b, p) (TRUE) |
#define | buf_block_hash_lock_held_s_or_x(b, p) (TRUE) |
#define | buf_pool_mutex_exit_forbid(b) ((void) 0) |
#define | buf_pool_mutex_exit_allow(b) ((void) 0) |
#define | buf_pool_mutex_exit(b) mutex_exit(&b->mutex) |
Enumerations | |
enum | buf_page_state { BUF_BLOCK_POOL_WATCH, BUF_BLOCK_ZIP_PAGE, BUF_BLOCK_ZIP_DIRTY, BUF_BLOCK_NOT_USED, BUF_BLOCK_READY_FOR_USE, BUF_BLOCK_FILE_PAGE, BUF_BLOCK_MEMORY, BUF_BLOCK_REMOVE_HASH } |
States of a control block. More... | |
enum | buf_page_print_flags { BUF_PAGE_PRINT_NO_CRASH = 1, BUF_PAGE_PRINT_NO_FULL = 2 } |
Variables | |
buf_pool_t * | buf_pool_ptr |
ulint | srv_buf_pool_instances |
ulint | srv_buf_pool_curr_size |
UNIV_INTERN ibool | warn_unused_result |
UNIV_INLINE unsigned | pure |
UNIV_INLINE ulint | const |
The database buffer pool high-level routines
Created 11/5/1995 Heikki Tuuri
Definition in file buf0buf.h.
#define buf_block_buf_fix_inc | ( | b, | |
f, | |||
l | |||
) | buf_block_buf_fix_inc_func(b) |
#define buf_block_state_valid | ( | block | ) |
Check if a buf_block_t object is in a valid state
block | buffer block |
#define buf_flush_list_mutex_enter | ( | b | ) |
#define buf_flush_list_mutex_exit | ( | b | ) |
#define buf_flush_list_mutex_own | ( | b | ) | mutex_own(&b->flush_list_mutex) |
#define BUF_GET_IF_IN_POOL_OR_WATCH 15 |
#define BUF_GET_NO_LATCH 14 |
#define BUF_GET_POSSIBLY_FREED 16 |
#define BUF_KEEP_OLD 52 |
#define BUF_MAKE_YOUNG 51 |
#define BUF_NO_CHECKSUM_MAGIC 0xDEADBEEFUL |
#define buf_page_get | ( | SP, | |
ZS, | |||
OF, | |||
LA, | |||
MTR | |||
) |
NOTE! The following macros should be used instead of buf_page_get_gen, to improve debugging. Only values RW_S_LATCH and RW_X_LATCH are allowed in LA!
#define buf_page_get_with_no_latch | ( | SP, | |
ZS, | |||
OF, | |||
MTR | |||
) |
Use these macros to bufferfix a page with no latching. Remember not to read the contents of the page unless you know it is safe. Do not modify the contents of the page! We have separated this case, because it is error-prone programming not to set a latch, and it should be used with care.
#define buf_page_hash_lock_get | ( | b, | |
f | |||
) | hash_get_lock(b->page_hash, f) |
#define BUF_PAGE_STATE_BITS 3 |
#define buf_page_try_get | ( | space_id, | |
page_no, | |||
mtr | |||
) | buf_page_try_get_func(space_id, page_no, __FILE__, __LINE__, mtr); |
Tries to get a page. If the page is not in the buffer pool it is
not loaded. Suitable for using when holding the lock_sys_t::mutex.
space_id | in: tablespace id |
page_no | in: page number |
mtr | in: mini-transaction |
#define BUF_PEEK_IF_IN_POOL 12 |
#define buf_pool_is_block_lock | ( | l | ) | buf_pointer_is_block_field((const void*)(l)) |
Find out if a pointer corresponds to a buf_block_t::lock.
l | in: rw-lock candidate |
#define buf_pool_is_block_mutex | ( | m | ) | buf_pointer_is_block_field((const void*)(m)) |
Find out if a pointer corresponds to a buf_block_t::mutex.
m | in: mutex candidate |
#define buf_pool_mutex_enter | ( | b | ) |
#define buf_pool_mutex_exit | ( | b | ) | mutex_exit(&b->mutex) |
#define buf_pool_mutex_exit_allow | ( | b | ) | ((void) 0) |
#define buf_pool_mutex_exit_forbid | ( | b | ) | ((void) 0) |
#define buf_pool_mutex_own | ( | b | ) | mutex_own(&b->mutex) |
#define BUF_POOL_WATCH_SIZE (srv_n_purge_threads + 1) |
#define BUF_POOL_ZIP_FOLD_PTR | ( | ptr | ) | ((ulint) (ptr) / UNIV_PAGE_SIZE) |
#define MAX_BUFFER_POOLS (1 << MAX_BUFFER_POOLS_BITS) |
#define MAX_BUFFER_POOLS_BITS 6 |
#define MAX_PAGE_HASH_LOCKS 1024 |
enum buf_page_print_flags |
BUF_PAGE_PRINT_NO_CRASH |
Do not crash at the end of buf_page_print(). |
BUF_PAGE_PRINT_NO_FULL |
Do not print the full page dump. |
enum buf_page_state |
States of a control block.
The enumeration values must be 0..7.
BUF_BLOCK_POOL_WATCH |
a sentinel for the buffer pool watch, element of buf_pool->watch[] |
BUF_BLOCK_ZIP_PAGE |
contains a clean compressed page |
BUF_BLOCK_ZIP_DIRTY |
contains a compressed page that is in the buf_pool->flush_list |
BUF_BLOCK_NOT_USED |
is in the free list; must be after the BUF_BLOCK_ZIP_ constants for compressed-only pages
|
BUF_BLOCK_READY_FOR_USE |
when buf_LRU_get_free_block returns a block, it is in this state |
BUF_BLOCK_FILE_PAGE |
contains a buffered file page |
BUF_BLOCK_MEMORY |
contains some main memory object |
BUF_BLOCK_REMOVE_HASH |
hash index should be removed before putting to the free list |
UNIV_INTERN ibool buf_all_freed | ( | void | ) |
Asserts that all file pages in the buffer are in a replaceable state.
UNIV_INTERN buf_block_t* buf_block_align | ( | const byte * | ptr | ) |
Gets the block to whose frame the pointer is pointing to.
Gets the block to whose frame the pointer is pointing to.
ptr | in: pointer to a frame |
Definition at line 2294 of file buf0buf.cc.
UNIV_INTERN buf_block_t* buf_block_alloc | ( | buf_pool_t * | buf_pool | ) |
Allocates a buffer block.
Allocates a buffer block.
buf_pool | in/out: buffer pool instance, or NULL for round-robin selection of the buffer pool |
Definition at line 444 of file buf0buf.cc.
UNIV_INLINE void buf_block_buf_fix_inc_func | ( | buf_block_t * | block | ) |
Increments the bufferfix count.
block | in/out: block to bufferfix |
UNIV_INLINE void buf_block_free | ( | buf_block_t * | block | ) |
Frees a buffer block which does not contain a file page. in, own: block to be freed
UNIV_INLINE ulint buf_block_get_freed_page_clock | ( | const buf_block_t * | block | ) |
Reads the freed_page_clock of a buffer block.
block | in: block |
UNIV_INLINE enum buf_io_fix buf_block_get_io_fix | ( | const buf_block_t * | block | ) |
Gets the io_fix state of a block.
block | in: pointer to the control block |
UNIV_INLINE ulint buf_block_get_lock_hash_val | ( | const buf_block_t * | block | ) |
Gets the hash value of a block. This can be used in searches in the lock hash table.
block | in: block |
UNIV_INLINE ib_uint64_t buf_block_get_modify_clock | ( | buf_block_t * | block | ) |
Returns the value of the modify clock. The caller must have an s-lock or x-lock on the block.
UNIV_INLINE ulint buf_block_get_page_no | ( | const buf_block_t * | block | ) |
Gets the page number of a block.
block | in: pointer to the control block |
UNIV_INLINE ulint buf_block_get_space | ( | const buf_block_t * | block | ) |
Gets the space id of a block.
block | in: pointer to the control block |
UNIV_INLINE enum buf_page_state buf_block_get_state | ( | const buf_block_t * | block | ) |
Gets the state of a block.
block | in: pointer to the control block |
UNIV_INLINE ulint buf_block_get_zip_size | ( | const buf_block_t * | block | ) |
Gets the compressed page size of a block.
block | in: pointer to the control block |
UNIV_INLINE buf_block_t* buf_block_hash_get_locked | ( | buf_pool_t * | buf_pool, |
ulint | space, | ||
ulint | offset, | ||
rw_lock_t ** | lock, | ||
ulint | lock_mode | ||
) |
Returns the control block of a file page, NULL if not found. If the block is found and lock is not NULL then the appropriate page_hash lock is acquired in the specified lock mode. Otherwise, mode value is ignored. It is up to the caller to release the lock. If the block is found and the lock is NULL then the page_hash lock is released by this function.
buf_pool | out: pointer to the bpage, or NULL; if NULL, hash_lock is also NULL. buffer pool instance |
space | in: space id |
offset | in: page number |
lock | in/out: lock of the page hash acquired if bpage is found. NULL otherwise. If NULL is passed then the hash_lock is released by this function |
UNIV_INLINE void buf_block_modify_clock_inc | ( | buf_block_t * | block | ) |
Increments the modify clock of a frame by 1. The caller must (1) own the buf_pool->mutex and block bufferfix count has to be zero, (2) or own an x-lock on the block. in: block
UNIV_INLINE void buf_block_set_file_page | ( | buf_block_t * | block, |
ulint | space, | ||
ulint | page_no | ||
) |
Map a block to a file page. in: page number
block | in/out: pointer to control block |
space | in: tablespace id |
UNIV_INLINE void buf_block_set_io_fix | ( | buf_block_t * | block, |
enum buf_io_fix | io_fix | ||
) |
Sets the io_fix state of a block. in: io_fix state
block | in/out: control block |
UNIV_INLINE void buf_block_set_state | ( | buf_block_t * | block, |
enum buf_page_state | state | ||
) |
Sets the state of a block. in: state
block | in/out: pointer to control block |
UNIV_INTERN void buf_flush_update_zip_checksum | ( | buf_frame_t * | page, |
ulint | zip_size, | ||
lsn_t | lsn | ||
) |
Calculate the checksum of a page from compressed table and update the page. in: Lsn to stamp on the page
Calculate the checksum of a page from compressed table and update the page.
page | in/out: Page to update |
zip_size | in: Compressed page size |
lsn | in: Lsn to stamp on the page |
Definition at line 752 of file buf0flu.cc.
UNIV_INLINE byte* buf_frame_copy | ( | byte * | buf, |
const buf_frame_t * | frame | ||
) |
Copies contents of a buffer frame to a given buffer.
buf | in: buffer to copy to |
UNIV_INTERN ulint buf_get_free_list_len | ( | void | ) |
Gets the current length of the free list of buffer blocks.
UNIV_INTERN ulint buf_get_modified_ratio_pct | ( | void | ) |
Returns the ratio in percents of modified pages in the buffer pool / database pages in the buffer pool.
UNIV_INTERN ulint buf_get_n_pending_read_ios | ( | void | ) |
Returns the number of pending buf pool read ios.
UNIV_INLINE buf_block_t* buf_get_nth_chunk_block | ( | const buf_pool_t * | buf_pool, |
ulint | n, | ||
ulint * | chunk_size | ||
) |
Get the nth chunk's buffer block in the specified buffer pool.
buf_pool | in: buffer pool instance |
n | in: nth chunk in the buffer pool |
UNIV_INTERN void buf_get_total_list_len | ( | ulint * | LRU_len, |
ulint * | free_len, | ||
ulint * | flush_list_len | ||
) |
Get total buffer pool statistics. out: length of all flush lists
Get total buffer pool statistics.
LRU_len | out: length of all LRU lists |
free_len | out: length of all free lists |
flush_list_len | out: length of all flush lists |
Definition at line 357 of file buf0buf.cc.
UNIV_INTERN void buf_get_total_list_size_in_bytes | ( | buf_pools_list_size_t * | buf_pools_list_size | ) |
Get total list size in bytes from all buffer pools. out: list sizes in all buffer pools
Get total list size in bytes from all buffer pools.
buf_pools_list_size | out: list sizes in all buffer pools |
Definition at line 384 of file buf0buf.cc.
UNIV_INTERN void buf_get_total_stat | ( | buf_pool_stat_t * | tot_stat | ) |
Get total buffer pool statistics. out: buffer pool stats
Get total buffer pool statistics.
tot_stat | out: buffer pool stats |
Definition at line 410 of file buf0buf.cc.
UNIV_INLINE ulint buf_page_address_fold | ( | ulint | space, |
ulint | offset | ||
) | const |
Calculates a folded value of a file page address to use in the page hash table.
space | in: space id |
offset | in: offset of the page within space |
UNIV_INLINE buf_page_t* buf_page_alloc_descriptor | ( | void | ) |
Allocates a buf_page_t descriptor. This function must succeed. In case of failure we assert in this function.
UNIV_INLINE ibool buf_page_belongs_to_unzip_LRU | ( | const buf_page_t * | bpage | ) |
Determines if a block should be on unzip_LRU list.
bpage | in: pointer to control block |
UNIV_INLINE ibool buf_page_can_relocate | ( | const buf_page_t * | bpage | ) |
Determine if a buffer block can be relocated in memory. The block can be dirty, but it must not be I/O-fixed or bufferfixed.
bpage | control block being relocated |
UNIV_INTERN buf_block_t* buf_page_create | ( | ulint | space, |
ulint | offset, | ||
ulint | zip_size, | ||
mtr_t * | mtr | ||
) |
Initializes a page to the buffer buf_pool. The page is usually not read from a file even if it cannot be found in the buffer buf_pool. This is one of the functions which perform to a block a state transition NOT_USED => FILE_PAGE (the other is buf_page_get_gen).
space | in: space id |
offset | in: offset of the page within space in units of a page |
zip_size | in: compressed page size, or 0 |
UNIV_INLINE void buf_page_free_descriptor | ( | buf_page_t * | bpage | ) |
Free a buf_page_t descriptor.
bpage | in: bpage descriptor to free. |
UNIV_INLINE buf_block_t* buf_page_get_block | ( | buf_page_t * | bpage | ) |
Gets the buf_block_t handle of a buffered file block if an uncompressed page frame exists, or NULL. Note: even though bpage is not declared a const we don't update its value. It is safe to make this pure.
bpage | in: control block, or NULL |
UNIV_INLINE buf_flush_t buf_page_get_flush_type | ( | const buf_page_t * | bpage | ) |
Get the flush type of a page.
bpage | in: buffer page |
UNIV_INLINE ulint buf_page_get_freed_page_clock | ( | const buf_page_t * | bpage | ) |
Reads the freed_page_clock of a buffer block.
bpage | in: block |
UNIV_INTERN buf_block_t* buf_page_get_gen | ( | ulint | space, |
ulint | zip_size, | ||
ulint | offset, | ||
ulint | rw_latch, | ||
buf_block_t * | guess, | ||
ulint | mode, | ||
const char * | file, | ||
ulint | line, | ||
mtr_t * | mtr | ||
) |
This is the general function used to get access to a database page.
This is the general function used to get access to a database page.
space | in: space id |
zip_size | in: compressed page size in bytes or 0 for uncompressed pages |
offset | in: page number |
rw_latch | in: RW_S_LATCH, RW_X_LATCH, RW_NO_LATCH |
guess | in: guessed block or NULL |
mode | in: BUF_GET, BUF_GET_IF_IN_POOL, BUF_PEEK_IF_IN_POOL, BUF_GET_NO_LATCH, or BUF_GET_IF_IN_POOL_OR_WATCH |
file | in: file name |
line | in: line where called |
mtr | in: mini-transaction |
Definition at line 2416 of file buf0buf.cc.
UNIV_INLINE enum buf_io_fix buf_page_get_io_fix | ( | const buf_page_t * | bpage | ) |
Gets the io_fix state of a block.
bpage | in: pointer to the control block |
UNIV_INTERN ibool buf_page_get_known_nowait | ( | ulint | rw_latch, |
buf_block_t * | block, | ||
ulint | mode, | ||
const char * | file, | ||
ulint | line, | ||
mtr_t * | mtr | ||
) |
This is used to get access to a known database page, when no waiting can be done.
This is used to get access to a known database page, when no waiting can be done. For example, if a search in an adaptive hash index leads us to this frame.
rw_latch | in: RW_S_LATCH, RW_X_LATCH |
block | in: the known page |
mode | in: BUF_MAKE_YOUNG or BUF_KEEP_OLD |
file | in: file name |
line | in: line where called |
mtr | in: mini-transaction |
Definition at line 3049 of file buf0buf.cc.
UNIV_INLINE ib_mutex_t* buf_page_get_mutex | ( | const buf_page_t * | bpage | ) |
Gets the mutex of a block.
bpage | in: pointer to control block |
UNIV_INLINE lsn_t buf_page_get_newest_modification | ( | const buf_page_t * | bpage | ) |
Gets the youngest modification log sequence number for a frame. Returns zero if not file page or no modification occurred yet.
UNIV_INLINE ulint buf_page_get_page_no | ( | const buf_page_t * | bpage | ) |
Gets the page number of a block.
bpage | in: pointer to the control block |
UNIV_INLINE ulint buf_page_get_space | ( | const buf_page_t * | bpage | ) |
Gets the space id of a block.
bpage | in: pointer to the control block |
UNIV_INLINE enum buf_page_state buf_page_get_state | ( | const buf_page_t * | bpage | ) |
Gets the state of a block.
UNIV_INTERN buf_page_t* buf_page_get_zip | ( | ulint | space, |
ulint | zip_size, | ||
ulint | offset | ||
) |
Get read access to a compressed page (usually of type FIL_PAGE_TYPE_ZBLOB or FIL_PAGE_TYPE_ZBLOB2). The page must be released with buf_page_release_zip(). NOTE: the page is not protected by any latch. Mutual exclusion has to be implemented at a higher level. In other words, all possible accesses to a given page through this function must be protected by the same set of mutexes or latches.
Get read access to a compressed page (usually of type FIL_PAGE_TYPE_ZBLOB or FIL_PAGE_TYPE_ZBLOB2). The page must be released with buf_page_release_zip(). NOTE: the page is not protected by any latch. Mutual exclusion has to be implemented at a higher level. In other words, all possible accesses to a given page through this function must be protected by the same set of mutexes or latches.
space | in: space id |
zip_size | in: compressed page size |
offset | in: page number |
Definition at line 1983 of file buf0buf.cc.
UNIV_INLINE ulint buf_page_get_zip_size | ( | const buf_page_t * | bpage | ) |
Gets the compressed page size of a block.
bpage | in: pointer to the control block |
UNIV_INLINE buf_page_t* buf_page_hash_get_locked | ( | buf_pool_t * | buf_pool, |
ulint | space, | ||
ulint | offset, | ||
rw_lock_t ** | lock, | ||
ulint | lock_mode | ||
) |
Returns the control block of a file page, NULL if not found. If the block is found and lock is not NULL then the appropriate page_hash lock is acquired in the specified lock mode. Otherwise, mode value is ignored. It is up to the caller to release the lock. If the block is found and the lock is NULL then the page_hash lock is released by this function.
buf_pool | out: pointer to the bpage, or NULL; if NULL, hash_lock is also NULL. buffer pool instance |
space | in: space id |
offset | in: page number |
lock | in/out: lock of the page hash acquired if bpage is found. NULL otherwise. If NULL is passed then the hash_lock is released by this function |
UNIV_INLINE buf_page_t* buf_page_hash_get_low | ( | buf_pool_t * | buf_pool, |
ulint | space, | ||
ulint | offset, | ||
ulint | fold | ||
) |
Returns the control block of a file page, NULL if not found.
buf_pool | buffer pool instance |
space | in: space id |
offset | in: offset of the page within space |
UNIV_INLINE ibool buf_page_in_file | ( | const buf_page_t * | bpage | ) |
Determines if a block is mapped to a tablespace.
bpage | in: pointer to control block |
UNIV_INTERN buf_page_t* buf_page_init_for_read | ( | dberr_t * | err, |
ulint | mode, | ||
ulint | space, | ||
ulint | zip_size, | ||
ibool | unzip, | ||
ib_int64_t | tablespace_version, | ||
ulint | offset | ||
) |
Function which inits a page for read to the buffer buf_pool. If the page is (1) already in buf_pool, or (2) if we specify to read only ibuf pages and the page is not an ibuf page, or (3) if the space is deleted or being deleted, then this function does nothing. Sets the io_fix flag to BUF_IO_READ and sets a non-recursive exclusive lock on the buffer frame. The io-handler must take care that the flag is cleared and the lock released later.
err | out: DB_SUCCESS or DB_TABLESPACE_DELETED |
mode | in: BUF_READ_IBUF_PAGES_ONLY, ... |
space | in: space id |
zip_size | in: compressed page size, or 0 |
unzip | in: TRUE=request uncompressed page |
tablespace_version | in: prevents reading from a wrong version of the tablespace in case we have done DISCARD + IMPORT |
UNIV_INTERN bool buf_page_io_complete | ( | buf_page_t * | bpage | ) |
Completes an asynchronous read or write request of a file page to or from the buffer pool.
UNIV_INLINE unsigned buf_page_is_accessed | ( | const buf_page_t * | bpage | ) |
Determine the time of first access of a block in the buffer pool.
bpage | in: control block |
UNIV_INTERN ibool buf_page_is_corrupted | ( | bool | check_lsn, |
const byte * | read_buf, | ||
ulint | zip_size | ||
) |
Checks if a page is corrupt.
check_lsn | in: true if we need to check the and complain about the LSN |
read_buf | in: a database page |
zip_size | in: size of compressed page; 0 for uncompressed pages |
UNIV_INLINE ibool buf_page_is_old | ( | const buf_page_t * | bpage | ) |
Determine if a block has been flagged old.
bpage | in: control block |
UNIV_INTERN void buf_page_make_young | ( | buf_page_t * | bpage | ) |
Moves a page to the start of the buffer pool LRU list. This high-level function can be used to prevent an important page from slipping out of the buffer pool. in: buffer block of a file page
Moves a page to the start of the buffer pool LRU list. This high-level function can be used to prevent an important page from slipping out of the buffer pool.
bpage | in: buffer block of a file page |
Definition at line 1812 of file buf0buf.cc.
UNIV_INTERN ibool buf_page_optimistic_get | ( | ulint | rw_latch, |
buf_block_t * | block, | ||
ib_uint64_t | modify_clock, | ||
const char * | file, | ||
ulint | line, | ||
mtr_t * | mtr | ||
) |
This is the general function used to get optimistic access to a database page.
This is the general function used to get optimistic access to a database page.
rw_latch | in: RW_S_LATCH, RW_X_LATCH |
block | in: guessed buffer block |
modify_clock | in: modify clock value |
file | in: file name |
line | in: line where called |
mtr | in: mini-transaction |
Definition at line 2931 of file buf0buf.cc.
UNIV_INLINE ibool buf_page_peek | ( | ulint | space, |
ulint | offset | ||
) |
Returns TRUE if the page can be found in the buffer pool hash table.
NOTE that it is possible that the page is not yet read from disk, though.
space | in: space id |
UNIV_INLINE ibool buf_page_peek_if_too_old | ( | const buf_page_t * | bpage | ) |
Recommends a move of a block to the start of the LRU list if there is danger of dropping from the buffer pool. NOTE: does not reserve the buffer pool mutex.
UNIV_INLINE ibool buf_page_peek_if_young | ( | const buf_page_t * | bpage | ) |
Tells if a block is still close enough to the MRU end of the LRU list meaning that it is not in danger of getting evicted and also implying that it has been accessed recently. Note that this is for heuristics only and does not reserve buffer pool mutex.
UNIV_INTERN void buf_page_print | ( | const byte * | read_buf, |
ulint | zip_size, | ||
ulint | flags | ||
) |
Prints a page to stderr.
read_buf | in: a database page |
zip_size | in: compressed page size, or 0 for uncompressed pages |
flags | in: 0 or BUF_PAGE_PRINT_NO_CRASH or BUF_PAGE_PRINT_NO_FULL |
Definition at line 706 of file buf0buf.cc.
UNIV_INLINE void buf_page_release | ( | buf_block_t * | block, |
ulint | rw_latch | ||
) |
Decrements the bufferfix count of a buffer control block and releases a latch, if specified. in: RW_S_LATCH, RW_X_LATCH, RW_NO_LATCH
block | in: buffer block |
UNIV_INLINE void buf_page_release_zip | ( | buf_page_t * | bpage | ) |
Releases a compressed-only page acquired with buf_page_get_zip(). in: buffer block
UNIV_INLINE void buf_page_set_accessed | ( | buf_page_t * | bpage | ) |
Flag a block accessed.
bpage | in/out: control block |
UNIV_INLINE void buf_page_set_flush_type | ( | buf_page_t * | bpage, |
buf_flush_t | flush_type | ||
) |
Set the flush type of a page. in: flush type
bpage | in: buffer page |
UNIV_INLINE void buf_page_set_io_fix | ( | buf_page_t * | bpage, |
enum buf_io_fix | io_fix | ||
) |
Sets the io_fix state of a block. in: io_fix state
bpage | in/out: control block |
UNIV_INLINE void buf_page_set_old | ( | buf_page_t * | bpage, |
ibool | old | ||
) |
Flag a block old. in: old
bpage | in/out: control block |
UNIV_INLINE void buf_page_set_state | ( | buf_page_t * | bpage, |
enum buf_page_state | state | ||
) |
Sets the state of a block. in: state
bpage | in/out: pointer to control block |
UNIV_INLINE void buf_page_set_sticky | ( | buf_page_t * | bpage | ) |
Makes a block sticky. A sticky block implies that even after we release the buf_pool->mutex and the block->mutex: it cannot be removed from the flush_list the block descriptor cannot be relocated it cannot be removed from the LRU list Note that: the block can still change its position in the LRU list the next and previous pointers can change. in/out: control block
UNIV_INTERN const buf_block_t* buf_page_try_get_func | ( | ulint | space_id, |
ulint | page_no, | ||
const char * | file, | ||
ulint | line, | ||
mtr_t * | mtr | ||
) |
Given a tablespace id and page number tries to get that page. If the page is not in the buffer pool it is not loaded and NULL is returned. Suitable for using when holding the lock_sys_t::mutex. in: mini-transaction
Given a tablespace id and page number tries to get that page. If the page is not in the buffer pool it is not loaded and NULL is returned. Suitable for using when holding the lock_sys_t::mutex.
space_id | in: tablespace id |
page_no | in: page number |
file | in: file name |
line | in: line where called |
mtr | in: mini-transaction |
Definition at line 3154 of file buf0buf.cc.
UNIV_INLINE void buf_page_unset_sticky | ( | buf_page_t * | bpage | ) |
Removes stickiness of a block. in/out: control block
UNIV_INTERN ibool buf_pointer_is_block_field | ( | const void * | ptr | ) |
Find out if a pointer belongs to a buf_block_t. It can be a pointer to the buf_block_t itself or a member of it
Find out if a pointer belongs to a buf_block_t. It can be a pointer to the buf_block_t itself or a member of it
ptr | in: pointer not dereferenced |
Definition at line 2351 of file buf0buf.cc.
UNIV_INTERN ulint buf_pool_check_no_pending_io | ( | void | ) |
Checks that there currently are no pending i/o-operations for the buffer pool.
UNIV_INTERN void buf_pool_clear_hash_index | ( | void | ) |
Clears the adaptive hash index on all pages in the buffer pool.
Definition at line 1419 of file buf0buf.cc.
UNIV_INTERN void buf_pool_free | ( | ulint | n_instances | ) |
Frees the buffer pool at shutdown. This must not be invoked before freeing all mutexes. in: numbere of instances to free
Frees the buffer pool at shutdown. This must not be invoked before freeing all mutexes.
n_instances | in: numbere of instances to free |
Definition at line 1401 of file buf0buf.cc.
UNIV_INLINE buf_pool_t* buf_pool_from_array | ( | ulint | index | ) |
Returns the buffer pool instance given its array index
UNIV_INLINE buf_pool_t* buf_pool_from_block | ( | const buf_block_t * | block | ) |
Returns the buffer pool instance given a block instance
UNIV_INLINE buf_pool_t* buf_pool_from_bpage | ( | const buf_page_t * | bpage | ) |
Returns the buffer pool instance given a page instance
UNIV_INLINE buf_pool_t* buf_pool_get | ( | ulint | space, |
ulint | offset | ||
) |
Returns the buffer pool instance given space and offset of page
space | in: space id |
UNIV_INLINE ulint buf_pool_get_curr_size | ( | void | ) |
Gets the current size of buffer buf_pool in bytes.
UNIV_INLINE ulint buf_pool_get_n_pages | ( | void | ) |
Gets the current size of buffer buf_pool in frames.
UNIV_INTERN lsn_t buf_pool_get_oldest_modification | ( | void | ) |
Gets the smallest oldest_modification lsn for any page in the pool. Returns zero if all modified pages have been flushed to disk.
Definition at line 312 of file buf0buf.cc.
UNIV_INLINE ulint buf_pool_index | ( | const buf_pool_t * | buf_pool | ) |
Calculates the index of a buffer pool to the buf_pool[] array.
buf_pool | in: buffer pool |
UNIV_INTERN dberr_t buf_pool_init | ( | ulint | total_size, |
ulint | n_instances | ||
) |
Creates the buffer pool.
Creates the buffer pool.
total_size | in: size of the total pool in bytes |
n_instances | in: number of instances |
Definition at line 1361 of file buf0buf.cc.
UNIV_INTERN void buf_pool_invalidate | ( | void | ) |
Invalidates the file pages in the buffer pool when an archive recovery is completed. All the file pages buffered must be in a replaceable state when this function is called: not latched and not modified.
UNIV_INLINE void buf_pool_mutex_enter_all | ( | void | ) |
Acquire mutex on all buffer pool instances
UNIV_INLINE void buf_pool_mutex_exit_all | ( | void | ) |
Release mutex on all buffer pool instances
UNIV_INTERN ibool buf_pool_watch_is_sentinel | ( | buf_pool_t * | buf_pool, |
const buf_page_t * | bpage | ||
) |
Determine if a block is a sentinel for a buffer pool watch.
buf_pool | buffer pool instance |
bpage | in: block |
UNIV_INTERN ibool buf_pool_watch_occurred | ( | ulint | space, |
ulint | offset | ||
) |
Check if the page has been read in. This may only be called after buf_pool_watch_set(space,offset) has returned NULL and before invoking buf_pool_watch_unset(space,offset).
space | in: space id |
offset | in: page number |
Definition at line 1782 of file buf0buf.cc.
UNIV_INTERN buf_page_t* buf_pool_watch_set | ( | ulint | space, |
ulint | offset, | ||
ulint | fold | ||
) |
Add watch for the given page to be read in. Caller must have the buffer pool
Add watch for the given page to be read in. Caller must have appropriate hash_lock for the bpage. This function may release the hash_lock and reacquire it.
space | in: space id |
offset | in: page number |
fold | in: buf_page_address_fold(space, offset) |
Definition at line 1585 of file buf0buf.cc.
UNIV_INTERN void buf_pool_watch_unset | ( | ulint | space, |
ulint | offset | ||
) |
Stop watching if the page has been read in. buf_pool_watch_set(space,offset) must have returned NULL before. in: page number
Stop watching if the page has been read in. buf_pool_watch_set(space,offset) must have returned NULL before.
space | in: space id |
offset | in: page number |
Definition at line 1731 of file buf0buf.cc.
UNIV_INTERN void buf_print_io | ( | FILE * | file | ) |
Prints info of the buffer i/o. in: file where to print
UNIV_INLINE void buf_ptr_get_fsp_addr | ( | const void * | ptr, |
ulint * | space, | ||
fil_addr_t * | addr | ||
) |
Gets the space id, page offset, and byte offset within page of a pointer pointing to a buffer frame containing a file page. out: page offset and byte offset
ptr | in: pointer to a buffer frame |
space | out: space id |
UNIV_INTERN void buf_refresh_io_stats | ( | buf_pool_t * | buf_pool | ) |
Refreshes the statistics used to print per-second averages. buffer pool instance
UNIV_INTERN void buf_refresh_io_stats_all | ( | void | ) |
Refreshes the statistics used to print per-second averages.
UNIV_INTERN void buf_relocate | ( | buf_page_t * | bpage, |
buf_page_t * | dpage | ||
) |
Relocate a buffer control block. Relocates the block on the LRU list and in buf_pool->page_hash. Does not relocate bpage->list. The caller must take care of relocating bpage->list.
bpage | in/out: control block being relocated; buf_page_get_state(bpage) must be BUF_BLOCK_ZIP_DIRTY or BUF_BLOCK_ZIP_PAGE |
dpage | in/out: destination control block |
Definition at line 1465 of file buf0buf.cc.
UNIV_INTERN void buf_stats_get_pool_info | ( | buf_pool_t * | buf_pool, |
ulint | pool_id, | ||
buf_pool_info_t * | all_pool_info | ||
) |
Collect buffer pool stats information for a buffer pool. Also record aggregated stats if there are more than one buffer pool in the server in/out: buffer pool info to fill
buf_pool | in: buffer pool |
pool_id | in: buffer pool ID |
UNIV_INTERN ibool buf_zip_decompress | ( | buf_block_t * | block, |
ibool | check | ||
) |
Decompress a block.
Decompress a block.
block | in/out: block |
check | in: TRUE=verify the page checksum |
Definition at line 2134 of file buf0buf.cc.
buf_pool_t* buf_pool_ptr |
The buffer pools of the database
Definition at line 252 of file buf0buf.cc.