diff --git a/mysql-test/suite/innodb/r/import_update_stats.result b/mysql-test/suite/innodb/r/import_update_stats.result index a221721..cbee11f 100644 --- a/mysql-test/suite/innodb/r/import_update_stats.result +++ b/mysql-test/suite/innodb/r/import_update_stats.result @@ -67,3 +67,42 @@ t1 1 idx1 1 col_1 A 2 NULL NULL YES BTREE t1 1 idx2 1 col_2 A 2 NULL NULL YES BTREE DROP TABLE t1; SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; +# +# Statistics should be updated whenever a table is imported. +# +SET @old_innodb_file_per_table = @@GLOBAL.innodb_file_per_table; +SET GLOBAL innodb_file_per_table = 1; +SET @old_innodb_stats_persistent = @@GLOBAL.innodb_stats_persistent; +SET GLOBAL innodb_stats_persistent = 0; +CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, b INT) ENGINE=InnoDB; +INSERT INTO t1 VALUES (0,1); +INSERT INTO t1 SELECT 0,1 FROM t1; +INSERT INTO t1 SELECT 0,1 FROM t1; +INSERT INTO t1 SELECT 0,1 FROM t1; +INSERT INTO t1 SELECT 0,1 FROM t1; +SELECT COUNT(*) FROM t1; +COUNT(*) +16 +FLUSH TABLES t1 FOR EXPORT; +UNLOCK TABLES; +DROP TABLE t1; +CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, b INT) ENGINE=InnoDB; +ALTER TABLE t1 DISCARD TABLESPACE; +ALTER TABLE t1 IMPORT TABLESPACE; +SHOW INDEXES FROM t1; +Table t1 +Non_unique 0 +Key_name PRIMARY +Seq_in_index 1 +Column_name c1 +Collation A +Cardinality 16 +Sub_part NULL +Packed NULL +Null +Index_type BTREE +Comment +Index_comment +DROP TABLE t1; +SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; +SET GLOBAL innodb_stats_persistent = @old_innodb_stats_persistent; diff --git a/mysql-test/suite/innodb/t/import_update_stats.test b/mysql-test/suite/innodb/t/import_update_stats.test index e12e295..b2046c5 100644 --- a/mysql-test/suite/innodb/t/import_update_stats.test +++ b/mysql-test/suite/innodb/t/import_update_stats.test @@ -76,3 +76,49 @@ SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; --remove_files_wildcard $MYSQLTEST_VARDIR/tmp t1*.ibd --remove_files_wildcard $MYSQLTEST_VARDIR/tmp t1*.cfg + +--echo # +--echo # Statistics should be updated whenever a table is imported. +--echo # + +let $MYSQLD_TMPDIR = `SELECT @@tmpdir`; + +SET @old_innodb_file_per_table = @@GLOBAL.innodb_file_per_table; +SET GLOBAL innodb_file_per_table = 1; + +SET @old_innodb_stats_persistent = @@GLOBAL.innodb_stats_persistent; +SET GLOBAL innodb_stats_persistent = 0; + +CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, b INT) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (0,1); +INSERT INTO t1 SELECT 0,1 FROM t1; +INSERT INTO t1 SELECT 0,1 FROM t1; +INSERT INTO t1 SELECT 0,1 FROM t1; +INSERT INTO t1 SELECT 0,1 FROM t1; +SELECT COUNT(*) FROM t1; + +FLUSH TABLES t1 FOR EXPORT; + +--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_TMPDIR/t1.cfg +--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_TMPDIR/t1.ibd + +UNLOCK TABLES; +DROP TABLE t1; + +CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, b INT) ENGINE=InnoDB; + +ALTER TABLE t1 DISCARD TABLESPACE; + +--move_file $MYSQLD_TMPDIR/t1.cfg $MYSQLD_DATADIR/test/t1.cfg +--move_file $MYSQLD_TMPDIR/t1.ibd $MYSQLD_DATADIR/test/t1.ibd + +ALTER TABLE t1 IMPORT TABLESPACE; + +--vertical_results +SHOW INDEXES FROM t1; + +DROP TABLE t1; + +SET GLOBAL innodb_file_per_table = @old_innodb_file_per_table; +SET GLOBAL innodb_stats_persistent = @old_innodb_stats_persistent; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 68f99c8..e7af867 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -12167,35 +12167,17 @@ ha_innobase::discard_or_import_tablespace( if (err == DB_SUCCESS) { - info(HA_STATUS_TIME - | HA_STATUS_CONST - | HA_STATUS_VARIABLE - | HA_STATUS_AUTO); + info_low(HA_STATUS_TIME + | HA_STATUS_CONST + | HA_STATUS_VARIABLE + | HA_STATUS_AUTO, + true); } } /* Commit the transaction in order to release the table lock. */ trx_commit_for_mysql(m_prebuilt->trx); - if (err == DB_SUCCESS && !discard - && dict_stats_is_persistent_enabled(dict_table)) { - dberr_t ret; - - /* Adjust the persistent statistics. */ - ret = dict_stats_update(dict_table, - DICT_STATS_RECALC_PERSISTENT); - - if (ret != DB_SUCCESS) { - push_warning_printf( - ha_thd(), - Sql_condition::SL_WARNING, - ER_ALTER_INFO, - "Error updating stats for table '%s'" - " after table rebuild: %s", - dict_table->name.m_name, ut_strerr(ret)); - } - } - DBUG_RETURN(convert_error_code_to_mysql(err, dict_table->flags, NULL)); }