mirror of
https://github.com/MariaDB/server.git
synced 2025-01-25 00:04:33 +01:00
53d44ad18b
- If one specifies --force twice to myisamchk and aria_chk, then we will try to finnish the repair even if sort_buffer would be too small. This was done by dynamically allocate buffer handler objects as long as memory lasts. - New option for myisamchk and aria_chk: create-missing-keys - Changed default size of myisam_sort_buffer_size from 8M to 128M. - Changed default size of sort_buffer_size in aria_chk from 128M to 256M. - Increased information in error message about 'sort_buffer_size' beeing to small. - Print also to 'show warnings' if repair was retried. - Increased size of internal sort-buffer-readers from 16K to 128K - Changed printing of 'number of records' to use %ll instead of casting to long - Changed buffer sizes for myisam and aria to use MY_ALIGN_DOWN() to get same number of bytes allocated on different machines. include/my_global.h: Added MY_ALIGN_DOWN() to get previous alignment (for big memory areas) include/myisam.h: Increased size of types to be able to handle more records include/myisamchk.h: Increased size of types to be able to handle more records Added T_FORCE_SORT_MEMORY to force repair to work even if sort_buffer would not be big enough mysql-test/r/myisam.result: Updated result mysql-test/r/mysqld--help.result: Updated result mysql-test/r/repair.result: Updated result mysql-test/suite/maria/maria.result: Added test cases for some fixed bugs in MyISAM to verify that Aria doesn't have them too. mysql-test/suite/maria/maria.test: Added test cases for some fixed bugs in MyISAM to verify that Aria doesn't have them too. mysql-test/suite/maria/maria3.result: Updated result after sort buffer size increase mysql-test/suite/sys_vars/r/aria_sort_buffer_size_basic.result: Updated result after sort buffer size increase mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic.result: Updated result after sort buffer size increase mysql-test/suite/sys_vars/t/myisam_sort_buffer_size_basic.test: Updated result after sort buffer size increase mysql-test/t/myisam.test: Fixed error messages to not print system specific data mysql-test/t/repair.test: Fixed error messages to not print system specific data storage/maria/ha_maria.cc: Print also to 'show warnings' if repair was retried Changed default size of sort_buffer_size from 128M to 256M (same as in mysqld) storage/maria/ma_check.c: Renamed USE_BUFFER_INIT -> PAGE_BUFFER_INIT storage/maria/ma_sort.c: Increased size of internal sort-buffer-readers from 16K to 128K Increased size of types to be able to handle more records Added support for T_FORCE_SORT_MEMORY Don't allocate too many extra BUFFPEK at a time (they are probably not needed) Improved error message for "sort_buffer_size is too small" Changed printing of 'number of records' to use %ll instead of casting to long Fixed bug where maria_update_key_parts() was called too early. Fixed bug in detecting result from read_to_buffer(). Added 'out of memory' checking when calling 'alloc_dynamic()'. storage/maria/maria_chk.c: Added --create-missing-keys If one specifies --force twice then we will try to finnish the repair even if sort_buffer would be too small. check_param.sort_buffer_length varialble was used with wrong type. storage/maria/maria_def.h: Increased size of types to be able to handle more records Use MY_ALIGN_DOWN() to get same number of bytes allocated on different machines Renamed USE_BUFFER_INIT -> PAGE_BUFFER_INIT storage/maria/maria_ftdump.c: Renamed USE_BUFFER_INIT -> PAGE_BUFFER_INIT storage/maria/maria_read_log.c: Use PAGE_BUFFER_INIT for page cache storage/myisam/ha_myisam.cc: Changed default size of myisam_sort_buffer_size from 8M to 128M storage/myisam/mi_check.c: Renamed USE_BUFFER_INIT -> KEY_BUFFER_INIT storage/myisam/myisam_ftdump.c: Renamed USE_BUFFER_INIT -> KEY_BUFFER_INIT storage/myisam/myisamchk.c: Added --create-missing-keys If one specifies --force twice then we will try to finnish the repair even if sort_buffer would be too small. check_param.sort_buffer_length varialble was used with wrong type. Renamed USE_BUFFER_INIT -> KEY_BUFFER_INIT storage/myisam/myisamdef.h: Increased SORT_BUFFER_INIT to 64M (speeds up repair a lot and most machines have nowadays a lot of memory) Use MY_ALIGN_DOWN() to get same number of bytes allocated on different machines Renamed USE_BUFFER_INIT -> KEY_BUFFER_INIT storage/myisam/sort.c: Increased size of internal sort-buffer-readers from 16K to 128K Increased size of types to be able to handle more records Added support for T_FORCE_SORT_MEMORY Don't allocate too many extra BUFFPEK at a time (they are probably not needed) Improved error message for "sort_buffer_size is too small" Changed printing of 'number of records' to use %ll instead of casting to long Fixed bug in detecting result from read_to_buffer(). Added 'out of memory' checking when calling 'alloc_dynamic()'.
192 lines
5.6 KiB
Text
192 lines
5.6 KiB
Text
#
|
|
# Test of repair table
|
|
#
|
|
|
|
--disable_warnings
|
|
drop table if exists t1;
|
|
--enable_warnings
|
|
|
|
create table t1 SELECT 1,"table 1";
|
|
repair table t1 use_frm;
|
|
alter table t1 ENGINE=HEAP;
|
|
repair table t1 use_frm;
|
|
drop table t1;
|
|
|
|
#
|
|
# disabled keys during repair
|
|
#
|
|
create table t1(id int PRIMARY KEY, st varchar(10), KEY st_key(st));
|
|
insert into t1 values(1, "One");
|
|
alter table t1 disable keys;
|
|
show keys from t1;
|
|
repair table t1 extended;
|
|
show keys from t1;
|
|
drop table t1;
|
|
|
|
|
|
# non-existent table
|
|
repair table t1 use_frm;
|
|
|
|
create table t1 engine=myisam SELECT 1,"table 1";
|
|
flush tables;
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
system echo 1 > $MYSQLD_DATADIR/test/t1.MYI ;
|
|
repair table t1;
|
|
repair table t1 use_frm;
|
|
drop table t1;
|
|
|
|
#
|
|
# BUG#18874 - Setting myisam_repair_threads > 1, index cardinality always 1
|
|
#
|
|
CREATE TABLE t1(a INT, KEY(a));
|
|
INSERT INTO t1 VALUES(1),(2),(3),(4),(5);
|
|
SET myisam_repair_threads=2;
|
|
REPAIR TABLE t1;
|
|
SHOW INDEX FROM t1;
|
|
SET myisam_repair_threads=@@global.myisam_repair_threads;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# BUG#22562 - REPAIR TABLE .. USE_FRM causes server crash on Windows and
|
|
# server hangs on Linux
|
|
#
|
|
CREATE TABLE t1(a INT);
|
|
USE mysql;
|
|
REPAIR TABLE test.t1 USE_FRM;
|
|
USE test;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# BUG#23175 - MYISAM crash/repair failed during repair
|
|
#
|
|
CREATE TABLE t1(a CHAR(255), KEY(a));
|
|
SET myisam_sort_buffer_size=4096;
|
|
--replace_regex /Current myisam_sort_buffer_size.*/X/
|
|
INSERT INTO t1 VALUES
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0');
|
|
SET myisam_repair_threads=2;
|
|
--replace_regex /Current myisam_sort_buffer_size.*/X/
|
|
REPAIR TABLE t1;
|
|
SET myisam_repair_threads=@@global.myisam_repair_threads;
|
|
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
|
DROP TABLE t1;
|
|
|
|
#
|
|
# BUG#31174 - "Repair" command on MyISAM crashes with small
|
|
# myisam_sort_buffer_size
|
|
#
|
|
CREATE TABLE t1(a CHAR(255), KEY(a));
|
|
SET myisam_sort_buffer_size=4496;
|
|
INSERT INTO t1 VALUES
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),('0'),
|
|
('0'),('0'),('0'),('0'),('0'),('0'),('0');
|
|
SET myisam_repair_threads=2;
|
|
REPAIR TABLE t1;
|
|
SET myisam_repair_threads=@@global.myisam_repair_threads;
|
|
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
|
DROP TABLE t1;
|
|
|
|
--echo End of 4.1 tests
|
|
|
|
#
|
|
# BUG#36055 - mysql_upgrade doesn't really 'upgrade' tables
|
|
#
|
|
|
|
--echo # Test with a saved table from 4.1
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
--copy_file std_data/bug36055.frm $MYSQLD_DATADIR/test/t1.frm
|
|
--copy_file std_data/bug36055.MYD $MYSQLD_DATADIR/test/t1.MYD
|
|
--copy_file std_data/bug36055.MYI $MYSQLD_DATADIR/test/t1.MYI
|
|
|
|
--replace_column 12 # 13 #
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
SELECT * FROM t1;
|
|
|
|
--echo # Run CHECK TABLE, it should indicate table need a REPAIR TABLE
|
|
CHECK TABLE t1 FOR UPGRADE;
|
|
|
|
--echo # REPAIR old table USE_FRM should fail
|
|
REPAIR TABLE t1 USE_FRM;
|
|
|
|
--echo # Run REPAIR TABLE to upgrade .frm file
|
|
REPAIR TABLE t1;
|
|
--replace_column 12 # 13 #
|
|
SHOW TABLE STATUS LIKE 't1';
|
|
SELECT * FROM t1;
|
|
|
|
REPAIR TABLE t1 USE_FRM;
|
|
SELECT * FROM t1;
|
|
|
|
DROP TABLE t1;
|
|
# End of 5.0 tests
|
|
|
|
#
|
|
# Bug#18775 - Temporary table from alter table visible to other threads
|
|
#
|
|
# REPAIR TABLE ... USE_FRM on temporary table crashed the table or server.
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS tt1;
|
|
--enable_warnings
|
|
CREATE TEMPORARY TABLE tt1 (c1 INT);
|
|
REPAIR TABLE tt1 USE_FRM;
|
|
DROP TABLE tt1;
|
|
|
|
|
|
--echo #
|
|
--echo # Bug #48248 assert in MDL_ticket::upgrade_shared_lock_to_exclusive
|
|
--echo #
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE t1(a INT);
|
|
LOCK TABLES t1 READ;
|
|
REPAIR TABLE t1;
|
|
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # Test for bug #50784 "MDL: Assertion `m_tickets.is_empty() ||
|
|
--echo # m_tickets.front() == m_trans_sentinel'"
|
|
--echo #
|
|
--disable_warnings
|
|
drop tables if exists t1, t2;
|
|
--enable_warnings
|
|
create table t1 (i int);
|
|
create table t2 (j int);
|
|
set @@autocommit= 0;
|
|
repair table t1, t2;
|
|
set @@autocommit= default;
|
|
drop tables t1, t2;
|