From f0ed73d874d92bd6e21333bcba4b1097db069213 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 13 Oct 2004 22:54:21 +0300 Subject: [PATCH] Added startup option and settable session variable innodb_table_locks_old_behavior: do not acquire an InnoDB table lock for LOCK TABLES, as in mysql-4.0.18 and earlier. sql/ha_innodb.cc: Do not acquire an InnoDB table lock for LOCK TABLES if innodb_table_locks_old_behavior is enabled. sql/mysqld.cc: Added innodb_table_locks_old_behavior sql/set_var.cc: Added innodb_table_locks_old_behavior sql/sql_class.h: Added innodb_table_locks_old_behavior --- sql/ha_innodb.cc | 3 ++- sql/mysqld.cc | 7 ++++++- sql/set_var.cc | 4 ++++ sql/sql_class.h | 3 +++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index fa9537b3217..44d050d14aa 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -4693,7 +4693,8 @@ ha_innobase::external_lock( } if (prebuilt->select_lock_type != LOCK_NONE) { - if (thd->in_lock_tables) { + if (thd->in_lock_tables && + !thd->variables.innodb_table_locks_old_behavior) { ulint error; error = row_lock_table_for_mysql(prebuilt); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 89d71ecbfa2..8b478882451 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3526,6 +3526,7 @@ enum options_mysqld { OPT_INNODB_FORCE_RECOVERY, OPT_INNODB_STATUS_FILE, OPT_INNODB_MAX_DIRTY_PAGES_PCT, + OPT_INNODB_TABLE_LOCKS_OLD_BEHAVIOR, OPT_BDB_CACHE_SIZE, OPT_BDB_LOG_BUFFER_SIZE, OPT_BDB_MAX_LOCK, @@ -3699,7 +3700,11 @@ struct my_option my_long_options[] = {"innodb_max_dirty_pages_pct", OPT_INNODB_MAX_DIRTY_PAGES_PCT, "Percentage of dirty pages allowed in bufferpool", (gptr*) &srv_max_buf_pool_modified_pct, (gptr*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0}, - + {"innodb_table_locks_old_behavior", OPT_INNODB_TABLE_LOCKS_OLD_BEHAVIOR, + "Disable InnoDB locking in LOCK TABLES", + (gptr*) &global_system_variables.innodb_table_locks_old_behavior, + (gptr*) &global_system_variables.innodb_table_locks_old_behavior, + 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, #endif /* End HAVE_INNOBASE_DB */ {"help", '?', "Display this help and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, diff --git a/sql/set_var.cc b/sql/set_var.cc index 4b66a621f62..9b2db7a0802 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -263,6 +263,8 @@ sys_var_thd_ulong sys_net_wait_timeout("wait_timeout", #ifdef HAVE_INNOBASE_DB sys_var_long_ptr sys_innodb_max_dirty_pages_pct("innodb_max_dirty_pages_pct", &srv_max_buf_pool_modified_pct); +sys_var_thd_bool sys_innodb_table_locks_old_behavior("innodb_table_locks_old_behavior", + &SV::innodb_table_locks_old_behavior); #endif @@ -449,6 +451,7 @@ sys_var *sys_variables[]= &sys_os, #ifdef HAVE_INNOBASE_DB &sys_innodb_max_dirty_pages_pct, + &sys_innodb_table_locks_old_behavior, #endif &sys_unique_checks }; @@ -520,6 +523,7 @@ struct show_var_st init_vars[]= { {"innodb_log_group_home_dir", (char*) &innobase_log_group_home_dir, SHOW_CHAR_PTR}, {"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG}, {sys_innodb_max_dirty_pages_pct.name, (char*) &sys_innodb_max_dirty_pages_pct, SHOW_SYS}, + {sys_innodb_table_locks_old_behavior.name, (char*) &sys_innodb_table_locks_old_behavior, SHOW_SYS}, #endif {sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS}, {sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS}, diff --git a/sql/sql_class.h b/sql/sql_class.h index af53574eeaf..8c383d5848d 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -338,6 +338,9 @@ struct system_variables my_bool low_priority_updates; my_bool new_mode; my_bool query_cache_wlock_invalidate; +#ifdef HAVE_INNOBASE_DB + my_bool innodb_table_locks_old_behavior; +#endif /* HAVE_INNOBASE_DB */ CONVERT *convert_set; };