mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
4dac69eb11
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
106 lines
3.1 KiB
Text
106 lines
3.1 KiB
Text
/******************************************************
|
|
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);
|
|
}
|
|
|
|
++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));
|
|
}
|