summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSatya B <satya.bn@sun.com>2009-04-24 16:33:50 +0530
committerSatya B <satya.bn@sun.com>2009-04-24 16:33:50 +0530
commit97ae03bf526a0cef7c76739b9a583a0f6209aa7f (patch)
treedcc3ceab089d019567ded08d48e0f0a3ec090c07 /sql
parent4783b2e196e4ed4c037194d74b99922e92deecd0 (diff)
downloadmariadb-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.h5
-rw-r--r--sql/mysqld.cc11
-rw-r--r--sql/set_var.cc6
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},