mariadb/innobase/include/buf0flu.ic

107 lines
3.1 KiB
Text
Raw Normal View History

/******************************************************
The database buffer pool flush algorithm
(c) 1995 Innobase Oy
Created 11/5/1995 Heikki Tuuri
*******************************************************/
#include "buf0buf.h"
#include "mtr0mtr.h"
/************************************************************************
Inserts a modified block into the flush list. */
void
buf_flush_insert_into_flush_list(
/*=============================*/
buf_block_t* block); /* in: block which is modified */
/************************************************************************
Inserts a modified block into the flush list in the right sorted position.
This function is used by recovery, because there the modifications do not
necessarily come in the order of lsn's. */
void
buf_flush_insert_sorted_into_flush_list(
/*====================================*/
buf_block_t* block); /* in: block which is modified */
/************************************************************************
This function should be called at a mini-transaction commit, if a page was
modified in it. Puts the block to the list of modified blocks, if it is not
already in it. */
UNIV_INLINE
void
buf_flush_note_modification(
/*========================*/
buf_block_t* block, /* in: block which is modified */
mtr_t* mtr) /* in: mtr */
{
ut_ad(block);
ut_ad(block->state == BUF_BLOCK_FILE_PAGE);
ut_ad(block->buf_fix_count > 0);
#ifdef UNIV_SYNC_DEBUG
ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX));
ut_ad(mutex_own(&(buf_pool->mutex)));
#endif /* UNIV_SYNC_DEBUG */
ut_ad(ut_dulint_cmp(mtr->start_lsn, ut_dulint_zero) != 0);
ut_ad(mtr->modifications);
ut_ad(ut_dulint_cmp(block->newest_modification, mtr->end_lsn) <= 0);
block->newest_modification = mtr->end_lsn;
if (ut_dulint_is_zero(block->oldest_modification)) {
block->oldest_modification = mtr->start_lsn;
ut_ad(!ut_dulint_is_zero(block->oldest_modification));
buf_flush_insert_into_flush_list(block);
} else {
ut_ad(ut_dulint_cmp(block->oldest_modification,
mtr->start_lsn) <= 0);
}
WL 2059 Engine-specific status variables framework and WL 1922 InnoDB status variables innobase/buf/buf0buf.c: Added function to get the number of latched pages innobase/buf/buf0flu.c: Added support for dblwr_pages_written, dblwr_writes and buffer_pool_pages_flushed status variables innobase/buf/buf0lru.c: Added support for _buffer_pool_wait_free status variable innobase/buf/buf0rea.c: Added support for buffer_pool_read_ahead_rnd, buffer_pool_read_ahead_seq and srv_buf_pool_reads status variables innobase/fil/fil0fil.c: Added support for os_log_fsyncs, data_read, and data_written innobase/include/buf0buf.h: Functions and variables needed for new status variables declared innobase/include/buf0flu.ic: Added support for buffer_pool_write_requests status variable innobase/include/fil0fil.h: Variable declared innobase/include/os0file.h: Declared several variabled innobase/include/srv0srv.h: Declared all new variables needed for InnoDB status variables innobase/log/log0log.c: Added support for various log-related status variables innobase/os/os0file.c: Added support for pending_writes, pending_reads status variables innobase/srv/srv0srv.c: Added internal counters and function to accumulate information for InnoDB status variables mysql-test/r/innodb.result: result fot the test mysql-test/t/innodb.test: We have tests only for few variables, as we cannot predict value for most of the added variables. It depends on the system load, OS, HDD e.t.c Thus, we cannot test them with mysql-test. sql/ha_innodb.cc: Added an array for InnoDB status variables. This is part of the WL2059 Engine-specific status variables framework sql/ha_innodb.h: Declared status variables array and the function to refresh statistics sql/handler.cc: Added function to get statistics sql/handler.h: Declared function to update handlers statistics sql/mysql_priv.h: declared opt_innodb to see it from handlers sql/mysqld.cc: Don't include Innodb_* status variables into "show status" if we are compiling without InnoDB sql/sql_show.cc: mysqld_show modified and split into two parts to support enclosed arrays in the show_var_st structure. This is a part of WL2059 Engine-specific status variables framework. sql/structs.h: Added new value to mark enclosed array in the status variables array
2004-11-18 13:00:42 +03:00
++srv_buf_pool_write_requests;
}
/************************************************************************
This function should be called when recovery has modified a buffer page. */
UNIV_INLINE
void
buf_flush_recv_note_modification(
/*=============================*/
buf_block_t* block, /* in: block which is modified */
dulint start_lsn, /* in: start lsn of the first mtr in a
set of mtr's */
dulint end_lsn) /* in: end lsn of the last mtr in the
set of mtr's */
{
ut_ad(block);
ut_ad(block->state == BUF_BLOCK_FILE_PAGE);
ut_ad(block->buf_fix_count > 0);
#ifdef UNIV_SYNC_DEBUG
ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX));
#endif /* UNIV_SYNC_DEBUG */
mutex_enter(&(buf_pool->mutex));
ut_ad(ut_dulint_cmp(block->newest_modification, end_lsn) <= 0);
block->newest_modification = end_lsn;
if (ut_dulint_is_zero(block->oldest_modification)) {
block->oldest_modification = start_lsn;
ut_ad(!ut_dulint_is_zero(block->oldest_modification));
buf_flush_insert_sorted_into_flush_list(block);
} else {
ut_ad(ut_dulint_cmp(block->oldest_modification,
start_lsn) <= 0);
}
mutex_exit(&(buf_pool->mutex));
}