mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 03:47:17 +02:00
MDEV-37482: Introduce innodb_adaptive_hash_index_cells
SET GLOBAL innodb_adaptive_hash_index_cells may be executed while the server is running. This parameter will be effectively multiplied by innodb_adaptive_hash_index_parts, because each partition will contain its own hash table. Previously, the number of hash table cells in the InnoDB adaptive hash index depended on the initial innodb_buffer_pool_size and was insufficient for some workloads, leading to excessively long hash bucket chains. If innodb_adaptive_hash_index_cells is at its minimum and default value 16381 at startup, it will be derived from the innodb_buffer_pool_size, for backward compatibility.
This commit is contained in:
parent
9654b816f3
commit
3cc9ac0b30
7 changed files with 174 additions and 75 deletions
|
|
@ -19,6 +19,8 @@ DROP TEMPORARY TABLE t;
|
|||
#
|
||||
SET @save_ahi = @@global.innodb_adaptive_hash_index;
|
||||
SET GLOBAL innodb_adaptive_hash_index = 1;
|
||||
SET @save_ahi_cells = @@global.innodb_adaptive_hash_index_cells;
|
||||
SET GLOBAL innodb_adaptive_hash_index_cells=1048576;
|
||||
CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
|
||||
SET @old_bulk_op=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
|
|
@ -43,6 +45,7 @@ INSERT INTO t1 SELECT * FROM seq_1_to_500;
|
|||
ROLLBACK;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_adaptive_hash_index = @save_ahi;
|
||||
SET GLOBAL innodb_adaptive_hash_index_cells = @save_ahi_cells;
|
||||
#
|
||||
# MDEV-24951 Assertion m.first->second.valid(trx->undo_no) failed
|
||||
# in trx_undo_report_row_operation
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ DROP TEMPORARY TABLE t;
|
|||
--echo #
|
||||
SET @save_ahi = @@global.innodb_adaptive_hash_index;
|
||||
SET GLOBAL innodb_adaptive_hash_index = 1;
|
||||
SET @save_ahi_cells = @@global.innodb_adaptive_hash_index_cells;
|
||||
SET GLOBAL innodb_adaptive_hash_index_cells=1048576;
|
||||
CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
|
||||
|
||||
SET @old_bulk_op=
|
||||
|
|
@ -49,6 +51,7 @@ INSERT INTO t1 SELECT * FROM seq_1_to_500;
|
|||
ROLLBACK;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_adaptive_hash_index = @save_ahi;
|
||||
SET GLOBAL innodb_adaptive_hash_index_cells = @save_ahi_cells;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24951 Assertion m.first->second.valid(trx->undo_no) failed
|
||||
|
|
|
|||
|
|
@ -1,6 +1,15 @@
|
|||
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result
|
||||
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
|
||||
@@ -47,7 +47,7 @@
|
||||
@@ -51,7 +51,7 @@
|
||||
VARIABLE_TYPE INT UNSIGNED
|
||||
VARIABLE_COMMENT Number of adaptive hash table cells in each partition; 16381 at start defaults to being derived from innodb_buffer_pool_size
|
||||
NUMERIC_MIN_VALUE 16381
|
||||
-NUMERIC_MAX_VALUE 4294967295
|
||||
+NUMERIC_MAX_VALUE 1073741823
|
||||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@@ -60,7 +60,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 8
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -9,7 +18,7 @@
|
|||
VARIABLE_COMMENT Number of InnoDB Adaptive Hash Index Partitions (default 8)
|
||||
NUMERIC_MIN_VALUE 1
|
||||
NUMERIC_MAX_VALUE 512
|
||||
@@ -83,7 +83,7 @@
|
||||
@@ -96,7 +96,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 1
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -18,7 +27,7 @@
|
|||
VARIABLE_COMMENT The AUTOINC lock modes supported by InnoDB: 0 => Old style AUTOINC locking (for backward compatibility); 1 => New style AUTOINC locking; 2 => No AUTOINC locking (unsafe for SBR)
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 2
|
||||
@@ -95,10 +95,10 @@
|
||||
@@ -108,10 +108,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -31,7 +40,7 @@
|
|||
NUMERIC_BLOCK_SIZE 1048576
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY YES
|
||||
@@ -131,7 +131,7 @@
|
||||
@@ -144,7 +144,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 25
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -40,7 +49,7 @@
|
|||
VARIABLE_COMMENT Dump only the hottest N% of each buffer pool, defaults to 25
|
||||
NUMERIC_MIN_VALUE 1
|
||||
NUMERIC_MAX_VALUE 100
|
||||
@@ -203,10 +203,10 @@
|
||||
@@ -216,10 +216,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 134217728
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -53,7 +62,7 @@
|
|||
NUMERIC_BLOCK_SIZE 1048576
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@@ -215,11 +215,11 @@
|
||||
@@ -228,11 +228,11 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -68,7 +77,7 @@
|
|||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
@@ -227,11 +227,11 @@
|
||||
@@ -240,11 +240,11 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -83,7 +92,7 @@
|
|||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY YES
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
@@ -239,7 +239,7 @@
|
||||
@@ -252,7 +252,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -92,7 +101,7 @@
|
|||
VARIABLE_COMMENT A number that tells how often buffer pool dump status in percentages should be printed. E.g. 10 means that buffer pool dump status is printed when every 10% of number of buffer pool pages are dumped. Default is 0 (only start and end status is printed)
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 100
|
||||
@@ -311,7 +311,7 @@
|
||||
@@ -324,7 +324,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 5
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -101,7 +110,7 @@
|
|||
VARIABLE_COMMENT If the compression failure rate of a table is greater than this number more padding is added to the pages to reduce the failures. A value of zero implies no padding
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 100
|
||||
@@ -335,7 +335,7 @@
|
||||
@@ -348,7 +348,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 50
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -110,7 +119,7 @@
|
|||
VARIABLE_COMMENT Percentage of empty space on a data page that can be reserved to make the page compressible
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 75
|
||||
@@ -575,7 +575,7 @@
|
||||
@@ -588,7 +588,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 600
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -119,7 +128,7 @@
|
|||
VARIABLE_COMMENT Maximum number of seconds that semaphore times out in InnoDB
|
||||
NUMERIC_MIN_VALUE 1
|
||||
NUMERIC_MAX_VALUE 4294967295
|
||||
@@ -623,7 +623,7 @@
|
||||
@@ -636,7 +636,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 30
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -128,7 +137,7 @@
|
|||
VARIABLE_COMMENT Number of iterations over which the background flushing is averaged
|
||||
NUMERIC_MIN_VALUE 1
|
||||
NUMERIC_MAX_VALUE 1000
|
||||
@@ -647,7 +647,7 @@
|
||||
@@ -660,7 +660,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 1
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -137,7 +146,7 @@
|
|||
VARIABLE_COMMENT Controls the durability/speed trade-off for commits. Set to 0 (write and flush redo log to disk only once per second), 1 (flush to disk at each commit), 2 (write to log at commit but flush to disk only once per second) or 3 (flush to disk at prepare and at commit, slower and usually redundant). 1 and 3 guarantees that after a crash, committed transactions will not be lost and will be consistent with the binlog and other transactional engines. 2 can get inconsistent and lose transactions if there is a power failure or kernel crash but not if mysqld crashes. 0 has no guarantees in case of crash. 0 and 2 can be faster than 1 or 3
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 3
|
||||
@@ -671,7 +671,7 @@
|
||||
@@ -684,7 +684,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 1
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -146,7 +155,7 @@
|
|||
VARIABLE_COMMENT Set to 0 (don't flush neighbors from buffer pool), 1 (flush contiguous neighbors from buffer pool) or 2 (flush neighbors from buffer pool), when flushing a block
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 2
|
||||
@@ -707,7 +707,7 @@
|
||||
@@ -720,7 +720,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -155,7 +164,7 @@
|
|||
VARIABLE_COMMENT Helps to save your data in case the disk image of the database becomes corrupt. Value 5 can return bogus data, and 6 can permanently corrupt data
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 6
|
||||
@@ -731,10 +731,10 @@
|
||||
@@ -744,10 +744,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 8000000
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -168,7 +177,7 @@
|
|||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@@ -767,7 +767,7 @@
|
||||
@@ -780,7 +780,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 84
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -177,7 +186,7 @@
|
|||
VARIABLE_COMMENT InnoDB Fulltext search maximum token size in characters
|
||||
NUMERIC_MIN_VALUE 10
|
||||
NUMERIC_MAX_VALUE 84
|
||||
@@ -779,7 +779,7 @@
|
||||
@@ -792,7 +792,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 3
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -186,7 +195,7 @@
|
|||
VARIABLE_COMMENT InnoDB Fulltext search minimum token size in characters
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 16
|
||||
@@ -791,7 +791,7 @@
|
||||
@@ -804,7 +804,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 2000
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -195,7 +204,7 @@
|
|||
VARIABLE_COMMENT InnoDB Fulltext search number of words to optimize for each optimize table call
|
||||
NUMERIC_MIN_VALUE 1000
|
||||
NUMERIC_MAX_VALUE 10000
|
||||
@@ -803,10 +803,10 @@
|
||||
@@ -816,10 +816,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 2000000000
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -208,7 +217,7 @@
|
|||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@@ -827,7 +827,7 @@
|
||||
@@ -840,7 +840,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 2
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -217,7 +226,7 @@
|
|||
VARIABLE_COMMENT InnoDB Fulltext search parallel sort degree, will round up to nearest power of 2 number
|
||||
NUMERIC_MIN_VALUE 1
|
||||
NUMERIC_MAX_VALUE 16
|
||||
@@ -839,10 +839,10 @@
|
||||
@@ -852,10 +852,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 640000000
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -230,7 +239,7 @@
|
|||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@@ -887,7 +887,7 @@
|
||||
@@ -900,7 +900,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 200
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -239,7 +248,7 @@
|
|||
VARIABLE_COMMENT Number of IOPs the server can do. Tunes the background IO rate
|
||||
NUMERIC_MIN_VALUE 100
|
||||
NUMERIC_MAX_VALUE 4294967295
|
||||
@@ -899,7 +899,7 @@
|
||||
@@ -912,7 +912,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 4294967295
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -248,7 +257,7 @@
|
|||
VARIABLE_COMMENT Limit to which innodb_io_capacity can be inflated
|
||||
NUMERIC_MIN_VALUE 100
|
||||
NUMERIC_MAX_VALUE 4294967295
|
||||
@@ -1031,10 +1031,10 @@
|
||||
@@ -1044,10 +1044,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 32
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -261,7 +270,7 @@
|
|||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@@ -1043,10 +1043,10 @@
|
||||
@@ -1056,10 +1056,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 1536
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -274,7 +283,7 @@
|
|||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@@ -1079,10 +1079,10 @@
|
||||
@@ -1092,10 +1092,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -287,7 +296,7 @@
|
|||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
@@ -1091,7 +1091,7 @@
|
||||
@@ -1104,7 +1104,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -296,7 +305,7 @@
|
|||
VARIABLE_COMMENT Maximum delay of user threads in micro-seconds
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 10000000
|
||||
@@ -1223,10 +1223,10 @@
|
||||
@@ -1236,10 +1236,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 0
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -309,7 +318,7 @@
|
|||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY YES
|
||||
@@ -1247,7 +1247,7 @@
|
||||
@@ -1260,7 +1260,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 16384
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -318,7 +327,7 @@
|
|||
VARIABLE_COMMENT Page size to use for all InnoDB tablespaces
|
||||
NUMERIC_MIN_VALUE 4096
|
||||
NUMERIC_MAX_VALUE 65536
|
||||
@@ -1283,7 +1283,7 @@
|
||||
@@ -1296,7 +1296,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 127
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -327,7 +336,7 @@
|
|||
VARIABLE_COMMENT Number of UNDO log pages to purge in one batch from the history list
|
||||
NUMERIC_MIN_VALUE 1
|
||||
NUMERIC_MAX_VALUE 5000
|
||||
@@ -1295,7 +1295,7 @@
|
||||
@@ -1308,7 +1308,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 128
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -336,7 +345,7 @@
|
|||
VARIABLE_COMMENT Unused
|
||||
NUMERIC_MIN_VALUE 1
|
||||
NUMERIC_MAX_VALUE 128
|
||||
@@ -1331,7 +1331,7 @@
|
||||
@@ -1344,7 +1344,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 56
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -345,7 +354,7 @@
|
|||
VARIABLE_COMMENT Number of pages that must be accessed sequentially for InnoDB to trigger a readahead
|
||||
NUMERIC_MIN_VALUE 0
|
||||
NUMERIC_MAX_VALUE 64
|
||||
@@ -1415,7 +1415,7 @@
|
||||
@@ -1428,7 +1428,7 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 1048576
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
@ -354,7 +363,7 @@
|
|||
VARIABLE_COMMENT Memory buffer size for index creation
|
||||
NUMERIC_MIN_VALUE 65536
|
||||
NUMERIC_MAX_VALUE 67108864
|
||||
@@ -1583,10 +1583,10 @@
|
||||
@@ -1596,10 +1596,10 @@
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 30
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
|
|
|
|||
|
|
@ -44,6 +44,18 @@ NUMERIC_BLOCK_SIZE NULL
|
|||
ENUM_VALUE_LIST OFF,ON
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT OPTIONAL
|
||||
VARIABLE_NAME INNODB_ADAPTIVE_HASH_INDEX_CELLS
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 16381
|
||||
VARIABLE_SCOPE GLOBAL
|
||||
VARIABLE_TYPE INT UNSIGNED
|
||||
VARIABLE_COMMENT Number of adaptive hash table cells in each partition; 16381 at start defaults to being derived from innodb_buffer_pool_size
|
||||
NUMERIC_MIN_VALUE 16381
|
||||
NUMERIC_MAX_VALUE 4294967295
|
||||
NUMERIC_BLOCK_SIZE 0
|
||||
ENUM_VALUE_LIST NULL
|
||||
READ_ONLY NO
|
||||
COMMAND_LINE_ARGUMENT REQUIRED
|
||||
VARIABLE_NAME INNODB_ADAPTIVE_HASH_INDEX_PARTS
|
||||
SESSION_VALUE NULL
|
||||
DEFAULT_VALUE 8
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue