~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to mysql-test/t/key_cache.test

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# Test of multiple key caches
 
3
#
 
4
--disable_warnings
 
5
drop table if exists t1, t2, t3;
 
6
--enable_warnings
 
7
 
 
8
SET @save_key_buffer=@@key_buffer_size;
 
9
 
 
10
SELECT @@key_buffer_size, @@small.key_buffer_size;
 
11
 
 
12
# Change default key cache size
 
13
SET @@global.key_buffer_size=16*1024*1024;
 
14
SET @@global.default.key_buffer_size=16*1024*1024;
 
15
SET @@global.default.key_buffer_size=16*1024*1024;
 
16
 
 
17
SET @@global.small.key_buffer_size=1*1024*1024;
 
18
SET @@global.medium.key_buffer_size=4*1024*1024;
 
19
# Drop buffer
 
20
SET @@global.medium.key_buffer_size=0;
 
21
# Test double drop
 
22
SET @@global.medium.key_buffer_size=0;
 
23
 
 
24
# Print key buffer with different syntaxes
 
25
SHOW VARIABLES like "key_buffer_size";
 
26
SELECT @@key_buffer_size;
 
27
SELECT @@global.key_buffer_size;
 
28
SELECT @@global.default.key_buffer_size;
 
29
SELECT @@global.default.`key_buffer_size`;
 
30
SELECT @@global.`default`.`key_buffer_size`;
 
31
SELECT @@`default`.key_buffer_size;
 
32
 
 
33
SELECT @@small.key_buffer_size;
 
34
SELECT @@medium.key_buffer_size;
 
35
 
 
36
SET @@global.key_buffer_size=@save_key_buffer;
 
37
 
 
38
#
 
39
# Errors
 
40
#
 
41
 
 
42
--error 1064
 
43
SELECT @@default.key_buffer_size;
 
44
--error 1272
 
45
SELECT @@skr.storage_engine="test";
 
46
 
 
47
select @@keycache1.key_cache_block_size;
 
48
select @@keycache1.key_buffer_size;
 
49
set global keycache1.key_cache_block_size=2048;
 
50
select @@keycache1.key_buffer_size;
 
51
select @@keycache1.key_cache_block_size;
 
52
set global keycache1.key_buffer_size=1*1024*1024;
 
53
select @@keycache1.key_buffer_size;
 
54
select @@keycache1.key_cache_block_size;
 
55
set global keycache2.key_buffer_size=4*1024*1024;
 
56
select @@keycache2.key_buffer_size;
 
57
select @@keycache2.key_cache_block_size;
 
58
set global keycache1.key_buffer_size=0;
 
59
select @@keycache1.key_buffer_size;
 
60
select @@keycache1.key_cache_block_size;
 
61
select @@key_buffer_size;
 
62
select @@key_cache_block_size;
 
63
 
 
64
set global keycache1.key_buffer_size=1024*1024;
 
65
 
 
66
create table t1 (p int primary key, a char(10)) delay_key_write=1;
 
67
create table t2 (p int primary key, i int, a char(10), key k1(i), key k2(a));
 
68
 
 
69
show status like 'key_blocks_used';
 
70
 
 
71
# Following results differs on 64 and 32 bit systems because of different
 
72
# pointer sizes, which takes up different amount of space in key cache
 
73
 
 
74
--replace_result 1812 KEY_BLOCKS_UNUSED 1793 KEY_BLOCKS_UNUSED 1674 KEY_BLOCKS_UNUSED 1818 KEY_BLOCKS_UNUSED 1824 KEY_BLOCKS_UNUSED
 
75
show status like 'key_blocks_unused';
 
76
 
 
77
insert into t1 values (1, 'qqqq'), (11, 'yyyy');
 
78
insert into t2 values (1, 1, 'qqqq'), (2, 1, 'pppp'),
 
79
                      (3, 1, 'yyyy'), (4, 3, 'zzzz');
 
80
select * from t1;
 
81
select * from t2;
 
82
 
 
83
update t1 set p=2 where p=1;
 
84
update t2 set i=2 where i=1;
 
85
 
 
86
show status like 'key_blocks_used';
 
