MDEV-19514: Correct a few outdated comments
There is no background change buffer merge any more. Change buffer merge will only take place during a slow shutdown (a shutdown initiated after SET GLOBAL innodb_fast_shutdown=0).
This commit is contained in:
parent
b2bc837ebe
commit
14c72bd3e0
@ -3332,16 +3332,18 @@ transient:
|
|||||||
return(DB_SUCCESS);
|
return(DB_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************//**
|
/** Remove the information for a particular index's stats from the persistent
|
||||||
Removes the information for a particular index's stats from the persistent
|
|
||||||
storage if it exists and if there is data stored for this index.
|
storage if it exists and if there is data stored for this index.
|
||||||
This function creates its own trx and commits it.
|
This function creates its own trx and commits it.
|
||||||
A note from Marko why we cannot edit user and sys_* tables in one trx:
|
|
||||||
marko: The problem is that ibuf merges should be disabled while we are
|
We must modify system tables in a separate transaction in order to
|
||||||
rolling back dict transactions.
|
adhere to the InnoDB design constraint that dict_sys.latch prevents
|
||||||
marko: If ibuf merges are not disabled, we need to scan the *.ibd files.
|
lock waits on system tables. If we modified system and user tables in
|
||||||
But we shouldn't open *.ibd files before we have rolled back dict
|
the same transaction, we should exclusively hold dict_sys.latch until
|
||||||
transactions and opened the SYS_* records for the *.ibd files.
|
the transaction is committed, and effectively block other transactions
|
||||||
|
that will attempt to open any InnoDB tables. Because we have no
|
||||||
|
guarantee that user transactions will be committed fast, we cannot
|
||||||
|
afford to keep the system tables locked in a user transaction.
|
||||||
@return DB_SUCCESS or error code */
|
@return DB_SUCCESS or error code */
|
||||||
dberr_t
|
dberr_t
|
||||||
dict_stats_drop_index(
|
dict_stats_drop_index(
|
||||||
|
@ -2200,8 +2200,8 @@ fil_close_tablespace(
|
|||||||
|
|
||||||
/* Invalidate in the buffer pool all pages belonging to the
|
/* Invalidate in the buffer pool all pages belonging to the
|
||||||
tablespace. Since we have set space->stop_new_ops = true, readahead
|
tablespace. Since we have set space->stop_new_ops = true, readahead
|
||||||
or ibuf merge can no longer read more pages of this tablespace to the
|
can no longer read more pages of this tablespace to buf_pool.
|
||||||
buffer pool. Thus we can clean the tablespace out of the buffer pool
|
Thus we can clean the tablespace out of buf_pool
|
||||||
completely and permanently. The flag stop_new_ops also prevents
|
completely and permanently. The flag stop_new_ops also prevents
|
||||||
fil_flush() from being applied to this tablespace. */
|
fil_flush() from being applied to this tablespace. */
|
||||||
buf_LRU_flush_or_remove_pages(id, true);
|
buf_LRU_flush_or_remove_pages(id, true);
|
||||||
@ -2279,7 +2279,7 @@ dberr_t fil_delete_tablespace(ulint id, bool if_exists)
|
|||||||
ut_a(path != 0);
|
ut_a(path != 0);
|
||||||
|
|
||||||
/* IMPORTANT: Because we have set space::stop_new_ops there
|
/* IMPORTANT: Because we have set space::stop_new_ops there
|
||||||
can't be any new ibuf merges, reads or flushes. We are here
|
can't be any new reads or flushes. We are here
|
||||||
because node::n_pending was zero above. However, it is still
|
because node::n_pending was zero above. However, it is still
|
||||||
possible to have pending read and write requests:
|
possible to have pending read and write requests:
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2009, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2009, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, 2018, MariaDB Corporation.
|
Copyright (c) 2017, 2020, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -140,10 +140,18 @@ dict_stats_update(
|
|||||||
the stats or to fetch them from
|
the stats or to fetch them from
|
||||||
the persistent storage */
|
the persistent storage */
|
||||||
|
|
||||||
/*********************************************************************//**
|
/** Remove the information for a particular index's stats from the persistent
|
||||||
Removes the information for a particular index's stats from the persistent
|
|
||||||
storage if it exists and if there is data stored for this index.
|
storage if it exists and if there is data stored for this index.
|
||||||
This function creates its own trx and commits it.
|
This function creates its own trx and commits it.
|
||||||
|
|
||||||
|
We must modify system tables in a separate transaction in order to
|
||||||
|
adhere to the InnoDB design constraint that dict_sys.latch prevents
|
||||||
|
lock waits on system tables. If we modified system and user tables in
|
||||||
|
the same transaction, we should exclusively hold dict_sys.latch until
|
||||||
|
the transaction is committed, and effectively block other transactions
|
||||||
|
that will attempt to open any InnoDB tables. Because we have no
|
||||||
|
guarantee that user transactions will be committed fast, we cannot
|
||||||
|
afford to keep the system tables locked in a user transaction.
|
||||||
@return DB_SUCCESS or error code */
|
@return DB_SUCCESS or error code */
|
||||||
dberr_t
|
dberr_t
|
||||||
dict_stats_drop_index(
|
dict_stats_drop_index(
|
||||||
|
@ -100,9 +100,8 @@ struct fil_space_t
|
|||||||
tablespace will be in named_spaces. */
|
tablespace will be in named_spaces. */
|
||||||
/** set when an .ibd file is about to be deleted,
|
/** set when an .ibd file is about to be deleted,
|
||||||
or an undo tablespace is about to be truncated.
|
or an undo tablespace is about to be truncated.
|
||||||
When this is set following new ops are not allowed:
|
When this is set, the following new ops are not allowed:
|
||||||
* read IO request
|
* read IO request
|
||||||
* ibuf merge
|
|
||||||
* file flush
|
* file flush
|
||||||
Note that we can still possibly have new write operations
|
Note that we can still possibly have new write operations
|
||||||
because we don't check this flag when doing flush batches. */
|
because we don't check this flag when doing flush batches. */
|
||||||
@ -134,7 +133,7 @@ struct fil_space_t
|
|||||||
/** Number of pending buffer pool operations accessing the tablespace
|
/** Number of pending buffer pool operations accessing the tablespace
|
||||||
without holding a table lock or dict_sys.latch S-latch
|
without holding a table lock or dict_sys.latch S-latch
|
||||||
that would prevent the table (and tablespace) from being
|
that would prevent the table (and tablespace) from being
|
||||||
dropped. An example is change buffer merge.
|
dropped. An example is fil_crypt_thread.
|
||||||
The tablespace cannot be dropped while this is nonzero,
|
The tablespace cannot be dropped while this is nonzero,
|
||||||
or while fil_node_t::n_pending is nonzero.
|
or while fil_node_t::n_pending is nonzero.
|
||||||
Protected by fil_system.mutex and std::atomic. */
|
Protected by fil_system.mutex and std::atomic. */
|
||||||
|
@ -417,13 +417,11 @@ extern ulong srv_flushing_avg_loops;
|
|||||||
|
|
||||||
extern ulong srv_force_recovery;
|
extern ulong srv_force_recovery;
|
||||||
|
|
||||||
extern uint srv_fast_shutdown; /*!< If this is 1, do not do a
|
/** innodb_fast_shutdown=1 skips purge and change buffer merge.
|
||||||
purge and index buffer merge.
|
innodb_fast_shutdown=2 effectively crashes the server (no log checkpoint).
|
||||||
If this 2, do not even flush the
|
innodb_fast_shutdown=3 is a clean shutdown that skips the rollback
|
||||||
buffer pool to data files at the
|
of active transaction (to be done on restart). */
|
||||||
shutdown: we effectively 'crash'
|
extern uint srv_fast_shutdown;
|
||||||
InnoDB (but lose no committed
|
|
||||||
transactions). */
|
|
||||||
|
|
||||||
extern ibool srv_innodb_status;
|
extern ibool srv_innodb_status;
|
||||||
|
|
||||||
@ -776,9 +774,8 @@ void srv_master_callback(void*);
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Perform shutdown tasks such as background drop,
|
Complete the shutdown tasks such as background DROP TABLE,
|
||||||
and optionally ibuf merge.
|
and optionally change buffer merge (on innodb_fast_shutdown=0). */
|
||||||
*/
|
|
||||||
void srv_shutdown(bool ibuf_merge);
|
void srv_shutdown(bool ibuf_merge);
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +54,6 @@ Created 9/17/2000 Heikki Tuuri
|
|||||||
#include "rem0cmp.h"
|
#include "rem0cmp.h"
|
||||||
#include "row0import.h"
|
#include "row0import.h"
|
||||||
#include "row0ins.h"
|
#include "row0ins.h"
|
||||||
#include "row0merge.h"
|
|
||||||
#include "row0row.h"
|
#include "row0row.h"
|
||||||
#include "row0sel.h"
|
#include "row0sel.h"
|
||||||
#include "row0upd.h"
|
#include "row0upd.h"
|
||||||
|
@ -503,11 +503,6 @@ row_upd_changes_field_size_or_external(
|
|||||||
ut_ad(new_len != UNIV_SQL_DEFAULT);
|
ut_ad(new_len != UNIV_SQL_DEFAULT);
|
||||||
|
|
||||||
if (dfield_is_null(new_val) && !rec_offs_comp(offsets)) {
|
if (dfield_is_null(new_val) && !rec_offs_comp(offsets)) {
|
||||||
/* A bug fixed on Dec 31st, 2004: we looked at the
|
|
||||||
SQL NULL size from the wrong field! We may backport
|
|
||||||
this fix also to 4.0. The merge to 5.0 will be made
|
|
||||||
manually immediately after we commit this to 4.1. */
|
|
||||||
|
|
||||||
new_len = dict_col_get_sql_null_size(
|
new_len = dict_col_get_sql_null_size(
|
||||||
dict_index_get_nth_col(index,
|
dict_index_get_nth_col(index,
|
||||||
upd_field->field_no),
|
upd_field->field_no),
|
||||||
|
@ -306,10 +306,10 @@ my_bool srv_print_all_deadlocks;
|
|||||||
INFORMATION_SCHEMA.innodb_cmp_per_index */
|
INFORMATION_SCHEMA.innodb_cmp_per_index */
|
||||||
my_bool srv_cmp_per_index_enabled;
|
my_bool srv_cmp_per_index_enabled;
|
||||||
|
|
||||||
/** innodb_fast_shutdown; if 1 then we do not run purge and insert buffer
|
/** innodb_fast_shutdown=1 skips purge and change buffer merge.
|
||||||
merge to completion before shutdown. If it is set to 2, do not even flush the
|
innodb_fast_shutdown=2 effectively crashes the server (no log checkpoint).
|
||||||
buffer pool to data files at the shutdown: we effectively 'crash'
|
innodb_fast_shutdown=3 is a clean shutdown that skips the rollback
|
||||||
InnoDB (but lose no committed transactions). */
|
of active transaction (to be done on restart). */
|
||||||
uint srv_fast_shutdown;
|
uint srv_fast_shutdown;
|
||||||
|
|
||||||
/** copy of innodb_status_file; generate a innodb_status.<pid> file */
|
/** copy of innodb_status_file; generate a innodb_status.<pid> file */
|
||||||
@ -1949,10 +1949,10 @@ srv_master_do_idle_tasks(void)
|
|||||||
counter_time);
|
counter_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Perform shutdown tasks.
|
/**
|
||||||
@param[in] ibuf_merge whether to complete the change buffer merge */
|
Complete the shutdown tasks such as background DROP TABLE,
|
||||||
void
|
and optionally change buffer merge (on innodb_fast_shutdown=0). */
|
||||||
srv_shutdown(bool ibuf_merge)
|
void srv_shutdown(bool ibuf_merge)
|
||||||
{
|
{
|
||||||
ulint n_bytes_merged = 0;
|
ulint n_bytes_merged = 0;
|
||||||
ulint n_tables_to_drop;
|
ulint n_tables_to_drop;
|
||||||
|
@ -1993,11 +1993,9 @@ skip_monitors:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (srv_force_recovery == 0) {
|
if (srv_force_recovery == 0) {
|
||||||
/* In the insert buffer we may have even bigger tablespace
|
/* In the change buffer we may have even bigger tablespace
|
||||||
id's, because we may have dropped those tablespaces, but
|
id's, because we may have dropped those tablespaces, but
|
||||||
insert buffer merge has not had time to clean the records from
|
the buffered records have not been cleaned yet. */
|
||||||
the ibuf tree. */
|
|
||||||
|
|
||||||
ibuf_update_max_tablespace_id();
|
ibuf_update_max_tablespace_id();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user