diff options
author | Satya B <satya.bn@sun.com> | 2009-04-24 16:33:50 +0530 |
---|---|---|
committer | Satya B <satya.bn@sun.com> | 2009-04-24 16:33:50 +0530 |
commit | 97ae03bf526a0cef7c76739b9a583a0f6209aa7f (patch) | |
tree | dcc3ceab089d019567ded08d48e0f0a3ec090c07 /sql | |
parent | 4783b2e196e4ed4c037194d74b99922e92deecd0 (diff) | |
download | mariadb-git-97ae03bf526a0cef7c76739b9a583a0f6209aa7f.tar.gz |
Fix for BUG#43660- SHOW INDEXES/ANALYZE does NOT update cardinality
for indexes of InnoDB table
Fixes by replacing the PRNG that is used to pick random pages with a
better one.
Also adds a configuration option "innodb_use_legacy_cardinality_algorithm"
to enable the fix only when the option is set.
This patch is from http://bugs.mysql.com/file.php?id=11789
Diffstat (limited to 'sql')
-rw-r--r-- | sql/ha_innodb.h | 5 | ||||
-rw-r--r-- | sql/mysqld.cc | 11 | ||||
-rw-r--r-- | sql/set_var.cc | 6 |
3 files changed, 21 insertions, 1 deletions
diff --git a/sql/ha_innodb.h b/sql/ha_innodb.h index 3db983901b3..e27fb89d014 100644 --- a/sql/ha_innodb.h +++ b/sql/ha_innodb.h @@ -234,6 +234,11 @@ extern ulong srv_thread_sleep_delay; extern ulong srv_thread_concurrency; extern ulong srv_commit_concurrency; extern ulong srv_flush_log_at_trx_commit; +/* An option to enable the fix for "Bug#43660 SHOW INDEXES/ANALYZE does +NOT update cardinality for indexes of InnoDB table". By default we are +running with the fix disabled because MySQL 5.1 is frozen for such +behavioral changes. */ +extern char srv_use_legacy_cardinality_algorithm; } bool innobase_init(void); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index ad3521e5dde..0583e3fa57f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5044,7 +5044,8 @@ enum options_mysqld OPT_SECURE_FILE_PRIV, OPT_KEEP_FILES_ON_CREATE, OPT_INNODB_ADAPTIVE_HASH_INDEX, - OPT_FEDERATED + OPT_FEDERATED, + OPT_INNODB_USE_LEGACY_CARDINALITY_ALGORITHM }; @@ -5351,6 +5352,14 @@ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite, (gptr*) &global_system_variables.innodb_table_locks, (gptr*) &global_system_variables.innodb_table_locks, 0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0}, + {"innodb_use_legacy_cardinality_algorithm", + OPT_INNODB_USE_LEGACY_CARDINALITY_ALGORITHM, + "Use legacy algorithm for picking random pages during index cardinality " + "estimation. Disable this to use a better algorithm, but note that your " + "query plans may change (enabled by default).", + (gptr*) &srv_use_legacy_cardinality_algorithm, + (gptr*) &srv_use_legacy_cardinality_algorithm, + 0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0}, #endif /* End HAVE_INNOBASE_DB */ {"isam", OPT_ISAM, "Obsolete. ISAM storage engine is no longer supported.", (gptr*) &opt_isam, (gptr*) &opt_isam, 0, GET_BOOL, NO_ARG, 0, 0, 0, diff --git a/sql/set_var.cc b/sql/set_var.cc index 735bb5279bd..14ec2e57aab 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -450,6 +450,9 @@ sys_var_thd_bool sys_innodb_table_locks("innodb_table_locks", &SV::innodb_table_locks); sys_var_thd_bool sys_innodb_support_xa("innodb_support_xa", &SV::innodb_support_xa); +sys_var_bool_ptr sys_innodb_use_legacy_cardinality_algorithm( + "innodb_use_legacy_cardinality_algorithm", + &srv_use_legacy_cardinality_algorithm); sys_var_long_ptr sys_innodb_autoextend_increment("innodb_autoextend_increment", &srv_auto_extend_increment); sys_var_long_ptr sys_innodb_sync_spin_loops("innodb_sync_spin_loops", @@ -804,6 +807,7 @@ sys_var *sys_variables[]= &sys_innodb_max_purge_lag, &sys_innodb_table_locks, &sys_innodb_support_xa, + &sys_innodb_use_legacy_cardinality_algorithm, &sys_innodb_autoextend_increment, &sys_innodb_sync_spin_loops, &sys_innodb_concurrency_tickets, @@ -946,6 +950,8 @@ struct show_var_st init_vars[]= { {sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS}, {sys_innodb_thread_concurrency.name, (char*) &sys_innodb_thread_concurrency, SHOW_SYS}, {sys_innodb_thread_sleep_delay.name, (char*) &sys_innodb_thread_sleep_delay, SHOW_SYS}, + {sys_innodb_use_legacy_cardinality_algorithm.name, + (char*) &sys_innodb_use_legacy_cardinality_algorithm, 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}, |