87
--replace_result 1808 KEY_BLOCKS_UNUSED 1789 KEY_BLOCKS_UNUSED 1670 KEY_BLOCKS_UNUSED 1814 KEY_BLOCKS_UNUSED 1820 KEY_BLOCKS_UNUSED
 
88
show status like 'key_blocks_unused';
 
89
 
 
90
cache index t1 key (`primary`) in keycache1;
 
91
 
 
92
explain select p from t1;
 
93
select p from t1;
 
94
explain select i from t2;
 
95
select i from t2;
 
96
explain select count(*) from t1, t2 where t1.p = t2.i;
 
97
select count(*) from t1, t2 where t1.p = t2.i;
 
98
 
 
99
cache index t2 in keycache1;
 
100
update t2 set p=p+1000, i=2 where a='qqqq';
 
101
cache index t2 in keycache2;
 
102
insert into t2 values (2000, 3, 'yyyy');
 
103
cache index t2 in keycache1;
 
104
update t2 set p=3000 where a='zzzz';
 
105
select * from t2;
 
106
explain select p from t2;
 
107
select p from t2;
 
108
explain select i from t2;
 
109
select i from t2;
 
110
explain select a from t2;
 
111
select a from t2;
 
112
 
 
113
# Test some error conditions
 
114
--error 1284
 
115
cache index t1 in unknown_key_cache;
 
116
cache index t1 key (unknown_key) in keycache1;
 
117
 
 
118
select @@keycache2.key_buffer_size;
 
119
select @@keycache2.key_cache_block_size;
 
120
set global keycache2.key_buffer_size=0;
 
121
select @@keycache2.key_buffer_size;
 
122
select @@keycache2.key_cache_block_size;
 
123
set global keycache2.key_buffer_size=1024*1024;
 
124
select @@keycache2.key_buffer_size;
 
125
 
 
126
update t2 set p=4000 where a='zzzz';
 
127
update t1 set p=p+1;
 
128
 
 
129
set global keycache1.key_buffer_size=0;
 
130
select * from t2;
 
131
select p from t2;
 
132
explain select i from t2;
 
133
select i from t2;
 
134
explain select a from t2;
 
135
select a from t2;
 
136
 
 
137
select * from t1;
 
138
select p from t1;
 
139
 
 
140
# Use the 'small' key cache
 
141
create table t3 (like t1);
 
142
cache index t3 in small;
 
143
insert into t3 select * from t1;
 
144
cache index t3 in keycache2;
 
145
cache index t1,t2 in default;
 
146
drop table t1,t2,t3;
 
147
 
 
148
show status like 'key_blocks_used';
 
149
--replace_result 1812 KEY_BLOCKS_UNUSED 1793 KEY_BLOCKS_UNUSED 1674 KEY_BLOCKS_UNUSED 1818 KEY_BLOCKS_UNUSED 1824 KEY_BLOCKS_UNUSED
 
150
show status like 'key_blocks_unused';
 
151
 
 
152
 
 
153
# Cleanup
 
154
# We don't reset keycache2 as we want to ensure that mysqld will reset it
 
155
set global keycache2.key_buffer_size=0;
 
156
 
 
157
# Test to set up a too small size for a key cache (bug #2064)
 
158
set global keycache3.key_buffer_size=100;
 
159
set global keycache3.key_buffer_size=0;
 
160
 
 
161
# Test case for bug 6447
 
162
 
 
163
create table t1 (mytext text, FULLTEXT (mytext));
 
164
insert t1 values ('aaabbb');
 
165
 
 
166
check table t1;
 
167
set @my_key_cache_block_size= @@global.key_cache_block_size;
 
168
set GLOBAL key_cache_block_size=2048;
 
169
check table t1;
 
170
drop table t1;
 
171
# Restore the changed variable value
 
172
set global key_cache_block_size= @my_key_cache_block_size;
 
173
 
 
174
#
 
175
# Bug #19079: corrupted index when key_cache_block_size is not multiple of
 
176
#             myisam_block_size
 
177
 
 
178
CREATE TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY);
 
179
SET @my_key_cache_block_size= @@global.key_cache_block_size;
 
