summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
Diffstat (limited to 'storage')
-rw-r--r--storage/innobase/CMakeLists.txt2
-rw-r--r--storage/innobase/handler/ha_innodb.cc321
-rw-r--r--storage/innobase/handler/i_s.cc3
-rw-r--r--storage/innobase/include/ha_prototypes.h5
-rw-r--r--storage/innobase/include/que0types.h1
-rw-r--r--storage/innobase/include/srv0conc.h93
-rw-r--r--storage/innobase/include/srv0srv.h27
-rw-r--r--storage/innobase/include/srv0start.h4
-rw-r--r--storage/innobase/include/trx0i_s.h5
-rw-r--r--storage/innobase/include/trx0trx.h15
-rw-r--r--storage/innobase/lock/lock0wait.cc18
-rw-r--r--storage/innobase/log/log0log.cc2
-rw-r--r--storage/innobase/srv/srv0conc.cc327
-rw-r--r--storage/innobase/srv/srv0srv.cc9
-rw-r--r--storage/innobase/srv/srv0start.cc14
-rw-r--r--storage/innobase/trx/trx0i_s.cc2
-rw-r--r--storage/innobase/trx/trx0trx.cc23
17 files changed, 51 insertions, 820 deletions
diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt
index b6ea78115e9..0547674a4dd 100644
--- a/storage/innobase/CMakeLists.txt
+++ b/storage/innobase/CMakeLists.txt
@@ -235,7 +235,6 @@ SET(INNOBASE_SOURCES
include/row0upd.h
include/row0upd.ic
include/row0vers.h
- include/srv0conc.h
include/srv0mon.h
include/srv0mon.ic
include/srv0srv.h
@@ -328,7 +327,6 @@ SET(INNOBASE_SOURCES
row/row0upd.cc
row/row0quiesce.cc
row/row0vers.cc
- srv/srv0conc.cc
srv/srv0mon.cc
srv/srv0srv.cc
srv/srv0start.cc
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 1db3d73c027..0eec60d4492 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -157,9 +157,6 @@ void close_thread_tables(THD* thd);
#endif /* WITH_WSREP */
/** to force correct commit order in binlog */
-static ulong commit_threads = 0;
-static mysql_cond_t commit_cond;
-static mysql_mutex_t commit_cond_m;
static mysql_mutex_t pending_checkpoint_mutex;
#define INSIDE_HA_INNOBASE_CC
@@ -174,7 +171,6 @@ static const long AUTOINC_NO_LOCKING = 2;
static ulong innobase_open_files;
static long innobase_autoinc_lock_mode;
-static ulong innobase_commit_concurrency;
static ulonglong innobase_buffer_pool_size;
@@ -1184,20 +1180,6 @@ innobase_release_savepoint(
static void innobase_checkpoint_request(handlerton *hton, void *cookie);
-/** @brief Initialize the default value of innodb_commit_concurrency.
-
-Once InnoDB is running, the innodb_commit_concurrency must not change
-from zero to nonzero. (Bug #42101)
-
-The initial default value is 0, and without this extra initialization,
-SET GLOBAL innodb_commit_concurrency=DEFAULT would set the parameter
-to 0, even if it was initially set to nonzero at the command line
-or configuration file. */
-static
-void
-innobase_commit_concurrency_init_default();
-/*=======================================*/
-
/** @brief Adjust some InnoDB startup parameters based on file contents
or innodb_page_size. */
static
@@ -1377,36 +1359,6 @@ innobase_fts_store_docid(
}
#endif
-/*************************************************************//**
-Check for a valid value of innobase_commit_concurrency.
-@return 0 for valid innodb_commit_concurrency */
-static
-int
-innobase_commit_concurrency_validate(
-/*=================================*/
- THD*, st_mysql_sys_var*,
- void* save, /*!< out: immediate result
- for update function */
- struct st_mysql_value* value) /*!< in: incoming string */
-{
- long long intbuf;
- ulong commit_concurrency;
-
- DBUG_ENTER("innobase_commit_concurrency_validate");
-
- if (value->val_int(value, &intbuf)) {
- /* The value is NULL. That is invalid. */
- DBUG_RETURN(1);
- }
-
- *reinterpret_cast<ulong*>(save) = commit_concurrency
- = static_cast<ulong>(intbuf);
-
- /* Allow the value to be updated, as long as it remains zero
- or nonzero. */
- DBUG_RETURN(!(!commit_concurrency == !innobase_commit_concurrency));
-}
-
/*******************************************************************//**
Function for constructing an InnoDB table handler instance. */
static
@@ -1449,10 +1401,7 @@ innodb_page_size_validate(
/******************************************************************//**
Returns true if the thread is the replication thread on the slave
-server. Used in srv_conc_enter_innodb() to determine if the thread
-should be allowed to enter InnoDB - the replication thread is treated
-differently than other threads. Also used in
-srv_conc_force_exit_innodb().
+server.
@return true if thd is the replication thread */
ibool
thd_is_replication_slave_thread(
@@ -1541,77 +1490,6 @@ thd_trx_is_auto_commit(
&& thd_is_select(thd));
}
-/** Enter InnoDB engine after checking the max number of user threads
-allowed, else the thread is put into sleep.
-@param[in,out] prebuilt row prebuilt handler */
-static inline void innobase_srv_conc_enter_innodb(row_prebuilt_t *prebuilt)
-{
- trx_t* trx = prebuilt->trx;
-
-#ifdef WITH_WSREP
- if (trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) return;
-#endif /* WITH_WSREP */
-
- if (srv_thread_concurrency) {
- if (trx->n_tickets_to_enter_innodb > 0) {
-
- /* If trx has 'free tickets' to enter the engine left,
- then use one such ticket */
-
- --trx->n_tickets_to_enter_innodb;
-
- } else if (trx->mysql_thd != NULL
- && thd_is_replication_slave_thread(trx->mysql_thd)) {
- const ulonglong end = my_interval_timer()
- + ulonglong(srv_replication_delay) * 1000000;
- while ((srv_conc_get_active_threads()
- >= srv_thread_concurrency)
- && my_interval_timer() < end) {
- os_thread_sleep(2000 /* 2 ms */);
- }
- } else {
- srv_conc_enter_innodb(prebuilt);
- }
- }
-}
-
-/** Note that the thread wants to leave InnoDB only if it doesn't have
-any spare tickets.
-@param[in,out] m_prebuilt row prebuilt handler */
-static inline void innobase_srv_conc_exit_innodb(row_prebuilt_t *prebuilt)
-{
- ut_ad(!sync_check_iterate(sync_check()));
-
- trx_t* trx = prebuilt->trx;
-
-#ifdef WITH_WSREP
- if (trx->is_wsrep() && wsrep_thd_is_BF(trx->mysql_thd, FALSE)) return;
-#endif /* WITH_WSREP */
-
- /* This is to avoid making an unnecessary function call. */
- if (trx->declared_to_be_inside_innodb
- && trx->n_tickets_to_enter_innodb == 0) {
-
- srv_conc_force_exit_innodb(trx);
- }
-}
-
-/******************************************************************//**
-Force a thread to leave InnoDB even if it has spare tickets. */
-static inline
-void
-innobase_srv_conc_force_exit_innodb(
-/*================================*/
- trx_t* trx) /*!< in: transaction handle */
-{
- ut_ad(!sync_check_iterate(sync_check()));
-
- /* This is to avoid making an unnecessary function call. */
- if (trx->declared_to_be_inside_innodb) {
- srv_conc_force_exit_innodb(trx);
- }
-}
-
/******************************************************************//**
Returns the NUL terminated value of glob_hostname.
@return pointer to glob_hostname. */
@@ -2905,8 +2783,6 @@ innobase_query_caching_of_table_permitted(
return(false);
}
- innobase_srv_conc_force_exit_innodb(trx);
-
if (!thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)
&& trx->n_mysql_tables_in_use == 0) {
/* We are going to retrieve the query result from the query
@@ -3204,8 +3080,6 @@ ha_innobase::init_table_handle_for_HANDLER(void)
/* Initialize the m_prebuilt struct much like it would be inited in
external_lock */
- innobase_srv_conc_force_exit_innodb(m_prebuilt->trx);
-
/* If the transaction is not started yet, start it */
trx_start_if_not_started_xa(m_prebuilt->trx, false);
@@ -3388,6 +3262,13 @@ static uint innodb_background_scrub_data_interval;
static const char* innodb_background_scrub_data_interval_msg
= "The parameter innodb_background_scrub_data_interval is deprecated and"
" has no effect.";
+
+uint replication_delay;
+uint thread_concurrency;
+uint commit_concurrency;
+uint concurrency_tickets;
+uint adaptive_max_sleep_delay;
+uint thread_sleep_delay;
} // namespace deprecated
/** Initialize, validate and normalize the InnoDB startup parameters.
@@ -3774,8 +3655,6 @@ static int innodb_init_params()
data_mysql_default_charset_coll = (ulint) default_charset_info->number;
- innobase_commit_concurrency_init_default();
-
srv_use_atomic_writes
= innobase_use_atomic_writes && my_may_have_atomic_write;
if (srv_use_atomic_writes && !srv_file_per_table)
@@ -3986,9 +3865,6 @@ static int innodb_init(void* p)
ibuf_max_size_update(srv_change_buffer_max_size);
- mysql_mutex_init(commit_cond_mutex_key,
- &commit_cond_m, MY_MUTEX_INIT_FAST);
- mysql_cond_init(commit_cond_key, &commit_cond, 0);
mysql_mutex_init(pending_checkpoint_mutex_key,
&pending_checkpoint_mutex,
MY_MUTEX_INIT_FAST);
@@ -4058,8 +3934,6 @@ innobase_end(handlerton*, ha_panic_function)
innodb_shutdown();
innobase_space_shutdown();
- mysql_mutex_destroy(&commit_cond_m);
- mysql_cond_destroy(&commit_cond);
mysql_mutex_destroy(&pending_checkpoint_mutex);
}
@@ -4127,8 +4001,6 @@ innobase_start_trx_and_assign_read_view(
trx_t* trx = check_trx_exists(thd);
- innobase_srv_conc_force_exit_innodb(trx);
-
/* The transaction should not be active yet, start it */
ut_ad(!trx_is_started(trx));
@@ -4168,30 +4040,9 @@ innobase_commit_ordered_2(
{
DBUG_ENTER("innobase_commit_ordered_2");
- bool read_only = trx->read_only || trx->id == 0;
+ const bool read_only = trx->read_only || trx->id == 0;
if (!read_only) {
-
- while (innobase_commit_concurrency > 0) {
-
- mysql_mutex_lock(&commit_cond_m);
-
- ++commit_threads;
-
- if (commit_threads
- <= innobase_commit_concurrency) {
-
- mysql_mutex_unlock(&commit_cond_m);
- break;
- }
-
- --commit_threads;
-
- mysql_cond_wait(&commit_cond, &commit_cond_m);
-
- mysql_mutex_unlock(&commit_cond_m);
- }
-
/* The following call reads the binary log position of
the transaction being committed.
@@ -4225,18 +4076,6 @@ innobase_commit_ordered_2(
if (!read_only) {
trx->mysql_log_file_name = NULL;
trx->flush_log_later = false;
-
- if (innobase_commit_concurrency > 0) {
-
- mysql_mutex_lock(&commit_cond_m);
-
- ut_ad(commit_threads > 0);
- --commit_threads;
-
- mysql_cond_signal(&commit_cond);
-
- mysql_mutex_unlock(&commit_cond_m);
- }
}
DBUG_VOID_RETURN;
@@ -4377,8 +4216,6 @@ innobase_commit(
/* This is a statement level variable. */
trx->fts_next_doc_id = 0;
- innobase_srv_conc_force_exit_innodb(trx);
-
DBUG_RETURN(0);
}
@@ -4406,8 +4243,6 @@ innobase_rollback(
ut_ad(trx->dict_operation_lock_mode == 0);
ut_ad(trx->dict_operation == TRX_DICT_OP_NONE);
- innobase_srv_conc_force_exit_innodb(trx);
-
/* Reset the number AUTO-INC rows required */
trx->n_autoinc_rows = 0;
@@ -4458,8 +4293,6 @@ innobase_rollback_trx(
DBUG_ENTER("innobase_rollback_trx");
DBUG_PRINT("trans", ("aborting transaction"));
- innobase_srv_conc_force_exit_innodb(trx);
-
/* If we had reserved the auto-inc lock for some table (if
we come here to roll back the latest SQL statement) we
release it now before a possibly lengthy rollback */
@@ -4630,8 +4463,6 @@ innobase_rollback_to_savepoint(
trx_t* trx = check_trx_exists(thd);
- innobase_srv_conc_force_exit_innodb(trx);
-
/* TODO: use provided savepoint data area to store savepoint data */
char name[64];
@@ -4736,8 +4567,6 @@ innobase_savepoint(
trx_t* trx = check_trx_exists(thd);
- innobase_srv_conc_force_exit_innodb(trx);
-
/* Cannot happen outside of transaction */
DBUG_ASSERT(trx_is_registered_for_2pc(trx));
@@ -7683,8 +7512,6 @@ ha_innobase::write_row(
build_template(true);
}
- innobase_srv_conc_enter_innodb(m_prebuilt);
-
vers_set_fields = table->versioned_write(VERS_TRX_ID) ?
ROW_INS_VERSIONED : ROW_INS_NORMAL;
@@ -7754,8 +7581,6 @@ ha_innobase::write_row(
wsrep_thd_query(m_user_thd));
error= DB_SUCCESS;
wsrep_thd_self_abort(m_user_thd);
- innobase_srv_conc_exit_innodb(
- m_prebuilt);
/* jump straight to func exit over
* later wsrep hooks */
goto func_exit;
@@ -7823,8 +7648,6 @@ set_max_autoinc:
}
}
- innobase_srv_conc_exit_innodb(m_prebuilt);
-
report_error:
/* Cleanup and exit. */
if (error == DB_TABLESPACE_DELETED) {
@@ -8476,8 +8299,6 @@ ha_innobase::update_row(
? VERSIONED_DELETE
: NO_DELETE;
- innobase_srv_conc_enter_innodb(m_prebuilt);
-
error = row_update_for_mysql(m_prebuilt);
if (error == DB_SUCCESS && vers_ins_row
@@ -8530,8 +8351,6 @@ ha_innobase::update_row(
}
}
- innobase_srv_conc_exit_innodb(m_prebuilt);
-
func_exit:
if (error == DB_FTS_INVALID_DOCID) {
err = HA_FTS_INVALID_DOCID;
@@ -8596,12 +8415,8 @@ ha_innobase::delete_row(
? VERSIONED_DELETE
: PLAIN_DELETE;
- innobase_srv_conc_enter_innodb(m_prebuilt);
-
error = row_update_for_mysql(m_prebuilt);
- innobase_srv_conc_exit_innodb(m_prebuilt);
-
#ifdef WITH_WSREP
if (error == DB_SUCCESS && trx->is_wsrep()
&& wsrep_thd_is_local(m_user_thd)
@@ -8902,20 +8717,8 @@ ha_innobase::index_read(
m_last_match_mode = (uint) match_mode;
- dberr_t ret;
-
- if (mode != PAGE_CUR_UNSUPP) {
-
- innobase_srv_conc_enter_innodb(m_prebuilt);
-
- ret = row_search_mvcc(
- buf, mode, m_prebuilt, match_mode, 0);
-
- innobase_srv_conc_exit_innodb(m_prebuilt);
- } else {
-
- ret = DB_UNSUPPORTED;
- }
+ dberr_t ret = mode == PAGE_CUR_UNSUPP ? DB_UNSUPPORTED
+ : row_search_mvcc(buf, mode, m_prebuilt, match_mode, 0);
DBUG_EXECUTE_IF("ib_select_query_failure", ret = DB_ERROR;);
@@ -9171,16 +8974,10 @@ ha_innobase::general_fetch(
: HA_ERR_NO_SUCH_TABLE);
}
- innobase_srv_conc_enter_innodb(m_prebuilt);
-
- dberr_t ret = row_search_mvcc(
- buf, PAGE_CUR_UNSUPP, m_prebuilt, match_mode, direction);
-
- innobase_srv_conc_exit_innodb(m_prebuilt);
-
int error;
- switch (ret) {
+ switch (dberr_t ret = row_search_mvcc(buf, PAGE_CUR_UNSUPP, m_prebuilt,
+ match_mode, direction)) {
case DB_SUCCESS:
error = 0;
table->status = 0;
@@ -9691,16 +9488,11 @@ next_record:
tuple. */
innobase_fts_create_doc_id_key(tuple, index, &search_doc_id);
- innobase_srv_conc_enter_innodb(m_prebuilt);
-
- dberr_t ret = row_search_for_mysql(
- (byte*) buf, PAGE_CUR_GE, m_prebuilt, ROW_SEL_EXACT, 0);
-
- innobase_srv_conc_exit_innodb(m_prebuilt);
-
int error;
- switch (ret) {
+ switch (dberr_t ret = row_search_for_mysql(buf, PAGE_CUR_GE,
+ m_prebuilt,
+ ROW_SEL_EXACT, 0)) {
case DB_SUCCESS:
error = 0;
table->status = 0;
@@ -15640,8 +15432,6 @@ ha_innobase::start_stmt(
trx = m_prebuilt->trx;
- innobase_srv_conc_force_exit_innodb(trx);
-
/* Reset the AUTOINC statement level counter for multi-row INSERTs. */
trx->n_autoinc_rows = 0;
@@ -15947,8 +15737,6 @@ ha_innobase::external_lock(
trx->n_mysql_tables_in_use--;
m_mysql_has_locked = false;
- innobase_srv_conc_force_exit_innodb(trx);
-
/* If the MySQL lock count drops to zero we know that the current SQL
statement has ended */
@@ -16023,10 +15811,6 @@ innodb_show_status(
srv_wake_purge_thread_if_not_active();
- trx_t* trx = check_trx_exists(thd);
-
- innobase_srv_conc_force_exit_innodb(trx);
-
/* We let the InnoDB Monitor to output at most MAX_STATUS_SIZE
bytes of text. */
@@ -17139,8 +16923,6 @@ innobase_xa_prepare(
thd_get_xid(thd, (MYSQL_XID*) trx->xid);
- innobase_srv_conc_force_exit_innodb(trx);
-
if (!trx_is_registered_for_2pc(trx) && trx_is_started(trx)) {
sql_print_error("Transaction not registered for MariaDB 2PC,"
@@ -19029,7 +18811,6 @@ wsrep_abort_transaction(
victim_trx, signal);
trx_mutex_exit(victim_trx);
lock_mutex_exit();
- wsrep_srv_conc_cancel_wait(victim_trx);
DBUG_RETURN(rcode);
} else {
wsrep_thd_bf_abort(bf_thd, victim_thd, signal);
@@ -19386,11 +19167,9 @@ static MYSQL_SYSVAR_ULONG(adaptive_hash_index_parts, btr_ahi_parts,
NULL, NULL, 8, 1, 512, 0);
#endif /* BTR_CUR_HASH_ADAPT */
-static MYSQL_SYSVAR_ULONG(replication_delay, srv_replication_delay,
- PLUGIN_VAR_RQCMDARG,
- "Replication thread delay (ms) on the slave server if"
- " innodb_thread_concurrency is reached (0 by default)",
- NULL, NULL, 0, 0, ~0UL, 0);
+static MYSQL_SYSVAR_UINT(replication_delay, deprecated::replication_delay,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ innodb_deprecated_ignored, nullptr, nullptr, 0, 0, 0, 0);
static MYSQL_SYSVAR_UINT(compression_level, page_zip_level,
PLUGIN_VAR_RQCMDARG,
@@ -19586,15 +19365,13 @@ static MYSQL_SYSVAR_ULONG(flush_neighbors, srv_flush_neighbors,
" when flushing a block",
NULL, NULL, 1, 0, 2, 0);
-static MYSQL_SYSVAR_ULONG(commit_concurrency, innobase_commit_concurrency,
- PLUGIN_VAR_RQCMDARG,
- "Helps in performance tuning in heavily concurrent environments.",
- innobase_commit_concurrency_validate, NULL, 0, 0, 1000, 0);
+static MYSQL_SYSVAR_UINT(commit_concurrency, deprecated::commit_concurrency,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ innodb_deprecated_ignored, nullptr, nullptr, 0, 0, 0, 0);
-static MYSQL_SYSVAR_ULONG(concurrency_tickets, srv_n_free_tickets_to_enter,
- PLUGIN_VAR_RQCMDARG,
- "Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket",
- NULL, NULL, 5000L, 1L, ~0UL, 0);
+static MYSQL_SYSVAR_UINT(concurrency_tickets, deprecated::concurrency_tickets,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ innodb_deprecated_ignored, nullptr, nullptr, 0, 0, 0, 0);
static MYSQL_SYSVAR_BOOL(deadlock_detect, innobase_deadlock_detect,
PLUGIN_VAR_NOCMDARG,
@@ -19743,19 +19520,14 @@ static MYSQL_SYSVAR_UINT(spin_wait_delay, srv_spin_wait_delay,
"Maximum delay between polling for a spin lock (4 by default)",
NULL, NULL, 4, 0, 6000, 0);
-static MYSQL_SYSVAR_ULONG(thread_concurrency, srv_thread_concurrency,
- PLUGIN_VAR_RQCMDARG,
- "Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling.",
- NULL, NULL, 0, 0, 1000, 0);
+static MYSQL_SYSVAR_UINT(thread_concurrency, deprecated::thread_concurrency,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ innodb_deprecated_ignored, nullptr, nullptr, 0, 0, 0, 0);
-static MYSQL_SYSVAR_ULONG(
- adaptive_max_sleep_delay, srv_adaptive_max_sleep_delay,
- PLUGIN_VAR_RQCMDARG,
- "The upper limit of the sleep delay in usec. Value of 0 disables it.",
- NULL, NULL,
- 150000, /* Default setting */
- 0, /* Minimum value */
- 1000000, 0); /* Maximum value */
+static MYSQL_SYSVAR_UINT(
+ adaptive_max_sleep_delay, deprecated::adaptive_max_sleep_delay,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ innodb_deprecated_ignored, nullptr, nullptr, 0, 0, 0, 0);
static MYSQL_SYSVAR_BOOL(prefix_index_cluster_optimization,
srv_prefix_index_cluster_optimization,
@@ -19763,14 +19535,9 @@ static MYSQL_SYSVAR_BOOL(prefix_index_cluster_optimization,
"Enable prefix optimization to sometimes avoid cluster index lookups.",
NULL, NULL, FALSE);
-static MYSQL_SYSVAR_ULONG(thread_sleep_delay, srv_thread_sleep_delay,
- PLUGIN_VAR_RQCMDARG,
- "Time of innodb thread sleeping before joining InnoDB queue (usec)."
- " Value 0 disable a sleep",
- NULL, NULL,
- 10000L,
- 0L,
- 1000000L, 0);
+static MYSQL_SYSVAR_UINT(thread_sleep_delay, deprecated::thread_sleep_delay,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ innodb_deprecated_ignored, nullptr, nullptr, 0, 0, 0, 0);
static MYSQL_SYSVAR_STR(data_file_path, innobase_data_file_path,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
@@ -20443,24 +20210,6 @@ i_s_innodb_sys_semaphore_waits,
i_s_innodb_tablespaces_encryption
maria_declare_plugin_end;
-/** @brief Initialize the default value of innodb_commit_concurrency.
-
-Once InnoDB is running, the innodb_commit_concurrency must not change
-from zero to nonzero. (Bug #42101)
-
-The initial default value is 0, and without this extra initialization,
-SET GLOBAL innodb_commit_concurrency=DEFAULT would set the parameter
-to 0, even if it was initially set to nonzero at the command line
-or configuration file. */
-static
-void
-innobase_commit_concurrency_init_default()
-/*======================================*/
-{
- MYSQL_SYSVAR_NAME(commit_concurrency).def_val
- = innobase_commit_concurrency;
-}
-
/** @brief Adjust some InnoDB startup parameters based on file contents
or innodb_page_size. */
static
diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc
index 255bc889205..897bda85d9b 100644
--- a/storage/innobase/handler/i_s.cc
+++ b/storage/innobase/handler/i_s.cc
@@ -470,8 +470,7 @@ fill_innodb_trx_from_cache(
row->trx_rows_modified, true));
/* trx_concurrency_tickets */
- OK(fields[IDX_TRX_CONNCURRENCY_TICKETS]->store(
- row->trx_concurrency_tickets, true));
+ OK(fields[IDX_TRX_CONNCURRENCY_TICKETS]->store(0, true));
/* trx_isolation_level */
OK(fields[IDX_TRX_ISOLATION_LEVEL]->store(
diff --git a/storage/innobase/include/ha_prototypes.h b/storage/innobase/include/ha_prototypes.h
index ef1174c95dd..0632c0c5140 100644
--- a/storage/innobase/include/ha_prototypes.h
+++ b/storage/innobase/include/ha_prototypes.h
@@ -110,10 +110,7 @@ innobase_convert_name(
/******************************************************************//**
Returns true if the thread is the replication thread on the slave
-server. Used in srv_conc_enter_innodb() to determine if the thread
-should be allowed to enter InnoDB - the replication thread is treated
-differently than other threads. Also used in
-srv_conc_force_exit_innodb().
+server.
@return true if thd is the replication thread */
ibool
thd_is_replication_slave_thread(
diff --git a/storage/innobase/include/que0types.h b/storage/innobase/include/que0types.h
index d9005095d3c..38f6e380a30 100644
--- a/storage/innobase/include/que0types.h
+++ b/storage/innobase/include/que0types.h
@@ -35,6 +35,7 @@ typedef void que_node_t;
/* Query graph root is a fork node */
typedef struct que_fork_t que_t;
+struct row_prebuilt_t;
struct que_thr_t;
/* Query graph node types */
diff --git a/storage/innobase/include/srv0conc.h b/storage/innobase/include/srv0conc.h
deleted file mode 100644
index d24107735ed..00000000000
--- a/storage/innobase/include/srv0conc.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************
-
-Copyright (c) 2011, 2014, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2018, MariaDB Corporation.
-
-Portions of this file contain modifications contributed and copyrighted by
-Google, Inc. Those modifications are gratefully acknowledged and are described
-briefly in the InnoDB documentation. The contributions by Google are
-incorporated with their permission, and subject to the conditions contained in
-the file COPYING.Google.
-
-Portions of this file contain modifications contributed and copyrighted
-by Percona Inc.. Those modifications are
-gratefully acknowledged and are described briefly in the InnoDB
-documentation. The contributions by Percona Inc. are incorporated with
-their permission, and subject to the conditions contained in the file
-COPYING.Percona.
-
-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
-Foundation; version 2 of the License.
-
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
-*****************************************************************************/
-
-/**************************************************//**
-@file srv/srv0conc.h
-
-InnoDB concurrency manager header file
-
-Created 2011/04/18 Sunny Bains
-*******************************************************/
-
-#ifndef srv_conc_h
-#define srv_conc_h
-
-/** We are prepared for a situation that we have this many threads waiting for
-a semaphore inside InnoDB. srv_start() sets the value. */
-extern ulint srv_max_n_threads;
-
-/** The following controls how many threads we let inside InnoDB concurrently:
-threads waiting for locks are not counted into the number because otherwise
-we could get a deadlock. Value of 0 will disable the concurrency check. */
-
-extern ulong srv_thread_concurrency;
-
-struct row_prebuilt_t;
-/*********************************************************************//**
-Puts an OS thread to wait if there are too many concurrent threads
-(>= srv_thread_concurrency) inside InnoDB. The threads wait in a FIFO queue.
-@param[in,out] prebuilt row prebuilt handler */
-void
-srv_conc_enter_innodb(
- row_prebuilt_t* prebuilt);
-
-/*********************************************************************//**
-This lets a thread enter InnoDB regardless of the number of threads inside
-InnoDB. This must be called when a thread ends a lock wait. */
-void
-srv_conc_force_enter_innodb(
-/*========================*/
- trx_t* trx); /*!< in: transaction object associated with
- the thread */
-
-/*********************************************************************//**
-This must be called when a thread exits InnoDB in a lock wait or at the
-end of an SQL statement. */
-void
-srv_conc_force_exit_innodb(
-/*=======================*/
- trx_t* trx); /*!< in: transaction object associated with
- the thread */
-
-/*********************************************************************//**
-Get the count of threads waiting inside InnoDB. */
-ulint
-srv_conc_get_waiting_threads(void);
-/*==============================*/
-
-/*********************************************************************//**
-Get the count of threads active inside InnoDB. */
-ulint
-srv_conc_get_active_threads(void);
-/*==============================*/
-
-#endif /* srv_conc_h */
diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h
index 9cad1497b85..57542b32719 100644
--- a/storage/innobase/include/srv0srv.h
+++ b/storage/innobase/include/srv0srv.h
@@ -39,14 +39,12 @@ The server main program
Created 10/10/1995 Heikki Tuuri
*******************************************************/
-#ifndef srv0srv_h
-#define srv0srv_h
+#pragma once
#include "log0log.h"
#include "os0event.h"
#include "que0types.h"
#include "trx0types.h"
-#include "srv0conc.h"
#include "fil0fil.h"
#include "mysql/psi/mysql_stage.h"
@@ -198,6 +196,10 @@ struct srv_stats_t
ulint_ctr_1_t lock_deadlock_count;
};
+/** We are prepared for a situation that we have this many threads waiting for
+a semaphore inside InnoDB. srv_start() sets the value. */
+extern ulint srv_max_n_threads;
+
extern const char* srv_main_thread_op_info;
/** Prefix used by MySQL to indicate pre-5.1 table name encoding */
@@ -246,10 +248,6 @@ extern my_bool high_level_read_only;
/** store to its own file each table created by an user; data
dictionary tables are in the system tablespace 0 */
extern my_bool srv_file_per_table;
-/** Sleep delay for threads waiting to enter InnoDB. In micro-seconds. */
-extern ulong srv_thread_sleep_delay;
-/** Maximum sleep delay (in micro-seconds), value of 0 disables it.*/
-extern ulong srv_adaptive_max_sleep_delay;
/** Sort buffer size in index creation */
extern ulong srv_sort_buf_size;
@@ -423,8 +421,6 @@ extern double srv_max_buf_pool_modified_pct;
extern ulong srv_max_purge_lag;
extern ulong srv_max_purge_lag_delay;
-extern ulong srv_replication_delay;
-
extern my_bool innodb_encrypt_temporary_tables;
extern my_bool srv_immediate_scrub_data_uncompressed;
@@ -455,8 +451,6 @@ extern bool srv_monitor_active;
extern ulong srv_n_spin_wait_rounds;
-extern ulong srv_n_free_tickets_to_enter;
-extern ulong srv_thread_sleep_delay;
extern uint srv_spin_wait_delay;
extern ulint srv_truncated_status_writes;
@@ -942,14 +936,3 @@ static inline void srv_start_periodic_timer(std::unique_ptr<tpool::timer>& t,
void srv_thread_pool_init();
void srv_thread_pool_end();
-
-#ifdef WITH_WSREP
-UNIV_INTERN
-void
-wsrep_srv_conc_cancel_wait(
-/*==================*/
- trx_t* trx); /*!< in: transaction object associated with the
- thread */
-#endif /* WITH_WSREP */
-
-#endif
diff --git a/storage/innobase/include/srv0start.h b/storage/innobase/include/srv0start.h
index 596f6d4f5ab..23dc8347129 100644
--- a/storage/innobase/include/srv0start.h
+++ b/storage/innobase/include/srv0start.h
@@ -24,8 +24,7 @@ Starts the Innobase database server
Created 10/10/1995 Heikki Tuuri
*******************************************************/
-#ifndef srv0start_h
-#define srv0start_h
+#pragma once
#include "log0log.h"
#include "ut0byte.h"
@@ -133,4 +132,3 @@ extern enum srv_shutdown_t srv_shutdown_state;
/** Files comprising the system tablespace */
extern pfs_os_file_t files[1000];
-#endif
diff --git a/storage/innobase/include/trx0i_s.h b/storage/innobase/include/trx0i_s.h
index 4eab97c0b02..892ee3cfe18 100644
--- a/storage/innobase/include/trx0i_s.h
+++ b/storage/innobase/include/trx0i_s.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2007, 2015, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2019, MariaDB Corporation.
+Copyright (c) 2017, 2020, MariaDB Corporation.
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
@@ -141,9 +141,6 @@ struct i_s_trx_row_t {
trx->lock_heap) */
ulint trx_rows_locked;/*!< lock_number_of_rows_locked() */
uintmax_t trx_rows_modified;/*!< trx_t::undo_no */
- ulint trx_concurrency_tickets;
- /*!< n_tickets_to_enter_innodb in
- trx_t */
uint trx_isolation_level;
/*!< trx_t::isolation_level */
bool trx_unique_checks;
diff --git a/storage/innobase/include/trx0trx.h b/storage/innobase/include/trx0trx.h
index 034552fc62e..20043a6c4a4 100644
--- a/storage/innobase/include/trx0trx.h
+++ b/storage/innobase/include/trx0trx.h
@@ -864,17 +864,6 @@ public:
ulint duplicates; /*!< TRX_DUP_IGNORE | TRX_DUP_REPLACE */
trx_dict_op_t dict_operation; /**< @see enum trx_dict_op_t */
- /* Fields protected by the srv_conc_mutex. */
- bool declared_to_be_inside_innodb;
- /*!< this is TRUE if we have declared
- this transaction in
- srv_conc_enter_innodb to be inside the
- InnoDB engine */
- ib_uint32_t n_tickets_to_enter_innodb;
- /*!< this can be > 0 only when
- declared_to_... is TRUE; when we come
- to srv_conc_innodb_enter, if the value
- here is > 0, we decrement this by 1 */
ib_uint32_t dict_operation_lock_mode;
/*!< 0, RW_S_LATCH, or RW_X_LATCH:
the latch mode trx currently holds
@@ -1018,10 +1007,6 @@ public:
/*!< Total table lock wait time
up to this moment. */
-#ifdef WITH_WSREP
- os_event_t wsrep_event; /* event waited for in srv_conc_slot */
-#endif /* WITH_WSREP */
-
rw_trx_hash_element_t *rw_trx_hash_element;
LF_PINS *rw_trx_hash_pins;
ulint magic_n;
diff --git a/storage/innobase/lock/lock0wait.cc b/storage/innobase/lock/lock0wait.cc
index 7b184495aa3..6b6e2c04659 100644
--- a/storage/innobase/lock/lock0wait.cc
+++ b/storage/innobase/lock/lock0wait.cc
@@ -234,7 +234,6 @@ lock_wait_suspend_thread(
{
srv_slot_t* slot;
trx_t* trx;
- ibool was_declared_inside_innodb;
ulong lock_wait_timeout;
ut_a(lock_sys.timeout_timer.get());
@@ -329,16 +328,6 @@ lock_wait_suspend_thread(
/* Suspend this thread and wait for the event. */
- was_declared_inside_innodb = trx->declared_to_be_inside_innodb;
-
- if (was_declared_inside_innodb) {
- /* We must declare this OS thread to exit InnoDB, since a
- possible other thread holding a lock which this thread waits
- for must be allowed to enter, sooner or later */
-
- srv_conc_force_exit_innodb(trx);
- }
-
/* Unknown is also treated like a record lock */
if (lock_type == ULINT_UNDEFINED || lock_type == LOCK_REC) {
thd_wait_begin(trx->mysql_thd, THD_WAIT_ROW_LOCK);
@@ -354,13 +343,6 @@ lock_wait_suspend_thread(
/* After resuming, reacquire the data dictionary latch if
necessary. */
- if (was_declared_inside_innodb) {
-
- /* Return back inside InnoDB */
-
- srv_conc_force_enter_innodb(trx);
- }
-
if (had_dict_lock) {
row_mysql_freeze_data_dictionary(trx);
diff --git a/storage/innobase/log/log0log.cc b/storage/innobase/log/log0log.cc
index 0fe480ca660..62de68790ed 100644
--- a/storage/innobase/log/log0log.cc
+++ b/storage/innobase/log/log0log.cc
@@ -448,7 +448,7 @@ log_set_capacity(ulonglong file_size)
by single query steps: running out of free log space is a serious
system error which requires rebooting the database. */
- free = LOG_CHECKPOINT_FREE_PER_THREAD * (10 + srv_thread_concurrency)
+ free = LOG_CHECKPOINT_FREE_PER_THREAD * 10
+ LOG_CHECKPOINT_EXTRA_FREE;
if (free >= smallest_capacity / 2) {
ib::error() << "Cannot continue operation because log file is "
diff --git a/storage/innobase/srv/srv0conc.cc b/storage/innobase/srv/srv0conc.cc
deleted file mode 100644
index 07e0299dc98..00000000000
--- a/storage/innobase/srv/srv0conc.cc
+++ /dev/null
@@ -1,327 +0,0 @@
-/*****************************************************************************
-
-Copyright (c) 2011, 2015, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2015, 2020, MariaDB Corporation.
-
-Portions of this file contain modifications contributed and copyrighted by
-Google, Inc. Those modifications are gratefully acknowledged and are described
-briefly in the InnoDB documentation. The contributions by Google are
-incorporated with their permission, and subject to the conditions contained in
-the file COPYING.Google.
-
-Portions of this file contain modifications contributed and copyrighted
-by Percona Inc.. Those modifications are
-gratefully acknowledged and are described briefly in the InnoDB
-documentation. The contributions by Percona Inc. are incorporated with
-their permission, and subject to the conditions contained in the file
-COPYING.Percona.
-
-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
-Foundation; version 2 of the License.
-
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
-
-*****************************************************************************/
-
-/**************************************************//**
-@file srv/srv0conc.cc
-
-InnoDB concurrency manager
-
-Created 2011/04/18 Sunny Bains
-*******************************************************/
-
-#include "srv0srv.h"
-#include "trx0trx.h"
-#include "row0mysql.h"
-#include "dict0dict.h"
-#include <mysql/service_thd_wait.h>
-#include <mysql/service_wsrep.h>
-
-/** Number of times a thread is allowed to enter InnoDB within the same
-SQL query after it has once got the ticket. */
-ulong srv_n_free_tickets_to_enter = 500;
-
-/** Maximum sleep delay (in micro-seconds), value of 0 disables it. */
-ulong srv_adaptive_max_sleep_delay = 150000;
-
-ulong srv_thread_sleep_delay = 10000;
-
-
-/** We are prepared for a situation that we have this many threads waiting for
-a semaphore inside InnoDB. srv_start() sets the value. */
-ulint srv_max_n_threads;
-
-/** The following controls how many threads we let inside InnoDB concurrently:
-threads waiting for locks are not counted into the number because otherwise
-we could get a deadlock. Value of 0 will disable the concurrency check. */
-
-ulong srv_thread_concurrency = 0;
-
-/** Variables tracking the active and waiting threads. */
-struct srv_conc_t {
- /** Number of transactions that have declared_to_be_inside_innodb */
- MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) Atomic_counter<ulint> n_active;
-
- /** Number of OS threads waiting in the FIFO for permission to
- enter InnoDB */
- MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) Atomic_counter<ulint> n_waiting;
-};
-
-/* Control variables for tracking concurrency. */
-static srv_conc_t srv_conc;
-
-/*********************************************************************//**
-Note that a user thread is entering InnoDB. */
-static
-void
-srv_enter_innodb_with_tickets(
-/*==========================*/
- trx_t* trx) /*!< in/out: transaction that wants
- to enter InnoDB */
-{
- trx->declared_to_be_inside_innodb = TRUE;
- trx->n_tickets_to_enter_innodb = static_cast<uint32_t>(
- srv_n_free_tickets_to_enter);
-}
-
-/*********************************************************************//**
-Handle the scheduling of a user thread that wants to enter InnoDB. Setting
-srv_adaptive_max_sleep_delay > 0 switches the adaptive sleep calibration to
-ON. When set, we want to wait in the queue for as little time as possible.
-However, very short waits will result in a lot of context switches and that
-is also not desirable. When threads need to sleep multiple times we increment
-os_thread_sleep_delay by one. When we see threads getting a slot without
-waiting and there are no other threads waiting in the queue, we try and reduce
-the wait as much as we can. Currently we reduce it by half each time. If the
-thread only had to wait for one turn before it was able to enter InnoDB we
-decrement it by one. This is to try and keep the sleep time stable around the
-"optimum" sleep time. */
-static
-void
-srv_conc_enter_innodb_with_atomics(
-/*===============================*/
- trx_t* trx) /*!< in/out: transaction that wants
- to enter InnoDB */
-{
- ulint n_sleeps = 0;
- ibool notified_mysql = FALSE;
-
- ut_a(!trx->declared_to_be_inside_innodb);
-
- for (;;) {
- ulint sleep_in_us;
-#ifdef WITH_WSREP
- if (trx->is_wsrep() && wsrep_thd_is_aborting(trx->mysql_thd)) {
- if (UNIV_UNLIKELY(wsrep_debug)) {
- ib::info() <<
- "srv_conc_enter due to MUST_ABORT";
- }
- srv_conc_force_enter_innodb(trx);
- return;
- }
-#endif /* WITH_WSREP */
-
- if (srv_thread_concurrency == 0) {
- if (notified_mysql) {
- srv_conc.n_waiting--;
- thd_wait_end(trx->mysql_thd);
- }
-
- return;
- }
-
- if (srv_conc.n_active < srv_thread_concurrency) {
-
- /* Check if there are any free tickets. */
- if (srv_conc.n_active++ < srv_thread_concurrency) {
-
- srv_enter_innodb_with_tickets(trx);
-
- if (notified_mysql) {
- srv_conc.n_waiting--;
- thd_wait_end(trx->mysql_thd);
- }
-
- if (srv_adaptive_max_sleep_delay > 0) {
- if (srv_thread_sleep_delay > 20
- && n_sleeps == 1) {
-
- --srv_thread_sleep_delay;
- }
-
- if (srv_conc.n_waiting == 0) {
- srv_thread_sleep_delay >>= 1;
- }
- }
-
- return;
- }
-
- /* Since there were no free seats, we relinquish
- the overbooked ticket. */
-
- srv_conc.n_active--;
- }
-
- if (!notified_mysql) {
- srv_conc.n_waiting++;
-
- thd_wait_begin(trx->mysql_thd, THD_WAIT_USER_LOCK);
-
- notified_mysql = TRUE;
- }
-
- DEBUG_SYNC_C("user_thread_waiting");
- trx->op_info = "sleeping before entering InnoDB";
-
- sleep_in_us = srv_thread_sleep_delay;
-
- /* Guard against overflow when adaptive sleep delay is on. */
-
- if (srv_adaptive_max_sleep_delay > 0
- && sleep_in_us > srv_adaptive_max_sleep_delay) {
-
- sleep_in_us = srv_adaptive_max_sleep_delay;
- srv_thread_sleep_delay = static_cast<ulong>(sleep_in_us);
- }
-
- os_thread_sleep(sleep_in_us);
-
- trx->op_info = "";
-
- ++n_sleeps;
-
- if (srv_adaptive_max_sleep_delay > 0 && n_sleeps > 1) {
- ++srv_thread_sleep_delay;
- }
- }
-}
-
-/*********************************************************************//**
-Note that a user thread is leaving InnoDB code. */
-static
-void
-srv_conc_exit_innodb_with_atomics(
-/*==============================*/
- trx_t* trx) /*!< in/out: transaction */
-{
- trx->n_tickets_to_enter_innodb = 0;
- trx->declared_to_be_inside_innodb = FALSE;
-
- srv_conc.n_active--;
-}
-
-/*********************************************************************//**
-Puts an OS thread to wait if there are too many concurrent threads
-(>= srv_thread_concurrency) inside InnoDB. The threads wait in a FIFO queue.
-@param[in,out] prebuilt row prebuilt handler */
-void
-srv_conc_enter_innodb(
- row_prebuilt_t* prebuilt)
-{
- trx_t* trx = prebuilt->trx;
-
- ut_ad(!sync_check_iterate(sync_check()));
-
- srv_conc_enter_innodb_with_atomics(trx);
-}
-
-/*********************************************************************//**
-This lets a thread enter InnoDB regardless of the number of threads inside
-InnoDB. This must be called when a thread ends a lock wait. */
-void
-srv_conc_force_enter_innodb(
-/*========================*/
- trx_t* trx) /*!< in: transaction object associated with the
- thread */
-{
- ut_ad(!sync_check_iterate(sync_check()));
-
- if (!srv_thread_concurrency) {
-
- return;
- }
-
- srv_conc.n_active++;
-
- trx->n_tickets_to_enter_innodb = 1;
- trx->declared_to_be_inside_innodb = TRUE;
-}
-
-/*********************************************************************//**
-This must be called when a thread exits InnoDB in a lock wait or at the
-end of an SQL statement. */
-void
-srv_conc_force_exit_innodb(
-/*=======================*/
- trx_t* trx) /*!< in: transaction object associated with the
- thread */
-{
- if ((trx->mysql_thd != NULL
- && thd_is_replication_slave_thread(trx->mysql_thd))
- || trx->declared_to_be_inside_innodb == FALSE) {
-
- return;
- }
-
- srv_conc_exit_innodb_with_atomics(trx);
-
- ut_ad(!sync_check_iterate(sync_check()));
-}
-
-/*********************************************************************//**
-Get the count of threads waiting inside InnoDB. */
-ulint
-srv_conc_get_waiting_threads(void)
-/*==============================*/
-{
- return(srv_conc.n_waiting);
-}
-
-/*********************************************************************//**
-Get the count of threads active inside InnoDB. */
-ulint
-srv_conc_get_active_threads(void)
-/*==============================*/
-{
- return(srv_conc.n_active);
-}
-
-#ifdef WITH_WSREP
-UNIV_INTERN
-void
-wsrep_srv_conc_cancel_wait(
-/*=======================*/
- trx_t* trx) /*!< in: transaction object associated with the
- thread */
-{
-#ifdef HAVE_ATOMIC_BUILTINS
- /* aborting transactions will enter innodb by force in
- srv_conc_enter_innodb_with_atomics(). No need to cancel here,
- thr will wake up after os_sleep and let to enter innodb
- */
- if (UNIV_UNLIKELY(wsrep_debug)) {
- ib::info() << "WSREP: conc slot cancel, no atomics";
- }
-#else
- // JAN: TODO: MySQL 5.7
- //os_fast_mutex_lock(&srv_conc_mutex);
- if (trx->wsrep_event) {
- if (UNIV_UNLIKELY(wsrep_debug)) {
- ib::info() << "WSREP: conc slot cancel";
- }
- os_event_set(trx->wsrep_event);
- }
- //os_fast_mutex_unlock(&srv_conc_mutex);
-#endif
-}
-#endif /* WITH_WSREP */
-
diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc
index 09cdf6fe0c1..aa8a5ea2d14 100644
--- a/storage/innobase/srv/srv0srv.cc
+++ b/storage/innobase/srv/srv0srv.cc
@@ -348,9 +348,6 @@ number of pages to use in LRU and flush_list batch flushing.
The rest of the doublewrite buffer is used for single-page flushing. */
ulong srv_doublewrite_batch_size = 120;
-/** innodb_replication_delay */
-ulong srv_replication_delay;
-
/** innodb_sync_spin_loops */
ulong srv_n_spin_wait_rounds;
/** innodb_spin_wait_delay */
@@ -1006,12 +1003,6 @@ srv_printf_innodb_monitor(
fputs("--------------\n"
"ROW OPERATIONS\n"
"--------------\n", file);
- fprintf(file,
- ULINTPF " queries inside InnoDB, "
- ULINTPF " queries in queue\n",
- srv_conc_get_active_threads(),
- srv_conc_get_waiting_threads());
-
fprintf(file, ULINTPF " read views open inside InnoDB\n",
trx_sys.view_count());
diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc
index 60fc333c4ba..85fc90a8e0c 100644
--- a/storage/innobase/srv/srv0start.cc
+++ b/storage/innobase/srv/srv0start.cc
@@ -101,6 +101,10 @@ Created 2/16/1996 Heikki Tuuri
#include "zlib.h"
#include "ut0crc32.h"
+/** We are prepared for a situation that we have this many threads waiting for
+a semaphore inside InnoDB. srv_start() sets the value. */
+ulint srv_max_n_threads;
+
/** Log sequence number at shutdown */
lsn_t srv_shutdown_lsn;
@@ -1196,9 +1200,7 @@ dberr_t srv_start(bool create_new_db)
static_cast<int>(UT_ARR_SIZE(srv_stages)));
/* Set the maximum number of threads which can wait for a semaphore
- inside InnoDB: this is the 'sync wait array' size, as well as the
- maximum number of threads that can wait in the 'srv_conc array' for
- their time to enter InnoDB. */
+ inside InnoDB: this is the 'sync wait array' size */
srv_max_n_threads = 1 /* io_ibuf_thread */
+ 1 /* io_log_thread */
@@ -2096,12 +2098,6 @@ void innodb_shutdown()
case SRV_OPERATION_NORMAL:
/* Shut down the persistent files. */
logs_empty_and_mark_files_at_shutdown();
-
- if (ulint n_threads = srv_conc_get_active_threads()) {
- ib::warn() << "Query counter shows "
- << n_threads << " queries still"
- " inside InnoDB at shutdown";
- }
}
os_aio_free();
diff --git a/storage/innobase/trx/trx0i_s.cc b/storage/innobase/trx/trx0i_s.cc
index 8e46057f654..2736dbd285f 100644
--- a/storage/innobase/trx/trx0i_s.cc
+++ b/storage/innobase/trx/trx0i_s.cc
@@ -499,8 +499,6 @@ thd_done:
row->trx_rows_modified = trx->undo_no;
- row->trx_concurrency_tickets = trx->n_tickets_to_enter_innodb;
-
row->trx_isolation_level = trx->isolation_level;
row->trx_unique_checks = (ibool) trx->check_unique_secondary;
diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc
index ac9fc7d22c2..a9ba8cd7786 100644
--- a/storage/innobase/trx/trx0trx.cc
+++ b/storage/innobase/trx/trx0trx.cc
@@ -377,10 +377,6 @@ trx_t *trx_create()
ut_ad(trx->lock.rec_cached == 0);
ut_ad(UT_LIST_GET_LEN(trx->lock.evicted_tables) == 0);
-#ifdef WITH_WSREP
- trx->wsrep_event= NULL;
-#endif /* WITH_WSREP */
-
trx_sys.register_trx(trx);
return(trx);
@@ -392,25 +388,11 @@ trx_t *trx_create()
*/
void trx_free(trx_t*& trx)
{
- ut_ad(!trx->declared_to_be_inside_innodb);
ut_ad(!trx->n_mysql_tables_in_use);
ut_ad(!trx->mysql_n_tables_locked);
ut_ad(!trx->internal);
ut_ad(!trx->mysql_log_file_name);
- if (UNIV_UNLIKELY(trx->declared_to_be_inside_innodb)) {
- ib::error() << "Freeing a trx ("
- << trx_get_id_for_print(trx) << ") which is declared"
- " to be processing inside InnoDB";
-
- trx_print(stderr, trx, 600);
- putc('\n', stderr);
-
- /* This is an error but not a fatal error. We must keep
- the counters like srv_conc.n_active accurate. */
- srv_conc_force_exit_innodb(trx);
- }
-
if (trx->n_mysql_tables_in_use != 0
|| trx->mysql_n_tables_locked != 0) {
@@ -1824,11 +1806,6 @@ state_ok:
fputs(" recovered trx", f);
}
- if (trx->declared_to_be_inside_innodb) {
- fprintf(f, ", thread declared inside InnoDB %lu",
- (ulong) trx->n_tickets_to_enter_innodb);
- }
-
putc('\n', f);
if (trx->n_mysql_tables_in_use > 0 || trx->mysql_n_tables_locked > 0) {