=== modified file 'innobase/dict/dict0dict.c'
--- innobase/dict/dict0dict.c 2009-05-19 06:32:21 +0000
+++ innobase/dict/dict0dict.c 2009-12-25 15:01:15 +0000
@@ -754,12 +754,6 @@
mutex_exit(&(dict_sys->mutex));
- if (table != NULL) {
- if (!table->stat_initialized) {
- dict_update_statistics(table);
- }
- }
-
return(table);
}
@@ -789,12 +783,6 @@
mutex_exit(&(dict_sys->mutex));
- if (table != NULL) {
- if (!table->stat_initialized && !table->ibd_file_missing) {
- dict_update_statistics(table);
- }
- }
-
return(table);
}
=== modified file 'innobase/dict/dict0load.c'
--- innobase/dict/dict0load.c 2006-04-26 03:50:29 +0000
+++ innobase/dict/dict0load.c 2009-12-25 10:48:37 +0000
@@ -190,7 +190,7 @@
/* The table definition was corrupt if there
is no index */
- if (dict_table_get_first_index(table)) {
+ if (!table->stat_initialized || dict_table_get_first_index(table)) {
dict_update_statistics_low(table, TRUE);
}
=== modified file 'innobase/row/row0mysql.c'
--- innobase/row/row0mysql.c 2009-06-25 09:50:26 +0000
+++ innobase/row/row0mysql.c 2009-12-25 10:49:12 +0000
@@ -886,7 +886,7 @@
We calculate statistics at most every 16th round, since we may have
a counter table which is very small and updated very often. */
- if (counter > 2000000000
+ if (!table->stat_initialized || counter > 2000000000
|| ((ib_longlong)counter > 16 + table->stat_n_rows / 16)) {
dict_update_statistics(table);
=== modified file 'sql/ha_innodb.cc'
--- sql/ha_innodb.cc 2009-12-01 10:24:44 +0000
+++ sql/ha_innodb.cc 2009-12-25 15:09:00 +0000
@@ -2307,7 +2307,7 @@
/* Init table lock structure */
thr_lock_data_init(&share->lock,&lock,(void*) 0);
- info(HA_STATUS_NO_LOCK | HA_STATUS_VARIABLE | HA_STATUS_CONST);
+ // info(HA_STATUS_NO_LOCK | HA_STATUS_VARIABLE | HA_STATUS_CONST);
DBUG_RETURN(0);
}
@@ -3516,6 +3516,9 @@
int error = 0;
DBUG_ENTER("ha_innobase::update_row");
+
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
ut_ad(prebuilt->trx ==
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
@@ -3598,6 +3601,9 @@
int error = 0;
DBUG_ENTER("ha_innobase::delete_row");
+
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
ut_ad(prebuilt->trx ==
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
@@ -3829,6 +3835,9 @@
DBUG_ENTER("index_read");
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
+
ut_ad(prebuilt->trx ==
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
@@ -4192,6 +4201,9 @@
/* Store the active index value so that we can restore the original
value after a scan */
+
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
if (prebuilt->clust_index_was_generated) {
err = change_active_index(MAX_KEY);
@@ -4268,6 +4280,9 @@
statistic_increment(current_thd->status_var.ha_read_rnd_count,
&LOCK_status);
+
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
ut_ad(prebuilt->trx ==
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
@@ -4319,6 +4334,9 @@
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
uint len;
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
+
ut_ad(prebuilt->trx ==
(trx_t*) current_thd->ha_data[innobase_hton.slot]);
@@ -5188,6 +5206,9 @@
key = table->key_info + active_index;
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
+
index = dict_table_get_index_noninline(prebuilt->table, key->name);
range_start = dtuple_create_for_mysql(&heap1, key->key_parts);
@@ -5278,6 +5299,9 @@
trx_search_latch_release_if_reserved(prebuilt->trx);
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
+
index = dict_table_get_first_index_noninline(prebuilt->table);
local_data_file_length = ((ulonglong) index->stat_n_leaf_pages)
@@ -5312,7 +5336,10 @@
searches, we pretend that a sequential read takes the same time
as a random disk read, that is, we do not divide the following
by 10, which would be physically realistic. */
-
+
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
+
return((double) (prebuilt->table->stat_clustered_index_size));
}
@@ -5328,9 +5355,13 @@
uint ranges, /* in: how many ranges */
ha_rows rows) /* in: estimated number of rows in the ranges */
{
+ row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
ha_rows total_rows;
double time_for_scan;
+ if (!prebuilt->table->stat_initialized)
+ dict_update_statistics(prebuilt->table);
+
if (index != table->s->primary_key) {
/* Not clustered */
return(handler::read_time(index, ranges, rows));
@@ -5402,7 +5433,7 @@
trx_search_latch_release_if_reserved(prebuilt->trx);
- ib_table = prebuilt->table;
+ ib_table = prebuilt->table;
if (flag & HA_STATUS_TIME) {
/* In sql_show we call with this flag: update then statistics
@@ -5428,6 +5459,9 @@
}
}
+ if (!ib_table->stat_initialized)
+ dict_update_statistics(ib_table);
+
if (flag & HA_STATUS_VARIABLE) {
n_rows = ib_table->stat_n_rows;
flu:5.0-dict midom$