mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fixed bug mdev-518.
If some statistical tables are corrupted the server should use the conventional statistical data.
This commit is contained in:
@ -364,4 +364,20 @@ ANALYZE TABLE t1;
|
|||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 analyze status OK
|
test.t1 analyze status OK
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug mdev-518: corrupted/missing statistical tables
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (i int) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
SET use_stat_tables='never';
|
||||||
|
EXPLAIN SELECT * FROM t1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||||
|
FLUSH TABLES;
|
||||||
|
SET use_stat_tables='preferably';
|
||||||
|
EXPLAIN SELECT * FROM t1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||||
|
DROP TABLE t1;
|
||||||
set use_stat_tables=@save_use_stat_tables;
|
set use_stat_tables=@save_use_stat_tables;
|
||||||
|
@ -391,6 +391,22 @@ ANALYZE TABLE t1;
|
|||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 analyze status OK
|
test.t1 analyze status OK
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug mdev-518: corrupted/missing statistical tables
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (i int) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
SET use_stat_tables='never';
|
||||||
|
EXPLAIN SELECT * FROM t1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||||
|
FLUSH TABLES;
|
||||||
|
SET use_stat_tables='preferably';
|
||||||
|
EXPLAIN SELECT * FROM t1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2
|
||||||
|
DROP TABLE t1;
|
||||||
set use_stat_tables=@save_use_stat_tables;
|
set use_stat_tables=@save_use_stat_tables;
|
||||||
set optimizer_switch=@save_optimizer_switch_for_stat_tables_test;
|
set optimizer_switch=@save_optimizer_switch_for_stat_tables_test;
|
||||||
SET SESSION STORAGE_ENGINE=DEFAULT;
|
SET SESSION STORAGE_ENGINE=DEFAULT;
|
||||||
|
@ -180,4 +180,28 @@ ANALYZE TABLE t1;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug mdev-518: corrupted/missing statistical tables
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (i int) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
SET use_stat_tables='never';
|
||||||
|
EXPLAIN SELECT * FROM t1;
|
||||||
|
|
||||||
|
--move_file $MYSQLTEST_VARDIR/mysqld.1/data/mysql/table_stat.MYD $MYSQLTEST_VARDIR/mysqld.1/data/mysql/table_stat.MYD.save
|
||||||
|
|
||||||
|
FLUSH TABLES;
|
||||||
|
SET use_stat_tables='preferably';
|
||||||
|
--disable_warnings
|
||||||
|
EXPLAIN SELECT * FROM t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
--move_file $MYSQLTEST_VARDIR/mysqld.1/data/mysql/table_stat.MYD.save $MYSQLTEST_VARDIR/mysqld.1/data/mysql/table_stat.MYD
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
set use_stat_tables=@save_use_stat_tables;
|
set use_stat_tables=@save_use_stat_tables;
|
||||||
|
|
||||||
|
@ -2908,15 +2908,17 @@ void set_statistics_for_table(THD *thd, TABLE *table)
|
|||||||
{
|
{
|
||||||
uint use_stat_table_mode= thd->variables.use_stat_tables;
|
uint use_stat_table_mode= thd->variables.use_stat_tables;
|
||||||
table->used_stat_records=
|
table->used_stat_records=
|
||||||
(use_stat_table_mode <= 1 || !table->s->read_stats ||
|
(use_stat_table_mode <= 1 ||
|
||||||
table->s->read_stats->cardinality_is_null) ?
|
!table->s->stats_is_read || !table->s->read_stats ||
|
||||||
|
table->s->read_stats->cardinality_is_null) ?
|
||||||
table->file->stats.records : table->s->read_stats->cardinality;
|
table->file->stats.records : table->s->read_stats->cardinality;
|
||||||
KEY *key_info, *key_info_end;
|
KEY *key_info, *key_info_end;
|
||||||
for (key_info= table->key_info, key_info_end= key_info+table->s->keys;
|
for (key_info= table->key_info, key_info_end= key_info+table->s->keys;
|
||||||
key_info < key_info_end; key_info++)
|
key_info < key_info_end; key_info++)
|
||||||
{
|
{
|
||||||
key_info->is_statistics_from_stat_tables=
|
key_info->is_statistics_from_stat_tables=
|
||||||
(use_stat_table_mode > 1 && key_info->read_stats &&
|
(use_stat_table_mode > 1 && table->s->stats_is_read &&
|
||||||
|
key_info->read_stats &&
|
||||||
key_info->read_stats->avg_frequency_is_inited() &&
|
key_info->read_stats->avg_frequency_is_inited() &&
|
||||||
key_info->read_stats->get_avg_frequency(0) > 0.5);
|
key_info->read_stats->get_avg_frequency(0) > 0.5);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user