|
| 1 | +# |
| 2 | +# Basic test for InnoDB adaptive hash index partitions. |
| 3 | +# TODO: add another testcase that uses DEBUG_SYNC to check the partition locking |
| 4 | +# |
| 5 | +--source include/have_innodb.inc |
| 6 | + |
| 7 | +# Check setup |
| 8 | +SELECT @@GLOBAL.innodb_adaptive_hash_index; |
| 9 | +SELECT @@GLOBAL.innodb_adaptive_hash_index_parts; |
| 10 | + |
| 11 | +SET GLOBAL innodb_monitor_enable=module_adaptive_hash; |
| 12 | + |
| 13 | +# 6 index trees across 4 AHI partitions |
| 14 | +CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c CHAR(200), UNIQUE INDEX b(b)) ENGINE=InnoDB; |
| 15 | +CREATE TABLE t2 (a INT PRIMARY KEY, b INT, c CHAR(200), UNIQUE INDEX b(b)) ENGINE=InnoDB; |
| 16 | +CREATE TABLE t3 (a INT PRIMARY KEY, b INT, c CHAR(200), UNIQUE INDEX b(b)) ENGINE=InnoDB; |
| 17 | + |
| 18 | +--echo Filling tables |
| 19 | +--disable_query_log |
| 20 | +let $i=3; |
| 21 | +while ($i) |
| 22 | +{ |
| 23 | + eval INSERT INTO t1 VALUES ($i, $i, REPEAT("a", 200)); |
| 24 | + eval INSERT INTO t2 VALUES ($i, $i, REPEAT("a", 200)); |
| 25 | + eval INSERT INTO t3 VALUES ($i, $i, REPEAT("a", 200)); |
| 26 | + dec $i; |
| 27 | +} |
| 28 | + |
| 29 | +--echo Querying |
| 30 | +--disable_result_log |
| 31 | +let $i=200; |
| 32 | +while ($i) |
| 33 | +{ |
| 34 | + SELECT b FROM t1 WHERE a=1; |
| 35 | + SELECT a FROM t1 WHERE b=1; |
| 36 | + SELECT b FROM t2 WHERE a=2; |
| 37 | + SELECT a FROM t2 WHERE b=2; |
| 38 | + SELECT b FROM t3 WHERE a=3; |
| 39 | + SELECT a FROM t3 WHERE b=3; |
| 40 | + dec $i; |
| 41 | +} |
| 42 | +--enable_result_log |
| 43 | +--enable_query_log |
| 44 | + |
| 45 | +# Some buffer pool pages should be hashed |
| 46 | +SELECT COUNT >= 6 as should_be_1 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'adaptive_hash_pages_added'; |
| 47 | +# Some rows should be hashed |
| 48 | +SELECT COUNT >= 6 as should_be_1 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'adaptive_hash_rows_added'; |
| 49 | +# AHI should have been used for queries, but the exact lower bound is hard to determine |
| 50 | +SELECT COUNT > 0 as should_be_1 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME = 'adaptive_hash_searches'; |
| 51 | + |
| 52 | +# Buffer pool must contain AHI pages now |
| 53 | +SELECT COUNT(*) > 0 AS should_be_1 FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE |
| 54 | + WHERE PAGE_STATE LIKE "MEMORY"; |
| 55 | + |
| 56 | +# Buffer pool must contain no less than the number of index trees hashed pages now |
| 57 | +SELECT COUNT(*) >= 6 AS should_be_1 FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE |
| 58 | + WHERE IS_HASHED LIKE "YES"; |
| 59 | + |
| 60 | +SET GLOBAL innodb_monitor_disable=module_adaptive_hash; |
| 61 | + |
| 62 | +DROP TABLE t1, t2, t3; |
| 63 | + |
| 64 | +--disable_warnings |
| 65 | +SET GLOBAL innodb_monitor_enable=default; |
| 66 | +SET GLOBAL innodb_monitor_disable=default; |
| 67 | +--enable_warnings |
0 commit comments