mariadb/innobase/include/buf0flu.ic
unknown 4dac69eb11 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

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));
}