diff options
Diffstat (limited to 'storage')
-rw-r--r-- | storage/innobase/CMakeLists.txt | 2 | ||||
-rw-r--r-- | storage/innobase/handler/ha_innodb.cc | 321 | ||||
-rw-r--r-- | storage/innobase/handler/i_s.cc | 3 | ||||
-rw-r--r-- | storage/innobase/include/ha_prototypes.h | 5 | ||||
-rw-r--r-- | storage/innobase/include/que0types.h | 1 | ||||
-rw-r--r-- | storage/innobase/include/srv0conc.h | 93 | ||||
-rw-r--r-- | storage/innobase/include/srv0srv.h | 27 | ||||
-rw-r--r-- | storage/innobase/include/srv0start.h | 4 | ||||
-rw-r--r-- | storage/innobase/include/trx0i_s.h | 5 | ||||
-rw-r--r-- | storage/innobase/include/trx0trx.h | 15 | ||||
-rw-r--r-- | storage/innobase/lock/lock0wait.cc | 18 | ||||
-rw-r--r-- | storage/innobase/log/log0log.cc | 2 | ||||
-rw-r--r-- | storage/innobase/srv/srv0conc.cc | 327 | ||||
-rw-r--r-- | storage/innobase/srv/srv0srv.cc | 9 | ||||
-rw-r--r-- | storage/innobase/srv/srv0start.cc | 14 | ||||
-rw-r--r-- | storage/innobase/trx/trx0i_s.cc | 2 | ||||
-rw-r--r-- | storage/innobase/trx/trx0trx.cc | 23 |
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) { |