2
# Test of the MyISAM key cache
2
# Test of multiple key caches
5
5
drop table if exists t1, t2, t3;
8
SET @save_myisam_key_cache_size=@@myisam_key_cache_size;
9
SET @save_myisam_key_cache_block_size=@@myisam_key_cache_block_size;
10
SET @save_myisam_key_cache_division_limit=@@myisam_key_cache_division_limit;
11
SET @save_myisam_key_cache_age_threshold=@@myisam_key_cache_age_threshold;
8
SET @save_key_buffer=@@key_buffer_size;
13
# Show default variables for MyISAM key cache
14
SELECT @@myisam_key_cache_size;
15
SELECT @@myisam_key_cache_block_size;
16
SELECT @@myisam_key_cache_division_limit;
17
SELECT @@myisam_key_cache_age_threshold;
10
SELECT @@key_buffer_size;
19
12
# Change default key cache size
20
SET @@global.myisam_key_cache_size=16*1024*1024;
13
SET @@global.key_buffer_size=16*1024*1024;
22
# Drop Key Cache (warning generated)
23
SET @@global.myisam_key_cache_size=0;
16
SET @@global.key_buffer_size=0;
25
SET @@global.myisam_key_cache_size=0;
27
# Change default key cache size
28
SET @@global.myisam_key_cache_size=16*1024*1024;
18
SET @@global.key_buffer_size=0;
30
20
# Print key buffer with different syntaxes
31
SHOW VARIABLES like "myisam_key_cache_size";
32
SELECT @@myisam_key_cache_size;
33
SELECT @@global.myisam_key_cache_size;
34
SELECT @@global.myisam_key_cache_size;
35
SELECT @@global.`myisam_key_cache_size`;
36
SELECT @@global.`myisam_key_cache_size`;
37
SELECT @@myisam_key_cache_size;
39
SET @@global.myisam_key_cache_size=@save_myisam_key_cache_size;
21
SHOW VARIABLES like "key_buffer_size";
22
SELECT @@key_buffer_size;
23
SELECT @@global.key_buffer_size;
24
SELECT @@global.key_buffer_size;
25
SELECT @@global.`key_buffer_size`;
26
SELECT @@global.`key_buffer_size`;
27
SELECT @@key_buffer_size;
29
SELECT @@key_buffer_size;
30
SELECT @@key_buffer_size;
32
SET @@global.key_buffer_size=@save_key_buffer;
45
SELECT @@myisam_key_cache_size;
38
SELECT @@key_buffer_size;
47
40
SELECT @@skr.storage_engine="test";
50
select @@keycache1.myisam_key_cache_block_size;
43
select @@keycache1.key_cache_block_size;
53
45
show status like 'key_blocks_used';
48
# We don't reset keycache2 as we want to ensure that mysqld will reset it
49
set global key_buffer_size=0;
55
51
# Test to set up a too small size for a key cache (bug #2064)
56
set global myisam_key_cache_size=100;
52
set global key_buffer_size=100;
53
set global key_buffer_size=0;
55
# Restore the changed variable value
57
set global key_cache_block_size= @my_key_cache_block_size;
59
# Bug #19079: corrupted index when myisam_key_cache_block_size is not multiple of
60
# Bug #19079: corrupted index when key_cache_block_size is not multiple of
60
61
# myisam_block_size
62
63
CREATE temporary TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=MYISAM;
63
SET GLOBAL myisam_key_cache_block_size=1536;
64
SET @my_key_cache_block_size= @@global.key_cache_block_size;
65
SET GLOBAL key_cache_block_size=1536;
64
66
INSERT INTO t1 VALUES (1);
65
SELECT @@myisam_key_cache_block_size;
67
SELECT @@key_cache_block_size;
69
71
CREATE TEMPORARY TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int) ENGINE=MYISAM;
70
72
CREATE TEMPORARY TABLE t2(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int) ENGINE=MYISAM;
71
SET GLOBAL myisam_key_cache_block_size=1536;
73
SET GLOBAL key_cache_block_size=1536;
72
74
INSERT INTO t1 VALUES (1,0);
73
75
INSERT INTO t2(b) SELECT b FROM t1;
74
76
INSERT INTO t1(b) SELECT b FROM t2;
89
91
INSERT INTO t2(b) SELECT b FROM t1;
90
92
INSERT INTO t1(b) SELECT b FROM t2;
91
93
SELECT COUNT(*) FROM t1;
92
SELECT @@myisam_key_cache_block_size;
94
SELECT @@key_cache_block_size;
95
97
# Restore changed variables
96
set global myisam_key_cache_block_size= @save_myisam_key_cache_block_size;
99
# Bug#28478 - Improper myisam_key_cache_block_size corrupts MyISAM tables
101
SET GLOBAL myisam_key_cache_block_size= 1536;
98
set global key_cache_block_size= @my_key_cache_block_size;
101
# Bug#10473 - Can't set 'key_buffer_size' system variable to ZERO
102
# (One cannot drop the default key cache.)
104
set @@global.key_buffer_size=0;
105
select @@global.key_buffer_size;
108
# Bug#28478 - Improper key_cache_block_size corrupts MyISAM tables
110
SET @bug28478_key_cache_block_size= @@global.key_cache_block_size;
111
SET GLOBAL key_cache_block_size= 1536;
102
112
CREATE TEMPORARY TABLE t1 (
103
113
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
118
128
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t2;
119
129
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t2;
121
SHOW VARIABLES LIKE 'myisam_key_cache_block_size';
122
SET GLOBAL myisam_key_cache_block_size= @save_myisam_key_cache_block_size;
131
SHOW VARIABLES LIKE 'key_cache_block_size';
132
SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
123
133
DROP TABLE t1,t2;
125
# Check division limit and age threshold
127
# Division Limit: Minimum 1, maximum 100
128
SET GLOBAL myisam_key_cache_division_limit= 0;
130
SELECT @@myisam_key_cache_division_limit;
132
SET GLOBAL myisam_key_cache_division_limit= 101;
134
SELECT @@myisam_key_cache_division_limit;
136
# Age Threshold: Minimum 100, maximum UINT32_MAX
137
SET GLOBAL myisam_key_cache_age_threshold= 98;
139
SELECT @@myisam_key_cache_age_threshold;
141
SET GLOBAL myisam_key_cache_age_threshold= 5000000000;
143
SELECT @@myisam_key_cache_age_threshold;