180
SET GLOBAL key_cache_block_size=1536;
 
181
INSERT INTO t1 VALUES (1);
 
182
SELECT @@key_cache_block_size;
 
183
CHECK TABLE t1;
 
184
DROP TABLE t1;
 
185
 
 
186
CREATE TABLE t1(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int);
 
187
CREATE TABLE t2(a int NOT NULL AUTO_INCREMENT PRIMARY KEY, b int);
 
188
SET GLOBAL key_cache_block_size=1536;
 
189
INSERT INTO t1 VALUES (1,0);
 
190
INSERT INTO t2(b) SELECT b FROM t1;
 
191
INSERT INTO t1(b) SELECT b FROM t2;
 
192
INSERT INTO t2(b) SELECT b FROM t1;
 
193
INSERT INTO t1(b) SELECT b FROM t2;
 
194
INSERT INTO t2(b) SELECT b FROM t1;
 
195
INSERT INTO t1(b) SELECT b FROM t2;
 
196
INSERT INTO t2(b) SELECT b FROM t1;
 
197
INSERT INTO t1(b) SELECT b FROM t2;
 
198
INSERT INTO t2(b) SELECT b FROM t1;
 
199
INSERT INTO t1(b) SELECT b FROM t2;
 
200
INSERT INTO t2(b) SELECT b FROM t1;
 
201
INSERT INTO t1(b) SELECT b FROM t2;
 
202
INSERT INTO t2(b) SELECT b FROM t1;
 
203
INSERT INTO t1(b) SELECT b FROM t2;
 
204
INSERT INTO t2(b) SELECT b FROM t1;
 
205
INSERT INTO t1(b) SELECT b FROM t2;
 
206
INSERT INTO t2(b) SELECT b FROM t1;
 
207
INSERT INTO t1(b) SELECT b FROM t2;
 
208
SELECT COUNT(*) FROM t1;
 
209
SELECT @@key_cache_block_size;
 
210
CHECK TABLE t1;
 
211
DROP TABLE t1,t2;
 
212
# Restore changed variables
 
213
set global key_cache_block_size= @my_key_cache_block_size;
 
214
 
 
215
#
 
216
# Bug#10473 - Can't set 'key_buffer_size' system variable to ZERO
 
217
# (One cannot drop the default key cache.)
 
218
#
 
219
set @@global.key_buffer_size=0;
 
220
select @@global.key_buffer_size;
 
221
 
 
222
#
 
223
# Bug#28478 - Improper key_cache_block_size corrupts MyISAM tables
 
224
#
 
225
SET @bug28478_key_cache_block_size= @@global.key_cache_block_size;
 
226
SET GLOBAL key_cache_block_size= 1536;
 
227
CREATE TABLE t1 (
 
228
  id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 
229
  c1 CHAR(150),
 
230
  c2 CHAR(150),
 
231
  c3 CHAR(150),
 
232
  KEY(c1, c2, c3)
 
233
  ) ENGINE= MyISAM;
 
234
INSERT INTO t1 (c1, c2, c3) VALUES
 
235
  ('a', 'b', 'c'), ('b', 'c', 'd'), ('c', 'd', 'e'), ('d', 'e', 'f'),
 
236
  ('e', 'f', 'g'), ('f', 'g', 'h'), ('g', 'h', 'i'), ('h', 'i', 'j'),
 
237
  ('i', 'j', 'k'), ('j', 'k', 'l'), ('k', 'l', 'm'), ('l', 'm', 'n'),
 
238
  ('m', 'n', 'o'), ('n', 'o', 'p'), ('o', 'p', 'q'), ('p', 'q', 'r'),
 
239
  ('q', 'r', 's'), ('r', 's', 't'), ('s', 't', 'u'), ('t', 'u', 'v'),
 
240
  ('u', 'v', 'w'), ('v', 'w', 'x'), ('w', 'x', 'y'), ('x', 'y', 'z');
 
241
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
 
242
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
 
243
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
 
244
CHECK TABLE t1;
 
245
SHOW VARIABLES LIKE 'key_cache_block_size';
 
246
SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
 
247
DROP TABLE t1;
 
248
 
 
249
# End of 4.1 tests