2003-07-06 18:09:57 +02:00
#
2010-05-26 18:33:40 +02:00
# Test of multiple key caches, simple and segmented
2003-07-06 18:09:57 +02:00
#
2003-11-18 12:47:27 +01:00
--disable_warnings
drop table if exists t1, t2, t3;
--enable_warnings
2003-07-06 18:09:57 +02:00
2010-02-16 17:41:11 +01:00
SET @save_key_buffer_size=@@key_buffer_size;
SET @save_key_cache_block_size=@@key_cache_block_size;
2010-05-26 18:33:40 +02:00
SET @save_key_cache_segments=@@key_cache_segments;
2014-07-19 16:46:08 +02:00
SET @save_key_cache_file_hash_size=@@key_cache_file_hash_size;
2003-07-06 18:09:57 +02:00
SELECT @@key_buffer_size, @@small.key_buffer_size;
# Change default key cache size
SET @@global.key_buffer_size=16*1024*1024;
SET @@global.default.key_buffer_size=16*1024*1024;
SET @@global.default.key_buffer_size=16*1024*1024;
SET @@global.small.key_buffer_size=1*1024*1024;
SET @@global.medium.key_buffer_size=4*1024*1024;
# Drop buffer
SET @@global.medium.key_buffer_size=0;
# Test double drop
SET @@global.medium.key_buffer_size=0;
# Print key buffer with different syntaxes
SHOW VARIABLES like "key_buffer_size";
SELECT @@key_buffer_size;
SELECT @@global.key_buffer_size;
SELECT @@global.default.key_buffer_size;
SELECT @@global.default.`key_buffer_size`;
SELECT @@global.`default`.`key_buffer_size`;
SELECT @@`default`.key_buffer_size;
SELECT @@small.key_buffer_size;
SELECT @@medium.key_buffer_size;
2010-02-16 17:41:11 +01:00
SET @@global.key_buffer_size=@save_key_buffer_size;
2003-07-06 18:09:57 +02:00
#
# Errors
#
--error 1064
SELECT @@default.key_buffer_size;
After merge fixes
Added more DBUG statements
Ensure that we are comparing end space with BINARY strings
Use 'any_db' instead of '' to mean any database. (For HANDLER command)
Only strip ' ' when comparing CHAR, not other space-like characters (like \t)
BitKeeper/deleted/.del-ctype_tis620.result-old~3578ceb0b8284685:
Delete: mysql-test/r/ctype_tis620.result-old
BitKeeper/deleted/.del-ctype_tis620.test-old~ffb1bbd2935d1aba:
Delete: mysql-test/t/ctype_tis620.test-old
client/mysqlbinlog.cc:
Added DBUG statements
Added call of my_end() to free all used memory on exit
heap/hp_info.c:
After merge fixes
heap/hp_open.c:
After merge fixes
include/heap.h:
After merge fixes
include/m_ctype.h:
Use pchar instead of 'int' for character parameters.
Added 'my_binary_compare()'
include/m_string.h:
Fixed wrong define
innobase/ibuf/ibuf0ibuf.c:
After merge fixes
innobase/srv/srv0start.c:
After merge fixes
mysql-test/r/alter_table.result:
Fixed results after merge
mysql-test/r/auto_increment.result:
Fixed results after merge
mysql-test/r/bdb.result:
Fixed results after merge
mysql-test/r/binary.result:
Fixed results after merge
mysql-test/r/create.result:
Fixed results after merge
mysql-test/r/ctype_mb.result:
Fixed results after merge
mysql-test/r/ctype_tis620.result:
Fixed results after merge
mysql-test/r/ctype_utf8.result:
Fixed results after merge
mysql-test/r/delete.result:
Fixed results after merge
mysql-test/r/func_compress.result:
Fixed results after merge
mysql-test/r/func_gconcat.result:
Fixed results after merge
mysql-test/r/func_group.result:
Fixed results after merge
mysql-test/r/func_str.result:
Fixed results after merge
mysql-test/r/innodb.result:
Fixed results after merge
mysql-test/r/insert.result:
Fixed results after merge
mysql-test/r/insert_select.result:
Fixed results after merge
mysql-test/r/key.result:
Fixed results after merge
mysql-test/r/loaddata.result:
Fixed results after merge
mysql-test/r/lock.result:
Fixed results after merge
mysql-test/r/myisam.result:
Fixed results after merge
mysql-test/r/null.result:
Fixed results after merge
mysql-test/r/null_key.result:
Fixed results after merge
mysql-test/r/order_by.result:
Fixed results after merge
mysql-test/r/query_cache.result:
Fixed results after merge
mysql-test/r/range.result:
Fixed results after merge
mysql-test/r/rpl_multi_delete.result:
Fixed results after merge
mysql-test/r/rpl_until.result:
Fixed results after merge
mysql-test/r/subselect.result:
Fixed results after merge
mysql-test/r/subselect_innodb.result:
Fixed results after merge
mysql-test/r/type_blob.result:
Fixed results after merge
mysql-test/r/type_datetime.result:
Fixed results after merge
mysql-test/r/type_decimal.result:
Fixed results after merge
mysql-test/r/type_enum.result:
Fixed results after merge
mysql-test/r/type_float.result:
Fixed results after merge
mysql-test/r/type_ranges.result:
Fixed results after merge
mysql-test/r/type_time.result:
Fixed results after merge
mysql-test/r/type_timestamp.result:
Fixed results after merge
mysql-test/r/type_uint.result:
Fixed results after merge
mysql-test/r/type_year.result:
Fixed results after merge
mysql-test/r/variables.result:
Fixed results after merge
mysql-test/r/warnings.result:
Fixed results after merge
mysql-test/t/case.test:
Fixed shifted error messages
mysql-test/t/create.test:
Fixed shifted error messages
mysql-test/t/ctype_collate.test:
Fixed shifted error messages
mysql-test/t/ctype_tis620.test:
Merge with 4.0 ctype_tis620 test
mysql-test/t/delete.test:
Fixed shifted error messages
mysql-test/t/derived.test:
Fixed shifted error messages
mysql-test/t/fulltext.test:
Fixed shifted error messages
mysql-test/t/func_in.test:
Fixed shifted error messages
mysql-test/t/func_str.test:
Fixed shifted error messages
mysql-test/t/func_test.test:
Fixed shifted error messages
mysql-test/t/grant.test:
Fixed shifted error messages
mysql-test/t/innodb.test:
Change to 4.1 syntax
mysql-test/t/key_cache.test:
Fixed shifted error messages
mysql-test/t/myisam.test:
New test of blob and end space
mysql-test/t/row.test:
Fixed shifted error messages
mysql-test/t/rpl_until.test:
Fixed shifted error messages
mysql-test/t/subselect.test:
Fixed shifted error messages
mysql-test/t/subselect_innodb.test:
Fix test to take into account foreign key constraints
mysql-test/t/union.test:
Fixed shifted error messages
mysql-test/t/user_var.test:
Fixed shifted error messages
mysql-test/t/variables.test:
Fixed shifted error messages
mysys/my_handler.c:
Merge with 4.0 code
sql/ha_heap.cc:
After merge fixes
sql/handler.cc:
After merge fixes
sql/item.cc:
After merge fixes
sql/item_cmpfunc.cc:
Ensure that we are comparing end space with BINARY strings
sql/item_cmpfunc.h:
Ensure that we are comparing end space with BINARY strings
sql/log_event.cc:
More DBUG statements
Ensure that we use all options to LOAD DATA in replication
sql/opt_range.cc:
After merge fixes
sql/sql_db.cc:
After merge fixes
sql/sql_handler.cc:
After merge fixes
Use 'any_db' instead of '' to mean 'no database comparison'
sql/sql_parse.cc:
After merge fixes
sql/sql_select.cc:
After merge fixes
Added function comment for setup_group()
sql/sql_string.cc:
Added stringcmp() for binary comparison.
Added function comments for sortcmp() and stringcmp()
sql/sql_string.h:
Added stringcmp()
sql/sql_table.cc:
After merge fixes
sql/sql_update.cc:
After merge fixes
sql/sql_yacc.yy:
Use 'any_db' instead of '' to mean any database. Using "" causes a 'wrong db name' error.
strings/ctype-big5.c:
Strip only end space, not other space characters.
strings/ctype-bin.c:
Removed some not needed functions.
Added function comments
Don't remove end space in comparisons
Change my_wildcmp_bin() to be 'identical' with other similar code
strings/ctype-czech.c:
Strip only end space, not other space characters.
strings/ctype-gbk.c:
Strip only end space, not other space characters.
strings/ctype-latin1.c:
Strip only end space, not other space characters.
strings/ctype-mb.c:
Strip only end space, not other space characters.
strings/ctype-simple.c:
Strip only end space, not other space characters.
strings/ctype-sjis.c:
Strip only end space, not other space characters.
strings/ctype-tis620.c:
Added usage of my_instr_simple. This needs to be cleaned up!
strings/ctype-utf8.c:
Strip only end space, not other space characters.
strings/ctype-win1250ch.c:
Strip only end space, not other space characters.
Fixed indentation
strings/strto.c:
Code cleanup
2004-02-16 09:03:25 +01:00
--error 1272
2003-12-17 23:52:03 +01:00
SELECT @@skr.storage_engine="test";
2003-08-02 11:43:18 +02:00
select @@keycache1.key_cache_block_size;
select @@keycache1.key_buffer_size;
set global keycache1.key_cache_block_size=2048;
select @@keycache1.key_buffer_size;
select @@keycache1.key_cache_block_size;
set global keycache1.key_buffer_size=1*1024*1024;
select @@keycache1.key_buffer_size;
select @@keycache1.key_cache_block_size;
set global keycache2.key_buffer_size=4*1024*1024;
select @@keycache2.key_buffer_size;
select @@keycache2.key_cache_block_size;
set global keycache1.key_buffer_size=0;
select @@keycache1.key_buffer_size;
select @@keycache1.key_cache_block_size;
select @@key_buffer_size;
select @@key_cache_block_size;
2014-07-19 16:46:08 +02:00
select @@key_cache_file_hash_size;
2003-08-02 11:43:18 +02:00
2003-11-18 12:47:27 +01:00
set global keycache1.key_buffer_size=1024*1024;
2003-08-02 11:43:18 +02:00
2014-07-19 16:46:08 +02:00
let org_key_blocks_unused=`select unused_blocks as unused from information_schema.key_caches where key_cache_name="default"`;
--disable_query_log
eval set @org_key_blocks_unused=$org_key_blocks_unused;
--enable_query_log
2003-11-18 12:47:27 +01:00
create table t1 (p int primary key, a char(10)) delay_key_write=1;
2003-08-02 11:43:18 +02:00
create table t2 (p int primary key, i int, a char(10), key k1(i), key k2(a));
2014-07-19 16:46:08 +02:00
select @org_key_blocks_unused-unused_blocks as key_blocks_unused, used_blocks as key_blocks_used from information_schema.key_caches where key_cache_name="default";
2004-05-03 15:55:21 +02:00
2003-08-02 11:43:18 +02:00
insert into t1 values (1, 'qqqq'), (11, 'yyyy');
insert into t2 values (1, 1, 'qqqq'), (2, 1, 'pppp'),
(3, 1, 'yyyy'), (4, 3, 'zzzz');
select * from t1;
select * from t2;
update t1 set p=2 where p=1;
update t2 set i=2 where i=1;
2014-07-19 16:46:08 +02:00
select @org_key_blocks_unused-unused_blocks as key_blocks_unused, used_blocks as key_blocks_used from information_schema.key_caches where key_cache_name="default";
2004-05-03 15:55:21 +02:00
preload.result, key_cache.result, preload.test, key_cache.test, sql_yacc.yy:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
sql/sql_yacc.yy:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/t/key_cache.test:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/t/preload.test:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/r/key_cache.result:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/r/preload.result:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
2004-02-02 09:19:51 +01:00
cache index t1 key (`primary`) in keycache1;
2003-08-02 11:43:18 +02:00
explain select p from t1;
select p from t1;
explain select i from t2;
select i from t2;
explain select count(*) from t1, t2 where t1.p = t2.i;
select count(*) from t1, t2 where t1.p = t2.i;
2003-11-18 12:47:27 +01:00
cache index t2 in keycache1;
2003-08-02 11:43:18 +02:00
update t2 set p=p+1000, i=2 where a='qqqq';
2003-11-18 12:47:27 +01:00
cache index t2 in keycache2;
2003-08-02 11:43:18 +02:00
insert into t2 values (2000, 3, 'yyyy');
2003-11-18 12:47:27 +01:00
cache index t2 in keycache1;
2003-08-02 11:43:18 +02:00
update t2 set p=3000 where a='zzzz';
select * from t2;
explain select p from t2;
select p from t2;
explain select i from t2;
select i from t2;
explain select a from t2;
select a from t2;
2003-11-18 12:47:27 +01:00
# Test some error conditions
After merge fixes
Added more DBUG statements
Ensure that we are comparing end space with BINARY strings
Use 'any_db' instead of '' to mean any database. (For HANDLER command)
Only strip ' ' when comparing CHAR, not other space-like characters (like \t)
BitKeeper/deleted/.del-ctype_tis620.result-old~3578ceb0b8284685:
Delete: mysql-test/r/ctype_tis620.result-old
BitKeeper/deleted/.del-ctype_tis620.test-old~ffb1bbd2935d1aba:
Delete: mysql-test/t/ctype_tis620.test-old
client/mysqlbinlog.cc:
Added DBUG statements
Added call of my_end() to free all used memory on exit
heap/hp_info.c:
After merge fixes
heap/hp_open.c:
After merge fixes
include/heap.h:
After merge fixes
include/m_ctype.h:
Use pchar instead of 'int' for character parameters.
Added 'my_binary_compare()'
include/m_string.h:
Fixed wrong define
innobase/ibuf/ibuf0ibuf.c:
After merge fixes
innobase/srv/srv0start.c:
After merge fixes
mysql-test/r/alter_table.result:
Fixed results after merge
mysql-test/r/auto_increment.result:
Fixed results after merge
mysql-test/r/bdb.result:
Fixed results after merge
mysql-test/r/binary.result:
Fixed results after merge
mysql-test/r/create.result:
Fixed results after merge
mysql-test/r/ctype_mb.result:
Fixed results after merge
mysql-test/r/ctype_tis620.result:
Fixed results after merge
mysql-test/r/ctype_utf8.result:
Fixed results after merge
mysql-test/r/delete.result:
Fixed results after merge
mysql-test/r/func_compress.result:
Fixed results after merge
mysql-test/r/func_gconcat.result:
Fixed results after merge
mysql-test/r/func_group.result:
Fixed results after merge
mysql-test/r/func_str.result:
Fixed results after merge
mysql-test/r/innodb.result:
Fixed results after merge
mysql-test/r/insert.result:
Fixed results after merge
mysql-test/r/insert_select.result:
Fixed results after merge
mysql-test/r/key.result:
Fixed results after merge
mysql-test/r/loaddata.result:
Fixed results after merge
mysql-test/r/lock.result:
Fixed results after merge
mysql-test/r/myisam.result:
Fixed results after merge
mysql-test/r/null.result:
Fixed results after merge
mysql-test/r/null_key.result:
Fixed results after merge
mysql-test/r/order_by.result:
Fixed results after merge
mysql-test/r/query_cache.result:
Fixed results after merge
mysql-test/r/range.result:
Fixed results after merge
mysql-test/r/rpl_multi_delete.result:
Fixed results after merge
mysql-test/r/rpl_until.result:
Fixed results after merge
mysql-test/r/subselect.result:
Fixed results after merge
mysql-test/r/subselect_innodb.result:
Fixed results after merge
mysql-test/r/type_blob.result:
Fixed results after merge
mysql-test/r/type_datetime.result:
Fixed results after merge
mysql-test/r/type_decimal.result:
Fixed results after merge
mysql-test/r/type_enum.result:
Fixed results after merge
mysql-test/r/type_float.result:
Fixed results after merge
mysql-test/r/type_ranges.result:
Fixed results after merge
mysql-test/r/type_time.result:
Fixed results after merge
mysql-test/r/type_timestamp.result:
Fixed results after merge
mysql-test/r/type_uint.result:
Fixed results after merge
mysql-test/r/type_year.result:
Fixed results after merge
mysql-test/r/variables.result:
Fixed results after merge
mysql-test/r/warnings.result:
Fixed results after merge
mysql-test/t/case.test:
Fixed shifted error messages
mysql-test/t/create.test:
Fixed shifted error messages
mysql-test/t/ctype_collate.test:
Fixed shifted error messages
mysql-test/t/ctype_tis620.test:
Merge with 4.0 ctype_tis620 test
mysql-test/t/delete.test:
Fixed shifted error messages
mysql-test/t/derived.test:
Fixed shifted error messages
mysql-test/t/fulltext.test:
Fixed shifted error messages
mysql-test/t/func_in.test:
Fixed shifted error messages
mysql-test/t/func_str.test:
Fixed shifted error messages
mysql-test/t/func_test.test:
Fixed shifted error messages
mysql-test/t/grant.test:
Fixed shifted error messages
mysql-test/t/innodb.test:
Change to 4.1 syntax
mysql-test/t/key_cache.test:
Fixed shifted error messages
mysql-test/t/myisam.test:
New test of blob and end space
mysql-test/t/row.test:
Fixed shifted error messages
mysql-test/t/rpl_until.test:
Fixed shifted error messages
mysql-test/t/subselect.test:
Fixed shifted error messages
mysql-test/t/subselect_innodb.test:
Fix test to take into account foreign key constraints
mysql-test/t/union.test:
Fixed shifted error messages
mysql-test/t/user_var.test:
Fixed shifted error messages
mysql-test/t/variables.test:
Fixed shifted error messages
mysys/my_handler.c:
Merge with 4.0 code
sql/ha_heap.cc:
After merge fixes
sql/handler.cc:
After merge fixes
sql/item.cc:
After merge fixes
sql/item_cmpfunc.cc:
Ensure that we are comparing end space with BINARY strings
sql/item_cmpfunc.h:
Ensure that we are comparing end space with BINARY strings
sql/log_event.cc:
More DBUG statements
Ensure that we use all options to LOAD DATA in replication
sql/opt_range.cc:
After merge fixes
sql/sql_db.cc:
After merge fixes
sql/sql_handler.cc:
After merge fixes
Use 'any_db' instead of '' to mean 'no database comparison'
sql/sql_parse.cc:
After merge fixes
sql/sql_select.cc:
After merge fixes
Added function comment for setup_group()
sql/sql_string.cc:
Added stringcmp() for binary comparison.
Added function comments for sortcmp() and stringcmp()
sql/sql_string.h:
Added stringcmp()
sql/sql_table.cc:
After merge fixes
sql/sql_update.cc:
After merge fixes
sql/sql_yacc.yy:
Use 'any_db' instead of '' to mean any database. Using "" causes a 'wrong db name' error.
strings/ctype-big5.c:
Strip only end space, not other space characters.
strings/ctype-bin.c:
Removed some not needed functions.
Added function comments
Don't remove end space in comparisons
Change my_wildcmp_bin() to be 'identical' with other similar code
strings/ctype-czech.c:
Strip only end space, not other space characters.
strings/ctype-gbk.c:
Strip only end space, not other space characters.
strings/ctype-latin1.c:
Strip only end space, not other space characters.
strings/ctype-mb.c:
Strip only end space, not other space characters.
strings/ctype-simple.c:
Strip only end space, not other space characters.
strings/ctype-sjis.c:
Strip only end space, not other space characters.
strings/ctype-tis620.c:
Added usage of my_instr_simple. This needs to be cleaned up!
strings/ctype-utf8.c:
Strip only end space, not other space characters.
strings/ctype-win1250ch.c:
Strip only end space, not other space characters.
Fixed indentation
strings/strto.c:
Code cleanup
2004-02-16 09:03:25 +01:00
--error 1284
2003-11-18 12:47:27 +01:00
cache index t1 in unknown_key_cache;
preload.result, key_cache.result, preload.test, key_cache.test, sql_yacc.yy:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
sql/sql_yacc.yy:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/t/key_cache.test:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/t/preload.test:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/r/key_cache.result:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/r/preload.result:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
2004-02-02 09:19:51 +01:00
cache index t1 key (unknown_key) in keycache1;
2003-11-18 12:47:27 +01:00
2003-08-02 11:43:18 +02:00
select @@keycache2.key_buffer_size;
select @@keycache2.key_cache_block_size;
set global keycache2.key_buffer_size=0;
select @@keycache2.key_buffer_size;
select @@keycache2.key_cache_block_size;
2003-11-18 12:47:27 +01:00
set global keycache2.key_buffer_size=1024*1024;
select @@keycache2.key_buffer_size;
2003-08-02 11:43:18 +02:00
update t2 set p=4000 where a='zzzz';
update t1 set p=p+1;
set global keycache1.key_buffer_size=0;
select * from t2;
select p from t2;
explain select i from t2;
select i from t2;
explain select a from t2;
select a from t2;
select * from t1;
select p from t1;
2003-11-18 12:47:27 +01:00
# Use the 'small' key cache
create table t3 (like t1);
cache index t3 in small;
insert into t3 select * from t1;
cache index t3 in keycache2;
cache index t1,t2 in default;
drop table t1,t2,t3;
2003-08-02 11:43:18 +02:00
2014-07-19 16:46:08 +02:00
select @org_key_blocks_unused-unused_blocks as key_blocks_unused, used_blocks as key_blocks_used from information_schema.key_caches where key_cache_name="default";
2004-05-03 15:55:21 +02:00
2009-12-22 10:35:56 +01:00
create table t1 (a int primary key);
cache index t1 in keycache2;
insert t1 values (1),(2),(3),(4),(5),(6),(7),(8);
# delete keycache2, t1 is reassigned to default
2003-12-09 22:29:38 +01:00
set global keycache2.key_buffer_size=0;
2009-12-22 10:35:56 +01:00
select * from t1;
drop table t1;
2003-12-09 22:29:38 +01:00
# Test to set up a too small size for a key cache (bug #2064)
set global keycache3.key_buffer_size=100;
set global keycache3.key_buffer_size=0;
2004-11-16 22:58:49 +01:00
2006-04-19 05:57:31 +02:00
# Test case for bug 6447
2004-11-16 22:58:49 +01:00
create table t1 (mytext text, FULLTEXT (mytext));
insert t1 values ('aaabbb');
check table t1;
2006-11-15 10:23:27 +01:00
set @my_key_cache_block_size= @@global.key_cache_block_size;
2004-11-16 22:58:49 +01:00
set GLOBAL key_cache_block_size=2048;
check table t1;
drop table t1;
2006-11-15 10:23:27 +01:00
# Restore the changed variable value
set global key_cache_block_size= @my_key_cache_block_size;
2005-07-28 02:22:47 +02:00
2006-04-19 05:57:31 +02:00
#
# Bug #19079: corrupted index when key_cache_block_size is not multiple of
# myisam_block_size
CREATE TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY);
2006-11-15 10:23:27 +01:00
SET @my_key_cache_block_size= @@global.key_cache_block_size;
2006-04-19 05:57:31 +02:00
SET GLOBAL key_cache_block_size=1536;
INSERT INTO t1 VALUES (1);
SELECT @@key_cache_block_size;
CHECK TABLE t1;
DROP TABLE t1;
CREATE TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int);
CREATE TABLE t2(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int);
SET GLOBAL key_cache_block_size=1536;
INSERT INTO t1 VALUES (1,0);
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
INSERT INTO t2(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t2;
SELECT COUNT(*) FROM t1;
SELECT @@key_cache_block_size;
CHECK TABLE t1;
DROP TABLE t1,t2;
2006-11-15 10:23:27 +01:00
# Restore changed variables
set global key_cache_block_size= @my_key_cache_block_size;
2006-04-19 05:57:31 +02:00
2005-08-07 20:39:17 +02:00
#
# Bug#10473 - Can't set 'key_buffer_size' system variable to ZERO
# (One cannot drop the default key cache.)
#
2009-12-22 10:35:56 +01:00
--error ER_WARN_CANT_DROP_DEFAULT_KEYCACHE
2005-08-07 20:39:17 +02:00
set @@global.key_buffer_size=0;
select @@global.key_buffer_size;
2007-05-31 20:04:54 +02:00
#
# Bug#28478 - Improper key_cache_block_size corrupts MyISAM tables
#
SET @bug28478_key_cache_block_size= @@global.key_cache_block_size;
SET GLOBAL key_cache_block_size= 1536;
CREATE TABLE t1 (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
c1 CHAR(150),
c2 CHAR(150),
c3 CHAR(150),
KEY(c1, c2, c3)
) ENGINE= MyISAM;
INSERT INTO t1 (c1, c2, c3) VALUES
('a', 'b', 'c'), ('b', 'c', 'd'), ('c', 'd', 'e'), ('d', 'e', 'f'),
('e', 'f', 'g'), ('f', 'g', 'h'), ('g', 'h', 'i'), ('h', 'i', 'j'),
('i', 'j', 'k'), ('j', 'k', 'l'), ('k', 'l', 'm'), ('l', 'm', 'n'),
('m', 'n', 'o'), ('n', 'o', 'p'), ('o', 'p', 'q'), ('p', 'q', 'r'),
('q', 'r', 's'), ('r', 's', 't'), ('s', 't', 'u'), ('t', 'u', 'v'),
('u', 'v', 'w'), ('v', 'w', 'x'), ('w', 'x', 'y'), ('x', 'y', 'z');
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
CHECK TABLE t1;
SHOW VARIABLES LIKE 'key_cache_block_size';
SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
DROP TABLE t1;
2005-07-28 02:22:47 +02:00
# End of 4.1 tests
2010-02-16 17:41:11 +01:00
2011-12-12 14:07:02 +01:00
--echo #
--echo # Bug#12361113: crash when load index into cache
--echo #
--echo # Note that this creates an empty disabled key cache!
SET GLOBAL key_cache_none.key_cache_block_size = 1024;
CREATE TABLE t1 (a INT, b INTEGER NOT NULL, KEY (b) ) ENGINE = MYISAM;
INSERT INTO t1 VALUES (1, 1);
--error ER_UNKNOWN_KEY_CACHE
CACHE INDEX t1 in key_cache_none;
--echo # The bug crashed the server at LOAD INDEX below. Now it will succeed
--echo # since the default cache is used due to CACHE INDEX failed for
--echo # key_cache_none.
LOAD INDEX INTO CACHE t1;
DROP TABLE t1;
2012-02-20 16:49:21 +01:00
2010-05-26 18:33:40 +02:00
# End of 5.1 tests
2010-02-16 17:41:11 +01:00
#
2010-05-26 18:33:40 +02:00
# Test cases for segmented key caches
2010-02-16 17:41:11 +01:00
#
# Test usage of the KEY_CACHE table from information schema
# for a simple key cache
set global key_buffer_size=@save_key_buffer_size;
set global key_cache_block_size=@save_key_cache_block_size;
select @@key_buffer_size;
select @@key_cache_block_size;
2010-05-26 18:33:40 +02:00
select @@key_cache_segments;
2010-02-16 17:41:11 +01:00
create table t1 (
p int not null auto_increment primary key,
a char(10));
create table t2 (
p int not null auto_increment primary key,
i int, a char(10), key k1(i), key k2(a));
2010-05-26 18:33:40 +02:00
select @@key_cache_segments;
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
insert into t1 values (1, 'qqqq'), (2, 'yyyy');
insert into t2 values (1, 1, 'qqqq'), (2, 1, 'pppp'),
(3, 1, 'yyyy'), (4, 3, 'zzzz');
select * from t1;
select * from t2;
update t1 set p=3 where p=1;
update t2 set i=2 where i=1;
2015-01-19 14:07:51 +01:00
select * from information_schema.session_status where variable_name like 'key_%' and variable_name != 'Key_blocks_unused';
select variable_value into @key_blocks_unused from information_schema.session_status where variable_name = 'Key_blocks_unused';
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
delete from t2 where a='zzzz';
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
delete from t1;
delete from t2;
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
2010-05-26 18:33:40 +02:00
# For the key cache with 2 segments execute the same sequence of
2010-02-16 17:41:11 +01:00
# statements as for the simple cache above.
# The statistical information on the number of i/o requests and
# the number of is expected to be the same.
2010-05-26 18:33:40 +02:00
set global key_cache_segments=2;
select @@key_cache_segments;
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
insert into t1 values (1, 'qqqq'), (2, 'yyyy');
insert into t2 values (1, 1, 'qqqq'), (2, 1, 'pppp'),
(3, 1, 'yyyy'), (4, 3, 'zzzz');
select * from t1;
select * from t2;
update t1 set p=3 where p=1;
update t2 set i=2 where i=1;
2014-07-19 16:46:08 +02:00
2015-01-19 14:07:51 +01:00
select * from information_schema.session_status where variable_name like 'key_%' and variable_name != 'Key_blocks_unused';
select variable_value < @key_blocks_unused from information_schema.session_status where variable_name = 'Key_blocks_unused';
2010-04-01 01:37:28 +02:00
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
delete from t1;
delete from t2;
2010-04-01 01:37:28 +02:00
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
2010-05-26 18:33:40 +02:00
# Check that we can work with one segment with the same results
2010-02-16 17:41:11 +01:00
2010-05-26 18:33:40 +02:00
set global key_cache_segments=1;
select @@key_cache_segments;
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
insert into t1 values (1, 'qqqq'), (2, 'yyyy');
insert into t2 values (1, 1, 'qqqq'), (2, 1, 'pppp'),
(3, 1, 'yyyy'), (4, 3, 'zzzz');
select * from t1;
select * from t2;
update t1 set p=3 where p=1;
update t2 set i=2 where i=1;
2015-01-19 14:07:51 +01:00
select * from information_schema.session_status where variable_name like 'key_%' and variable_name != 'Key_blocks_unused';
select variable_value = @key_blocks_unused from information_schema.session_status where variable_name = 'Key_blocks_unused';
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
delete from t1;
delete from t2;
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
flush tables; flush status;
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
2010-05-26 18:33:40 +02:00
# Switch back to 2 segments
2010-02-16 17:41:11 +01:00
set global key_buffer_size=32*1024;
2014-07-19 16:46:08 +02:00
set global key_cache_file_hash_size=128;
2010-02-16 17:41:11 +01:00
select @@key_buffer_size;
2010-05-26 18:33:40 +02:00
set global key_cache_segments=2;
select @@key_cache_segments;
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
insert into t1 values (1, 'qqqq'), (2, 'yyyy');
insert into t2 values (1, 1, 'qqqq'), (2, 1, 'pppp'),
(3, 1, 'yyyy'), (4, 3, 'zzzz');
select * from t1;
select * from t2;
update t1 set p=3 where p=1;
update t2 set i=2 where i=1;
--replace_column 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
# Add more rows to tables t1 and t2
insert into t1(a) select a from t1;
insert into t1(a) select a from t1;
insert into t1(a) select a from t1;
insert into t1(a) select a from t1;
insert into t1(a) select a from t1;
insert into t1(a) select a from t1;
insert into t1(a) select a from t1;
insert into t1(a) select a from t1;
insert into t2(i,a) select i,a from t2;
insert into t2(i,a) select i,a from t2;
insert into t2(i,a) select i,a from t2;
insert into t2(i,a) select i,a from t2;
insert into t2(i,a) select i,a from t2;
insert into t2(i,a) select i,a from t2;
insert into t2(i,a) select i,a from t2;
insert into t2(i,a) select i,a from t2;
--replace_column 6 # 7 # 10 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
select * from t1 where p between 1010 and 1020 ;
select * from t2 where p between 1010 and 1020 ;
--replace_column 6 # 7 # 10 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
flush tables; flush status;
update t1 set a='zzzz' where a='qqqq';
update t2 set i=1 where i=2;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
2010-05-26 18:33:40 +02:00
# Now test how we can work with 7 segments
2010-02-16 17:41:11 +01:00
set global keycache1.key_buffer_size=256*1024;
select @@keycache1.key_buffer_size;
2010-05-26 18:33:40 +02:00
set global keycache1.key_cache_segments=7;
select @@keycache1.key_cache_segments;
2010-02-16 17:41:11 +01:00
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-04-01 01:37:28 +02:00
select * from information_schema.key_caches where key_cache_name like "key%"
2010-05-26 18:33:40 +02:00
and segment_number is null;
2010-02-16 17:41:11 +01:00
cache index t1 key (`primary`) in keycache1;
explain select p from t1 where p between 1010 and 1020;
select p from t1 where p between 1010 and 1020;
explain select i from t2 where p between 1010 and 1020;
select i from t2 where p between 1010 and 1020;
explain select count(*) from t1, t2 where t1.p = t2.i;
select count(*) from t1, t2 where t1.p = t2.i;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-04-01 01:37:28 +02:00
select * from information_schema.key_caches where key_cache_name like "key%"
2010-05-26 18:33:40 +02:00
and segment_number is null;
2010-02-16 17:41:11 +01:00
cache index t2 in keycache1;
update t2 set p=p+3000, i=2 where a='qqqq';
--replace_column 7 #
2010-04-01 01:37:28 +02:00
select * from information_schema.key_caches where key_cache_name like "key%"
2010-05-26 18:33:40 +02:00
and segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache2.key_buffer_size=1024*1024;
cache index t2 in keycache2;
insert into t2 values (2000, 3, 'yyyy');
--replace_column 7 #
2010-04-01 01:37:28 +02:00
select * from information_schema.key_caches where key_cache_name like "keycache2"
2010-05-26 18:33:40 +02:00
and segment_number is null;
2010-02-16 17:41:11 +01:00
--replace_column 7 #
2010-04-01 01:37:28 +02:00
select * from information_schema.key_caches where key_cache_name like "key%"
2010-05-26 18:33:40 +02:00
and segment_number is null;
2010-02-16 17:41:11 +01:00
cache index t2 in keycache1;
update t2 set p=p+5000 where a='zzzz';
select * from t2 where p between 1010 and 1020;
explain select p from t2 where p between 1010 and 1020;
select p from t2 where p between 1010 and 1020;
explain select i from t2 where a='yyyy' and i=3;
select i from t2 where a='yyyy' and i=3;
explain select a from t2 where a='yyyy' and i=3;
select a from t2 where a='yyyy' and i=3 ;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_cache_block_size=2*1024;
insert into t2 values (7000, 3, 'yyyy');
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_cache_block_size=8*1024;
2010-04-01 23:42:40 +02:00
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
insert into t2 values (8000, 3, 'yyyy');
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_buffer_size=64*1024;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_cache_block_size=2*1024;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_cache_block_size=8*1024;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_buffer_size=0;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_cache_block_size=8*1024;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_buffer_size=0;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_buffer_size=128*1024;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
set global keycache1.key_cache_block_size=1024;
--replace_column 6 # 7 #
2010-05-26 18:33:40 +02:00
select * from information_schema.key_caches where segment_number is null;
2010-02-16 17:41:11 +01:00
drop table t1,t2;
set global keycache1.key_buffer_size=0;
set global keycache2.key_buffer_size=0;
set global key_buffer_size=@save_key_buffer_size;
2010-05-26 18:33:40 +02:00
set global key_cache_segments=@save_key_cache_segments;
2014-07-19 16:46:08 +02:00
set global key_cache_file_hash_size=@save_key_cache_file_hash_size;
2010-02-16 17:41:11 +01:00
2010-05-26 18:33:40 +02:00
# End of 5.2 tests