⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buf0buf.ic

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 IC
📖 第 1 页 / 共 2 页
字号:
/******************************************************The database buffer buf_pool(c) 1995 Innobase OyCreated 11/5/1995 Heikki Tuuri*******************************************************/#include "buf0flu.h"#include "buf0lru.h"#include "buf0rea.h"#include "mtr0mtr.h"#ifdef UNIV_DEBUGextern ulint		buf_dbg_counter; /* This is used to insert validation					operations in execution in the					debug version */#endif /* UNIV_DEBUG *//************************************************************************Recommends a move of a block to the start of the LRU list if there is dangerof dropping from the buffer pool. NOTE: does not reserve the buffer poolmutex. */UNIV_INLINEiboolbuf_block_peek_if_too_old(/*======================*/				/* out: TRUE if should be made younger */	buf_block_t*	block)	/* in: block to make younger */{	return(buf_pool->freed_page_clock >= block->freed_page_clock				+ 1 + (buf_pool->curr_size / 1024));}/*************************************************************************Gets the current size of buffer buf_pool in bytes. In the case of AWE, thesize of AWE window (= the frames). */UNIV_INLINEulintbuf_pool_get_curr_size(void)/*========================*/			/* out: size in bytes */{	return((buf_pool->n_frames) * UNIV_PAGE_SIZE);}	/*************************************************************************Gets the maximum size of buffer buf_pool in bytes. In the case of AWE, thesize of AWE window (= the frames). */UNIV_INLINEulintbuf_pool_get_max_size(void)/*=======================*/			/* out: size in bytes */{	return((buf_pool->n_frames) * UNIV_PAGE_SIZE);}	/***********************************************************************Accessor function for block array. */UNIV_INLINEbuf_block_t*buf_pool_get_nth_block(/*===================*/				/* out: pointer to block */	buf_pool_t*	buf_pool,/* in: buf_pool */	ulint		i)	/* in: index of the block */{	ut_ad(buf_pool);	ut_ad(i < buf_pool->max_size);	return(i + buf_pool->blocks);}	/***********************************************************************Checks if a pointer points to the block array of the buffer pool (blocks, notthe frames). */UNIV_INLINEiboolbuf_pool_is_block(/*==============*/			/* out: TRUE if pointer to block */	void*	ptr)	/* in: pointer to memory */{	if ((buf_pool->blocks <= (buf_block_t*)ptr)	    && ((buf_block_t*)ptr < buf_pool->blocks + buf_pool->max_size)) {		return(TRUE);	}	return(FALSE);}	/************************************************************************Gets the smallest oldest_modification lsn for any page in the pool. Returnsut_dulint_zero if all modified pages have been flushed to disk. */UNIV_INLINEdulintbuf_pool_get_oldest_modification(void)/*==================================*/				/* out: oldest modification in pool,				ut_dulint_zero if none */{	buf_block_t*	block;	dulint		lsn;		mutex_enter(&(buf_pool->mutex));	block = UT_LIST_GET_LAST(buf_pool->flush_list);	if (block == NULL) {		lsn = ut_dulint_zero;	} else {		lsn = block->oldest_modification;	}	mutex_exit(&(buf_pool->mutex));	return(lsn);}/***********************************************************************Increments the buf_pool clock by one and returns its new value. Rememberthat in the 32 bit version the clock wraps around at 4 billion! */UNIV_INLINEulintbuf_pool_clock_tic(void)/*====================*/			/* out: new clock value */{#ifdef UNIV_SYNC_DEBUG	ut_ad(mutex_own(&(buf_pool->mutex)));#endif /* UNIV_SYNC_DEBUG */		buf_pool->ulint_clock++;	return(buf_pool->ulint_clock);}/*************************************************************************Gets a pointer to the memory frame of a block. */UNIV_INLINEbuf_frame_t*buf_block_get_frame(/*================*/				/* out: pointer to the frame */	buf_block_t*	block)	/* in: pointer to the control block */{	ut_ad(block);	ut_ad(block >= buf_pool->blocks);	ut_ad(block < buf_pool->blocks + buf_pool->max_size);	ut_ad(block->state != BUF_BLOCK_NOT_USED); 	ut_ad((block->state != BUF_BLOCK_FILE_PAGE) 	      || (block->buf_fix_count > 0));		return(block->frame);}	/*************************************************************************Gets the space id of a block. */UNIV_INLINEulintbuf_block_get_space(/*================*/				/* out: space id */	buf_block_t*	block)	/* in: pointer to the control block */{	ut_ad(block);	ut_ad(block >= buf_pool->blocks);	ut_ad(block < buf_pool->blocks + buf_pool->max_size);	ut_a(block->state == BUF_BLOCK_FILE_PAGE);	ut_ad(block->buf_fix_count > 0);		return(block->space);}	/*************************************************************************Gets the page number of a block. */UNIV_INLINEulintbuf_block_get_page_no(/*==================*/				/* out: page number */	buf_block_t*	block)	/* in: pointer to the control block */{	ut_ad(block);	ut_ad(block >= buf_pool->blocks);	ut_ad(block < buf_pool->blocks + buf_pool->max_size);	ut_a(block->state == BUF_BLOCK_FILE_PAGE);	ut_ad(block->buf_fix_count > 0);		return(block->offset);}	/***********************************************************************Gets the block to whose frame the pointer is pointing to. */UNIV_INLINEbuf_block_t*buf_block_align(/*============*/			/* out: pointer to block */	byte*	ptr)	/* in: pointer to a frame */{	buf_block_t*	block;	buf_frame_t*	frame_zero;	ut_ad(ptr);	frame_zero = buf_pool->frame_zero;	if (UNIV_UNLIKELY((ulint)ptr < (ulint)frame_zero)	    || UNIV_UNLIKELY((ulint)ptr > (ulint)(buf_pool->high_end))) {		ut_print_timestamp(stderr);			fprintf(stderr,"InnoDB: Error: trying to access a stray pointer %p\n""InnoDB: buf pool start is at %p, end at %p\n""InnoDB: Probable reason is database corruption or memory\n""InnoDB: corruption. If this happens in an InnoDB database recovery,\n""InnoDB: you can look from section 6.1 at http://www.innodb.com/ibman.html\n""InnoDB: how to force recovery.\n", 			ptr, frame_zero,			buf_pool->high_end);		ut_error;	}		block = *(buf_pool->blocks_of_frames + (((ulint)(ptr - frame_zero))						>> UNIV_PAGE_SIZE_SHIFT));	return(block);}	/***********************************************************************Gets the frame the pointer is pointing to. */UNIV_INLINEbuf_frame_t*buf_frame_align(/*============*/			/* out: pointer to frame */	byte*	ptr)	/* in: pointer to a frame */{	buf_frame_t*	frame;	ut_ad(ptr);	frame = ut_align_down(ptr, UNIV_PAGE_SIZE);	if (UNIV_UNLIKELY((ulint)frame < (ulint)(buf_pool->frame_zero))	    || UNIV_UNLIKELY((ulint)frame >= (ulint)(buf_pool->high_end))) {		ut_print_timestamp(stderr);			fprintf(stderr,"InnoDB: Error: trying to access a stray pointer %p\n""InnoDB: buf pool start is at %p, end at %p\n""InnoDB: Probable reason is database corruption or memory\n""InnoDB: corruption. If this happens in an InnoDB database recovery,\n""InnoDB: you can look from section 6.1 at http://www.innodb.com/ibman.html\n""InnoDB: how to force recovery.\n", 			ptr, buf_pool->frame_zero,			buf_pool->high_end);		ut_error;	}	return(frame);}/**************************************************************************Gets the page number of a pointer pointing within a buffer frame containinga file page. */UNIV_INLINEulintbuf_frame_get_page_no(/*==================*/			/* out: page number */	byte*	ptr)	/* in: pointer to within a buffer frame */{	return(buf_block_get_page_no(buf_block_align(ptr)));}/**************************************************************************Gets the space id of a pointer pointing within a buffer frame containing afile page. */UNIV_INLINEulintbuf_frame_get_space_id(/*===================*/			/* out: space id */	byte*	ptr)	/* in: pointer to within a buffer frame */{	return(buf_block_get_space(buf_block_align(ptr)));}/**************************************************************************Gets the space id, page offset, and byte offset within page of apointer pointing to a buffer frame containing a file page. */UNIV_INLINEvoidbuf_ptr_get_fsp_addr(/*=================*/	byte*		ptr,	/* in: pointer to a buffer frame */	ulint*		space,	/* out: space id */	fil_addr_t*	addr)	/* out: page offset and byte offset */{	buf_block_t*	block;	block = buf_block_align(ptr);	*space = buf_block_get_space(block);	addr->page = buf_block_get_page_no(block);	addr->boffset = ptr - buf_frame_align(ptr);}/**************************************************************************Gets the hash value of the page the pointer is pointing to. This can be usedin searches in the lock hash table. */UNIV_INLINEulintbuf_frame_get_lock_hash_val(/*========================*/			/* out: lock hash value */	byte*	ptr)	/* in: pointer to within a buffer frame */{	buf_block_t*	block;	block = buf_block_align(ptr);	return(block->lock_hash_val);}/**************************************************************************Gets the mutex number protecting the page record lock hash chain in the locktable. */UNIV_INLINEmutex_t*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -