summaryrefslogtreecommitdiff
path: root/mysql-test/suite/innodb/r/innodb_wl6326_big.result
blob: 3ff6d0d0b5cea08b47bcc7ae313347c2bbb979c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
CREATE SCHEMA my_schema;
USE my_schema;
CREATE FUNCTION f_thread_id (i INT) RETURNS CHAR(4) DETERMINISTIC
RETURN CONCAT(LPAD(CAST(i AS CHAR),3,'_'),'_') ;
SELECT CONCAT('->', f_thread_id( 1), '<-');
CONCAT('->', f_thread_id( 1), '<-')
->__1_<-
SELECT CONCAT('->', f_thread_id(12), '<-');
CONCAT('->', f_thread_id(12), '<-')
->_12_<-
SET @extra_int    = 1;
SET @extra_string = f_thread_id(@extra_int);
SELECT @extra_int , @extra_string;
@extra_int	@extra_string
1	__1_
CREATE FUNCTION f_col_int1 (i INT) RETURNS INT(20) DETERMINISTIC
RETURN i * 1000 + @extra_int ;
SELECT f_col_int1(my_col) AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
1001
12001
123001
1234001
12345001
CREATE FUNCTION f_col_int2 (i INT) RETURNS INT(20) DETERMINISTIC
RETURN @extra_int * 10000000 + i ;
SELECT f_col_int2(my_col) AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
10000001
10000012
10000123
10001234
10012345
CREATE FUNCTION f_col_int3 (i INT) RETURNS INT(20) DETERMINISTIC
RETURN @extra_int ;
SELECT f_col_int3(my_col) AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
1
1
1
1
1
CREATE FUNCTION f_col_blob (i INT) RETURNS BLOB DETERMINISTIC
RETURN RPAD(@extra_string,(@@innodb_page_size / 2 ) + 1,'a');
SELECT CONCAT('->', SUBSTR(f_col_blob(my_col) FROM 1 FOR 10),
'<-.....->', SUBSTR(f_col_blob(my_col) FROM -10 FOR 10), '<-') AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
->__1_aaaaaa<-.....->aaaaaaaaaa<-
->__1_aaaaaa<-.....->aaaaaaaaaa<-
->__1_aaaaaa<-.....->aaaaaaaaaa<-
->__1_aaaaaa<-.....->aaaaaaaaaa<-
->__1_aaaaaa<-.....->aaaaaaaaaa<-
CREATE FUNCTION f_col_char0 (i INT) RETURNS CHAR(255) DETERMINISTIC
RETURN LPAD(CAST(i AS CHAR),255,' ');
SELECT CONCAT('->', f_col_char0(my_col), '<-') AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
->                                                                                                                                                                                                                                                              1<-
->                                                                                                                                                                                                                                                             12<-
->                                                                                                                                                                                                                                                            123<-
->                                                                                                                                                                                                                                                           1234<-
->                                                                                                                                                                                                                                                          12345<-
CREATE FUNCTION f_col_char1 (i INT) RETURNS CHAR(26) DETERMINISTIC
RETURN
CONCAT('B',
LPAD(SUBSTR(CAST(i AS CHAR),1,(LENGTH(CAST(i AS CHAR)) DIV 2)),10,' '),
@extra_string,
RPAD(SUBSTR(CAST(i AS CHAR), -((LENGTH(CAST(i AS CHAR)) + 1) DIV 2)),10,' '),
'E') ;
SELECT CONCAT('->', f_col_char1(my_col), '<-') AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
->B          __1_1         E<-
->B         1__1_2         E<-
->B         1__1_23        E<-
->B        12__1_34        E<-
->B        12__1_345       E<-
CREATE FUNCTION f_col_char2 (i INT) RETURNS CHAR(26) DETERMINISTIC
RETURN
CONCAT('B',
RPAD(SUBSTR(CAST(i AS CHAR),1,(LENGTH(CAST(i AS CHAR)) DIV 2)),10,' '),
@extra_string,
LPAD(SUBSTR(CAST(i AS CHAR), -((LENGTH(CAST(i AS CHAR)) + 1) DIV 2)),10,' '),
'E');
SELECT CONCAT('->', f_col_char2(my_col), '<-') AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
->B          __1_         1E<-
->B1         __1_         2E<-
->B1         __1_        23E<-
->B12        __1_        34E<-
->B12        __1_       345E<-
CREATE FUNCTION f_col_char3 (i INT) RETURNS CHAR(26) DETERMINISTIC
RETURN
CONCAT('B',@extra_string,LPAD(CAST(i AS CHAR),20,' '),'E');
SELECT CONCAT('->', f_col_char3(my_col), '<-') AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
->B__1_                   1E<-
->B__1_                  12E<-
->B__1_                 123E<-
->B__1_                1234E<-
->B__1_               12345E<-
CREATE FUNCTION f_col_char4 (i INT) RETURNS CHAR(26) DETERMINISTIC
RETURN
CONCAT('B',RPAD(CAST(i AS CHAR),20,' '),@extra_string,'E');
SELECT CONCAT('->', f_col_char4(my_col), '<-') AS my_result
FROM (SELECT 1 AS my_col UNION SELECT 12 UNION SELECT 123
UNION SELECT 1234 UNION SELECT 12345) AS tx;
my_result
->B1                   __1_E<-
->B12                  __1_E<-
->B123                 __1_E<-
->B1234                __1_E<-
->B12345               __1_E<-
CREATE TABLE my_metrics LIKE information_schema.innodb_metrics;
ALTER TABLE my_metrics ADD COLUMN phase ENUM('after', 'before'),
DROP COLUMN SUBSYSTEM, DROP COLUMN TYPE, DROP COLUMN COMMENT,
ADD PRIMARY KEY (NAME,phase);
CREATE TABLE t1 (
col_int0 BIGINT,
col_int1 BIGINT,
col_int2 BIGINT,
col_int3 BIGINT,
col_blob BLOB,
col_char0 VARCHAR(255),
col_char1 VARCHAR(30),
col_char2 VARCHAR(30),
col_char3 VARCHAR(30),
col_char4 VARCHAR(30)
) ENGINE = InnoDB;
ALTER TABLE t1 ADD UNIQUE KEY uidx_col_int0 (col_int0),
ADD UNIQUE KEY uidx1 (col_int1, col_char0),
ADD UNIQUE KEY uidx2 (col_int2, col_char0, col_int1),
ADD UNIQUE KEY uidx3 (col_int3, col_int2, col_char0),
ADD UNIQUE KEY uidx4 (col_char1, col_char0),
ADD UNIQUE KEY uidx5 (col_char2, col_char0, col_char1),
ADD UNIQUE KEY uidx6 (col_char3, col_char2, col_char0),
ADD UNIQUE KEY uidx7 (col_int1, col_int2, col_int3, col_char4,
col_char1, col_char2, col_char3, col_char0),
ADD KEY idx8 (col_blob(10), col_char4);
CREATE PROCEDURE proc_fill_t1 (max_row_count INT, load_unit INT)
BEGIN
DECLARE my_count INTEGER DEFAULT 0;
DECLARE max_load_count INTEGER DEFAULT 0;
DROP TABLE IF EXISTS t0;
CREATE TEMPORARY TABLE t0 (col_int0 BIGINT, PRIMARY KEY(col_int0));
WHILE (my_count < load_unit ) DO
SET my_count = my_count + 1;
INSERT INTO t0 SET col_int0 = my_count;
END WHILE;
SET max_load_count = (SELECT (max_row_count DIV load_unit) + 1 );
SELECT COUNT(col_int0) INTO @val FROM t1;
SET my_count = 0;
REPEAT
INSERT INTO t1 (col_int0, col_int1, col_int2, col_int3, col_blob,
col_char0, col_char1, col_char2,col_char3,col_char4)
SELECT col_int0 + @val,
f_col_int1(col_int0 + @val),
f_col_int2(col_int0 + @val),
f_col_int3(col_int0 + @val),
f_col_blob(col_int0 + @val),
f_col_char0(col_int0 + @val),
f_col_char1(col_int0 + @val),
f_col_char2(col_int0 + @val),
f_col_char3(col_int0 + @val),
f_col_char4(col_int0 + @val)
FROM t0;
COMMIT;
SELECT MAX(col_int0) INTO @val FROM t1;
SET my_count = my_count + 1;
UNTIL( my_count > max_load_count OR @val >= max_row_count )
END REPEAT;
DROP TEMPORARY TABLE t0;
END|
CREATE PROCEDURE proc_dml (max_duration INT, t1_stripe_half INT)
BEGIN
DECLARE aux INTEGER DEFAULT 0;
DECLARE start_time INT;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND BEGIN END;
SET @extra_int    = CONNECTION_ID();
SET @extra_string = f_thread_id(@extra_int);
SELECT ROUND(MAX(col_int0) / 2 ) INTO @t1_half FROM t1;
# The user lock 'Blocker' should be already set by some other session S1.
# S1 starts the race by releasing that lock.
# Wait till the lock is released and the lock can be obtained.
# In order to prevent endless waiting in case of non foreseen problems
# limit the timespan to 30 seconds.
SELECT GET_LOCK('Blocker', 30) INTO @aux;
# Release the lock immediate so that the other "runner" sessions start too.
SELECT RELEASE_LOCK('Blocker') INTO @aux;
SET start_time = UNIX_TIMESTAMP();
WHILE (UNIX_TIMESTAMP() - start_time < max_duration) DO
SET @aux = @t1_half - t1_stripe_half + ROUND(RAND() * t1_stripe_half * 2);
UPDATE t1 SET
col_int1  = f_col_int1(col_int0),
col_int2  = f_col_int2(col_int0),
col_int3  = f_col_int3(col_int0),
col_blob  = f_col_blob(col_int0),
col_char0 = f_col_char0(col_int0),
col_char1 = f_col_char1(col_int0),
col_char2 = f_col_char2(col_int0),
col_char3 = f_col_char3(col_int0),
col_char4 = f_col_char4(col_int0)
WHERE col_int0 = @aux;
COMMIT;
END WHILE;
END|
SET GLOBAL innodb_monitor_disable = "innodb_rwlock_sx_%";
SET @pre_reset_ts = NOW();
SET GLOBAL innodb_monitor_reset   = "innodb_rwlock_sx_%";
SET @pre_enable_ts = NOW();
SET GLOBAL innodb_monitor_enable  = "innodb_rwlock_sx_%";
SET @pre_collect_ts = NOW();
DELETE FROM my_metrics;
INSERT INTO my_metrics
SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT,
COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET,
TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET,
STATUS, 'before'
FROM information_schema.innodb_metrics
WHERE NAME LIKE 'innodb_rwlock_sx_%';
# TC-01 There are exact three entries "innodb_rwlock_sx_%" with the
#       with the name which follow in innodb_metrics.
#    pass
SELECT COUNT(*) INTO @sx_count FROM my_metrics;
# TC-02 Counting is now enabled. ALL = @sx_count entries show that.
#    pass
# TC-03 @pre_reset_ts < TIME_RESET. ALL = @sx_count entries show that.
#    pass
# TC-04 @pre_enable_ts < TIME_ENABLED. ALL = @sx_count entries show that.
#    pass
# TC-05 TIME_RESET < TIME_ENABLED AND TIME_ENABLED < @pre_collect_ts
#       AND TIME_ELAPSED > 0. ALL = @sx_count entries show that.
#    pass
# TC-06 COUNT_RESET = MAX_COUNT_RESET. ALL = @sx_count entries show that.
#    pass
SET GLOBAL innodb_monitor_reset = "innodb_rwlock_sx_%";
SHOW ENGINE INNODB STATUS;
DELETE FROM my_metrics;
INSERT INTO my_metrics
SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT,
COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET,
TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET,
STATUS, 'before'
FROM information_schema.innodb_metrics
WHERE NAME LIKE 'innodb_rwlock_sx_%';
SET @extra_string = '__0_';
SET @extra_int    =    0;
# TC-07 One session inserts some significant amount of rows into t1.
#       The system MUST survive that.
SET @max_row_count = <max_row_count>;
SET @load_unit = <load_unit>;
SET @start_time = UNIX_TIMESTAMP();
SET AUTOCOMMIT = OFF;
CALL proc_fill_t1 (@max_row_count, @load_unit);
#    pass
SET AUTOCOMMIT = ON;
SELECT col_int0 INTO @t1_half FROM t1
WHERE col_int0 >= (@val DIV 2) ORDER BY col_int0 LIMIT 1;
SHOW ENGINE INNODB STATUS;
SELECT col_int0, col_int1, col_int2, col_int3,
CONCAT('->', SUBSTR(col_blob FROM 1 FOR 10),
'<-.....->', SUBSTR(col_blob FROM -10 FOR 10), '<-') AS  col_blobx,
CONCAT('->',col_char0,'<-') AS col_char0x,
CONCAT('->',col_char1,'<-') AS col_char1x,
CONCAT('->',col_char2,'<-') AS col_char2x,
CONCAT('->',col_char3,'<-') AS col_char3x,
CONCAT('->',col_char4,'<-') AS col_char4x
FROM t1 WHERE col_int0 between 98 AND 102;
col_int0	98
col_int1	98000
col_int2	98
col_int3	0
col_blobx	->__0_aaaaaa<-.....->aaaaaaaaaa<-
col_char0x	->                                                                                                                                                                                                                                                             98<-
col_char1x	->B         9__0_8         E<-
col_char2x	->B9         __0_         8E<-
col_char3x	->B__0_                  98E<-
col_char4x	->B98                  __0_E<-
col_int0	99
col_int1	99000
col_int2	99
col_int3	0
col_blobx	->__0_aaaaaa<-.....->aaaaaaaaaa<-
col_char0x	->                                                                                                                                                                                                                                                             99<-
col_char1x	->B         9__0_9         E<-
col_char2x	->B9         __0_         9E<-
col_char3x	->B__0_                  99E<-
col_char4x	->B99                  __0_E<-
col_int0	100
col_int1	100000
col_int2	100
col_int3	0
col_blobx	->__0_aaaaaa<-.....->aaaaaaaaaa<-
col_char0x	->                                                                                                                                                                                                                                                            100<-
col_char1x	->B         1__0_00        E<-
col_char2x	->B1         __0_        00E<-
col_char3x	->B__0_                 100E<-
col_char4x	->B100                 __0_E<-
col_int0	101
col_int1	101000
col_int2	101
col_int3	0
col_blobx	->__0_aaaaaa<-.....->aaaaaaaaaa<-
col_char0x	->                                                                                                                                                                                                                                                            101<-
col_char1x	->B         1__0_01        E<-
col_char2x	->B1         __0_        01E<-
col_char3x	->B__0_                 101E<-
col_char4x	->B101                 __0_E<-
col_int0	102
col_int1	102000
col_int2	102
col_int3	0
col_blobx	->__0_aaaaaa<-.....->aaaaaaaaaa<-
col_char0x	->                                                                                                                                                                                                                                                            102<-
col_char1x	->B         1__0_02        E<-
col_char2x	->B1         __0_        02E<-
col_char3x	->B__0_                 102E<-
col_char4x	->B102                 __0_E<-
# TC-11 Several concurrent sessions perform updates in t1 like mad.
#       The system MUST survive this.
#       Printing of statements is partially suppressed.
SET @start_time = UNIX_TIMESTAMP();
SELECT 1 FROM t1 WHERE col_int0 = @t1_half FOR UPDATE;
1
1
SELECT GET_LOCK('Blocker', 1000) ;
GET_LOCK('Blocker', 1000)
1
RELEASE_LOCK('Blocker')
1
#    pass
SHOW ENGINE INNODB STATUS;
# TC-13 One session performs ALTER TABLE t1 ADD KEY ... on the fat table t1.
#       The system MUST survive this.
SET @start_time = UNIX_TIMESTAMP();
ALTER TABLE t1 ADD KEY idx_col_char4_col_char0 (col_char4,col_char0);
SHOW ENGINE INNODB STATUS;
#    pass
# TC-15 One session performs a fat update on the fat table t1.
#       The system MUST survive this.
SET @start_time   = UNIX_TIMESTAMP();
SET @extra_int    = 13;
SET @extra_string = f_thread_id(@extra_int);
UPDATE t1 SET
col_int1  = f_col_int1(col_int0),  col_int2  = f_col_int2(col_int0),
col_int3  = f_col_int3(col_int0),  col_blob  = f_col_blob(col_int0),
col_char0 = f_col_char0(col_int0), col_char1 = f_col_char1(col_int0),
col_char2 = f_col_char2(col_int0), col_char3 = f_col_char3(col_int0),
col_char4 = f_col_char4(col_int0)
WHERE col_int0 BETWEEN @t1_half - 2500 AND @t1_half + 2500;
COMMIT;
SHOW ENGINE INNODB STATUS;
#    pass
INSERT INTO my_metrics
SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT,
COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET,
TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET,
STATUS, 'after'
FROM information_schema.innodb_metrics
WHERE NAME LIKE 'innodb_rwlock_sx_%';
# TC-16 The following activities happend after reset in innodb_metrics
#       - Insert some significant amount of rows into t1.
#       - Several concurrent users perform excessive updates in t1.
#       - ALTER TABLE ... ADD KEY <sufficient big enough structure>
#       - One UPDATE statement modifying a huge slice of t1.
#       Any of them causes heavy use of SX lock and therefore COUNT_RESET
#       must have grown for ALL = @sx_count entries.
#    pass
# TC-09 Heavy activity after reset.
#       COUNT_RESET = MAX_COUNT_RESET for ALL = @sx_count entries
#       needs to stay valid though he counters will have grown.
#    pass
DELETE FROM my_metrics;
INSERT INTO my_metrics
SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT,
COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET,
TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET,
STATUS, 'before'
FROM information_schema.innodb_metrics
WHERE NAME LIKE 'innodb_rwlock_sx_%';
SET GLOBAL innodb_monitor_reset = "innodb_rwlock_sx_%";
INSERT INTO my_metrics
SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT,
COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET,
TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET,
STATUS, 'after'
FROM information_schema.innodb_metrics
WHERE NAME LIKE 'innodb_rwlock_sx_%';
# TC-08 There was a reset. COUNT_RESET = MAX_COUNT_RESET for ALL
#       = @sx_count entries.
#    pass
# TC-17 We had heavy activity causing big counters and after that a reset.
#       Reset causes COUNT > COUNT_RESET AND MAX_COUNT > MAX_COUNT_RESET
#       for ALL @sx_count entries.
#    pass
# TC-18 We had some reset but this must not decrease COUNT or MAX_COUNT
#       after.COUNT >= before.COUNT AND
#       after.MAX_COUNT >= before.MAX_COUNT for ALL @sx_count entries.
#    pass
# TC-19 We had some reset after heavy activity and this must cause
#       after.COUNT_RESET < before.COUNT_RESET
#       AND after.MAX_COUNT_RESET < before.MAX_COUNT_RESET AND
#       for ALL @sx_count entries.
#    pass
connection con10;
disconnect con10;
connection con9;
disconnect con9;
connection con8;
disconnect con8;
connection con7;
disconnect con7;
connection con6;
disconnect con6;
connection con5;
disconnect con5;
connection con4;
disconnect con4;
connection con3;
disconnect con3;
connection con2;
disconnect con2;
connection con1;
disconnect con1;
connection default;
USE test;
DROP SCHEMA my_schema;
SET GLOBAL innodb_monitor_disable   = all;
SET GLOBAL innodb_monitor_reset_all = all;
SET GLOBAL innodb_monitor_enable    = default;
SET GLOBAL innodb_monitor_disable   = default;
SET GLOBAL innodb_monitor_reset     = default;
SET GLOBAL innodb_monitor_reset_all = default;
SET GLOBAL innodb_monitor_disable   = "innodb_rwlock_sx_%";
SET GLOBAL innodb_monitor_reset     = "innodb_rwlock_sx_%";