Commit 1dc75e2e authored by Sergei Golubchik's avatar Sergei Golubchik

mhnsw: inter-statement shared cache

* preserve the graph in memory between statements
* keep it in a TABLE_SHARE, available for concurrent searches
* nodes are generally read-only, walking the graph doesn't change them
* distance to target is cached, calculated only once
* SIMD-optimized bloom filter detects visited nodes
* nodes are stored in an array, not List, to better utilize bloom filter
* auto-adjusting heuristic to estimate the number of visited nodes
  (to configure the bloom filter)
* many threads can concurrently walk the graph. MEM_ROOT and Hash_set
  are protected with a mutex, but walking doesn't need them
* up to 8 threads can concurrently load nodes into the cache,
  nodes are partitioned into 8 mutexes (8 is chosen arbitrarily, might
  need tuning)
* concurrent editing is not supported though
* this is fine for MyISAM, TL_WRITE protects the TABLE_SHARE and the
  graph (note that TL_WRITE_CONCURRENT_INSERT is not allowed, because an
  INSERT into the main table means multiple UPDATEs in the graph)
* InnoDB uses secondary transaction-level caches linked in a list in
  in thd->ha_data via a fake handlerton
* on rollback the secondary cache is discarded, on commit nodes
  from the secondary cache are invalidated in the shared cache
  while it is exclusively locked
* on savepoint rollback both caches are flushed. this can be improved
  in the future with a row visibility callback
* graph size is controlled by @@mhnsw_cache_size, the cache is flushed
  when it reaches the threshold
parent a2b1b629
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#cmakedefine HAVE_IA64INTRIN_H 1 #cmakedefine HAVE_IA64INTRIN_H 1
#cmakedefine HAVE_IEEEFP_H 1 #cmakedefine HAVE_IEEEFP_H 1
#cmakedefine HAVE_INTTYPES_H 1 #cmakedefine HAVE_INTTYPES_H 1
#cmakedefine HAVE_IMMINTRIN_H 1
#cmakedefine HAVE_KQUEUE 1 #cmakedefine HAVE_KQUEUE 1
#cmakedefine HAVE_LIMITS_H 1 #cmakedefine HAVE_LIMITS_H 1
#cmakedefine HAVE_LINK_H 1 #cmakedefine HAVE_LINK_H 1
......
...@@ -187,6 +187,7 @@ CHECK_INCLUDE_FILES (fpu_control.h HAVE_FPU_CONTROL_H) ...@@ -187,6 +187,7 @@ CHECK_INCLUDE_FILES (fpu_control.h HAVE_FPU_CONTROL_H)
CHECK_INCLUDE_FILES (grp.h HAVE_GRP_H) CHECK_INCLUDE_FILES (grp.h HAVE_GRP_H)
CHECK_INCLUDE_FILES (ieeefp.h HAVE_IEEEFP_H) CHECK_INCLUDE_FILES (ieeefp.h HAVE_IEEEFP_H)
CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H) CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H)
CHECK_INCLUDE_FILES (immintrin.h HAVE_IMMINTRIN_H)
CHECK_INCLUDE_FILES (langinfo.h HAVE_LANGINFO_H) CHECK_INCLUDE_FILES (langinfo.h HAVE_LANGINFO_H)
CHECK_INCLUDE_FILES (link.h HAVE_LINK_H) CHECK_INCLUDE_FILES (link.h HAVE_LINK_H)
CHECK_INCLUDE_FILES (linux/unistd.h HAVE_LINUX_UNISTD_H) CHECK_INCLUDE_FILES (linux/unistd.h HAVE_LINUX_UNISTD_H)
......
...@@ -947,6 +947,12 @@ extern LEX_STRING lex_string_casedn_root(MEM_ROOT *root, ...@@ -947,6 +947,12 @@ extern LEX_STRING lex_string_casedn_root(MEM_ROOT *root,
CHARSET_INFO *cs, CHARSET_INFO *cs,
const char *str, size_t length); const char *str, size_t length);
static inline size_t root_size(MEM_ROOT *root)
{
size_t k = root->block_num >> 2;
return k * (k + 1) * 2 * root->block_size;
}
extern my_bool my_compress(uchar *, size_t *, size_t *); extern my_bool my_compress(uchar *, size_t *, size_t *);
extern my_bool my_uncompress(uchar *, size_t , size_t *); extern my_bool my_uncompress(uchar *, size_t , size_t *);
extern uchar *my_compress_alloc(const uchar *packet, size_t *len, extern uchar *my_compress_alloc(const uchar *packet, size_t *len,
......
...@@ -690,6 +690,8 @@ The following specify which files/extra groups are read (specified before remain ...@@ -690,6 +690,8 @@ The following specify which files/extra groups are read (specified before remain
Unused. Deprecated, will be removed in a future release. Unused. Deprecated, will be removed in a future release.
--metadata-locks-hash-instances=# --metadata-locks-hash-instances=#
Unused. Deprecated, will be removed in a future release. Unused. Deprecated, will be removed in a future release.
--mhnsw-cache-size=#
Size of the cache for the MHNSW vector index
--mhnsw-max-edges-per-node=# --mhnsw-max-edges-per-node=#
Larger values means slower INSERT, larger index size and Larger values means slower INSERT, larger index size and
higher memory consumption, but better search results higher memory consumption, but better search results
...@@ -1797,6 +1799,7 @@ max-write-lock-count 18446744073709551615 ...@@ -1797,6 +1799,7 @@ max-write-lock-count 18446744073709551615
memlock FALSE memlock FALSE
metadata-locks-cache-size 1024 metadata-locks-cache-size 1024
metadata-locks-hash-instances 8 metadata-locks-hash-instances 8
mhnsw-cache-size 16777216
mhnsw-max-edges-per-node 6 mhnsw-max-edges-per-node 6
mhnsw-min-limit 20 mhnsw-min-limit 20
min-examined-row-limit 0 min-examined-row-limit 0
......
create table t1 (id int auto_increment primary key, v blob not null, vector index (v)) engine=innodb;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`v` blob NOT NULL,
PRIMARY KEY (`id`),
VECTOR KEY `v` (`v`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
insert t1 (v) values
(x'106d263fdf68ba3eb08d533f97d46e3fd1e1ec3edc4c123f984c563f621a233f'),
(x'd55bee3c56eb9e3e84e3093f838dce3eb7cd653fe32d7d3f12de133c5715d23e'),
(x'fcd5553f3822443f5dae413f2593493f7777363f5f7f113ebf12373d4d145a3f'),
(x'7493093fd9a27d3e9b13783f8c66653f0bd7d23e50db983d251b013f1dba133f'),
(x'2e30373fae331a3eba94153ee32bce3e3311b33d5bc75d3f6c25653eb769113f'),
(x'381d5f3f2781de3e4f011f3f9353483f9bb37e3edd622d3eabecb63ec246953e'),
(x'4ee5dc3e214b103f0e7e583f5f36473e79d7823ea872ec3e3ab2913d1b84433f'),
(x'8826243f7d20f03e5135593f83ba653e44572d3fa87e8e3e943e0e3f649a293f'),
(x'3859ac3e7d21823ed3f5753fc79c143e61d39c3cee39ba3eb0b0133e815c173f'),
(x'cff0d93c32941e3f64b22a3f1e4f083f4ea2563fbff4a63e12a4703f6c824b3f');
start transaction;
insert t1 values
(30, x'f8e2413ed4ff773fef8b893eba487b3febee3f3f9e6f693f5961fd3ee479303d');
savepoint foo;
insert t1 values
(31, x'6129683f90fe1f3e1437bc3ed8c8f63dd141033f21e3a93e54346c3f8c4e043f'),
(32, x'1ec8b83d398c4d3f2efb463f23947a3fa1a5093fdde6303e5580413f51569b3e');
rollback to savepoint foo;
insert t1 values
(33, x'86d1003d4262033f8086713ffc4a633e317e933c4dce013d9c4d573fca83b93e');
commit;
start transaction;
insert t1 values
(40, x'71046a3e85329b3e05240e3f45c9283f1847363f98d47d3f4224b73d487b613f'),
(41, x'71046a3e85329b3e05240e3f45c9283f1847363f98d47d3f4224b73d487b613f');
rollback;
select id,vec_distance(v, x'c923e33dc0da313fe7c7983e526b3d3fde63963e6eaf3a3f27fa133fe27a583f') d from t1 order by d limit 5;
id d
10 0.8856208347761952
1 0.9381363209273885
30 1.0162643974895857
7 1.026397313888122
5 1.0308161006949719
select id,vec_distance(v, x'754b5f3ea2312b3fc169f43e4604883e1d20173e8dd7443f421b703fb11e0d3e') d from t1 order by d limit 5;
id d
33 0.9477554826856
30 1.111405427702547
1 1.1154613877616022
10 1.118630286292343
8 1.1405733350751739
create table t2 (id int auto_increment primary key, v blob not null, vector index (v)) engine=innodb;
insert t2 (v) values
(x'45cf153f830a313f7a0a113fb1ff533f47a1533fcf9e6e3f'),
(x'4b311d3fdd82423f35ba7d3fa041223dfd7db03e72d5833e'),
(x'f0d4123f6fc1833ea30a483fd9649d3cb94d733f4574a63d'),
(x'7ff8a53bf68e4a3e66e3563f214dea3e63372f3ec24d513f'),
(x'4709683f0d44473f8a045f3f40f3693df7f1303fdb98b73e'),
(x'09de2b3f5db80d3fb4405f3f64aadc3ecfa6183f823c733f'),
(x'a93a143f7f71e33d0cde5c3ff106373fd6f6233fc1f4fc3e'),
(x'11236e3de44a0d3f8241023d44d8383f2f70733f44d65c3f'),
(x'b5e47c3f35d3413fad8a533d5945133f66dbf33d92c6103f');
start transaction;
insert t1 values
(50, x'acae183f56ddc43e5093983d280df53e6fa2093f79c01a3eb1591f3f423a0e3d'),
(51, x'6285303f42ef6e3f355e313f3e96a53e70959b3edd720b3ec07f733e5bc8603f');
insert t2 values
(20, x'58dc7d3fc9feaa3e19e26b3f31820c3f93070b3fc4e36e3f'),
(21, x'35e05d3f18e8513fb81a3d3f8acf7d3e794a1d3c72f9613f');
commit;
select id,vec_distance(v, x'1f4d053f7056493f937da03dd8c97a3f220cbb3c926c1c3facca213ec0618a3e') d from t1 order by d limit 5;
id d
6 0.9309383181777582
5 0.9706304662574956
30 0.98144492002831
50 1.079862635421575
51 1.2403734530917931
select id,vec_distance(v, x'f618663f256be73e62cd453f8bcdbf3e16ae503c3858313f') d from t2 order by d limit 5;
id d
21 0.43559180321379337
20 0.6435053022072372
6 0.6942000623336242
2 0.7971622099055623
9 0.8298589136476077
drop table t1, t2;
source include/have_innodb.inc;
create table t1 (id int auto_increment primary key, v blob not null, vector index (v)) engine=innodb;
show create table t1;
# print unpack("H*",pack("f*",map{rand}1..8))
insert t1 (v) values
(x'106d263fdf68ba3eb08d533f97d46e3fd1e1ec3edc4c123f984c563f621a233f'),
(x'd55bee3c56eb9e3e84e3093f838dce3eb7cd653fe32d7d3f12de133c5715d23e'),
(x'fcd5553f3822443f5dae413f2593493f7777363f5f7f113ebf12373d4d145a3f'),
(x'7493093fd9a27d3e9b13783f8c66653f0bd7d23e50db983d251b013f1dba133f'),
(x'2e30373fae331a3eba94153ee32bce3e3311b33d5bc75d3f6c25653eb769113f'),
(x'381d5f3f2781de3e4f011f3f9353483f9bb37e3edd622d3eabecb63ec246953e'),
(x'4ee5dc3e214b103f0e7e583f5f36473e79d7823ea872ec3e3ab2913d1b84433f'),
(x'8826243f7d20f03e5135593f83ba653e44572d3fa87e8e3e943e0e3f649a293f'),
(x'3859ac3e7d21823ed3f5753fc79c143e61d39c3cee39ba3eb0b0133e815c173f'),
(x'cff0d93c32941e3f64b22a3f1e4f083f4ea2563fbff4a63e12a4703f6c824b3f');
### savepoints and rollbacks:
start transaction;
insert t1 values
(30, x'f8e2413ed4ff773fef8b893eba487b3febee3f3f9e6f693f5961fd3ee479303d');
savepoint foo;
insert t1 values
(31, x'6129683f90fe1f3e1437bc3ed8c8f63dd141033f21e3a93e54346c3f8c4e043f'),
(32, x'1ec8b83d398c4d3f2efb463f23947a3fa1a5093fdde6303e5580413f51569b3e');
rollback to savepoint foo;
insert t1 values
(33, x'86d1003d4262033f8086713ffc4a633e317e933c4dce013d9c4d573fca83b93e');
commit;
start transaction;
insert t1 values
(40, x'71046a3e85329b3e05240e3f45c9283f1847363f98d47d3f4224b73d487b613f'),
(41, x'71046a3e85329b3e05240e3f45c9283f1847363f98d47d3f4224b73d487b613f');
rollback;
select id,vec_distance(v, x'c923e33dc0da313fe7c7983e526b3d3fde63963e6eaf3a3f27fa133fe27a583f') d from t1 order by d limit 5;
select id,vec_distance(v, x'754b5f3ea2312b3fc169f43e4604883e1d20173e8dd7443f421b703fb11e0d3e') d from t1 order by d limit 5;
### two indexes in one transaction:
create table t2 (id int auto_increment primary key, v blob not null, vector index (v)) engine=innodb;
insert t2 (v) values
(x'45cf153f830a313f7a0a113fb1ff533f47a1533fcf9e6e3f'),
(x'4b311d3fdd82423f35ba7d3fa041223dfd7db03e72d5833e'),
(x'f0d4123f6fc1833ea30a483fd9649d3cb94d733f4574a63d'),
(x'7ff8a53bf68e4a3e66e3563f214dea3e63372f3ec24d513f'),
(x'4709683f0d44473f8a045f3f40f3693df7f1303fdb98b73e'),
(x'09de2b3f5db80d3fb4405f3f64aadc3ecfa6183f823c733f'),
(x'a93a143f7f71e33d0cde5c3ff106373fd6f6233fc1f4fc3e'),
(x'11236e3de44a0d3f8241023d44d8383f2f70733f44d65c3f'),
(x'b5e47c3f35d3413fad8a533d5945133f66dbf33d92c6103f');
start transaction;
insert t1 values
(50, x'acae183f56ddc43e5093983d280df53e6fa2093f79c01a3eb1591f3f423a0e3d'),
(51, x'6285303f42ef6e3f355e313f3e96a53e70959b3edd720b3ec07f733e5bc8603f');
insert t2 values
(20, x'58dc7d3fc9feaa3e19e26b3f31820c3f93070b3fc4e36e3f'),
(21, x'35e05d3f18e8513fb81a3d3f8acf7d3e794a1d3c72f9613f');
commit;
select id,vec_distance(v, x'1f4d053f7056493f937da03dd8c97a3f220cbb3c926c1c3facca213ec0618a3e') d from t1 order by d limit 5;
select id,vec_distance(v, x'f618663f256be73e62cd453f8bcdbf3e16ae503c3858313f') d from t2 order by d limit 5;
drop table t1, t2;
exit;
--- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result --- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_BLOCK_SIZE VARIABLE_NAME ARIA_BLOCK_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
VARIABLE_COMMENT Block size to be used for Aria index pages VARIABLE_COMMENT Block size to be used for Aria index pages
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 32768 NUMERIC_MAX_VALUE 32768
@@ -54,7 +54,7 @@ @@ -54,7 +54,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_CHECKPOINT_INTERVAL VARIABLE_NAME ARIA_CHECKPOINT_INTERVAL
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
VARIABLE_COMMENT Interval between tries to do an automatic checkpoints. In seconds; 0 means 'no automatic checkpoints' which makes sense only for testing VARIABLE_COMMENT Interval between tries to do an automatic checkpoints. In seconds; 0 means 'no automatic checkpoints' which makes sense only for testing
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_CHECKPOINT_LOG_ACTIVITY VARIABLE_NAME ARIA_CHECKPOINT_LOG_ACTIVITY
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
VARIABLE_COMMENT Number of bytes that the transaction log has to grow between checkpoints before a new checkpoint is written to the log VARIABLE_COMMENT Number of bytes that the transaction log has to grow between checkpoints before a new checkpoint is written to the log
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -84,7 +84,7 @@ @@ -84,7 +84,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ARIA_FORCE_START_AFTER_RECOVERY_FAILURES VARIABLE_NAME ARIA_FORCE_START_AFTER_RECOVERY_FAILURES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
VARIABLE_COMMENT Number of consecutive log recovery failures after which logs will be automatically deleted to cure the problem; 0 (the default) disables the feature VARIABLE_COMMENT Number of consecutive log recovery failures after which logs will be automatically deleted to cure the problem; 0 (the default) disables the feature
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255 NUMERIC_MAX_VALUE 255
@@ -104,7 +104,7 @@ @@ -104,7 +104,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_GROUP_COMMIT_INTERVAL VARIABLE_NAME ARIA_GROUP_COMMIT_INTERVAL
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
VARIABLE_COMMENT Interval between commits in microseconds (1/1000000 sec). 0 stands for no waiting for other threads to come and do a commit in "hard" mode and no sync()/commit at all in "soft" mode. Option has only an effect if aria_group_commit is used VARIABLE_COMMENT Interval between commits in microseconds (1/1000000 sec). 0 stands for no waiting for other threads to come and do a commit in "hard" mode and no sync()/commit at all in "soft" mode. Option has only an effect if aria_group_commit is used
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -124,7 +124,7 @@ @@ -124,7 +124,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_LOG_FILE_SIZE VARIABLE_NAME ARIA_LOG_FILE_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
VARIABLE_COMMENT Limit for transaction log size VARIABLE_COMMENT Limit for transaction log size
NUMERIC_MIN_VALUE 8388608 NUMERIC_MIN_VALUE 8388608
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -154,10 +154,10 @@ @@ -154,10 +154,10 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_AGE_THRESHOLD VARIABLE_NAME ARIA_PAGECACHE_AGE_THRESHOLD
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
NUMERIC_BLOCK_SIZE 100 NUMERIC_BLOCK_SIZE 100
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -174,7 +174,7 @@ @@ -174,7 +174,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_DIVISION_LIMIT VARIABLE_NAME ARIA_PAGECACHE_DIVISION_LIMIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
VARIABLE_COMMENT The minimum percentage of warm blocks in key cache VARIABLE_COMMENT The minimum percentage of warm blocks in key cache
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 100 NUMERIC_MAX_VALUE 100
@@ -184,7 +184,7 @@ @@ -184,7 +184,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME ARIA_PAGECACHE_FILE_HASH_SIZE VARIABLE_NAME ARIA_PAGECACHE_FILE_HASH_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
VARIABLE_COMMENT Number of hash buckets for open and changed files. If you have a lot of Aria files open you should increase this for faster flush of changes. A good value is probably 1/10 of number of possible open Aria files VARIABLE_COMMENT Number of hash buckets for open and changed files. If you have a lot of Aria files open you should increase this for faster flush of changes. A good value is probably 1/10 of number of possible open Aria files
NUMERIC_MIN_VALUE 128 NUMERIC_MIN_VALUE 128
NUMERIC_MAX_VALUE 16384 NUMERIC_MAX_VALUE 16384
@@ -214,7 +214,7 @@ @@ -214,7 +214,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ARIA_REPAIR_THREADS VARIABLE_NAME ARIA_REPAIR_THREADS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
VARIABLE_COMMENT Number of threads to use when repairing Aria tables. The value of 1 disables parallel repair VARIABLE_COMMENT Number of threads to use when repairing Aria tables. The value of 1 disables parallel repair
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 128 NUMERIC_MAX_VALUE 128
@@ -227,7 +227,7 @@ @@ -227,7 +227,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE
NUMERIC_MIN_VALUE 16376 NUMERIC_MIN_VALUE 16376
...@@ -103,7 +103,7 @@ ...@@ -103,7 +103,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -284,7 +284,7 @@ @@ -284,7 +284,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME AUTO_INCREMENT_INCREMENT VARIABLE_NAME AUTO_INCREMENT_INCREMENT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -112,7 +112,7 @@ ...@@ -112,7 +112,7 @@
VARIABLE_COMMENT Auto-increment columns are incremented by this VARIABLE_COMMENT Auto-increment columns are incremented by this
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 65535 NUMERIC_MAX_VALUE 65535
@@ -294,7 +294,7 @@ @@ -294,7 +294,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME AUTO_INCREMENT_OFFSET VARIABLE_NAME AUTO_INCREMENT_OFFSET
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
VARIABLE_COMMENT Offset added to Auto-increment columns. Used when auto-increment-increment != 1 VARIABLE_COMMENT Offset added to Auto-increment columns. Used when auto-increment-increment != 1
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 65535 NUMERIC_MAX_VALUE 65535
@@ -304,7 +304,7 @@ @@ -304,7 +304,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME BACK_LOG VARIABLE_NAME BACK_LOG
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -130,7 +130,7 @@ ...@@ -130,7 +130,7 @@
VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MariaDB thread gets many connection requests in a very short time VARIABLE_COMMENT The number of outstanding connection requests MariaDB can have. This comes into play when the main MariaDB thread gets many connection requests in a very short time
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65535 NUMERIC_MAX_VALUE 65535
@@ -357,7 +357,7 @@ @@ -357,7 +357,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the transactional cache for updates to transactional engines for the binary log. If you often use transactions containing many statements, you can increase this to get more performance VARIABLE_COMMENT The size of the transactional cache for updates to transactional engines for the binary log. If you often use transactions containing many statements, you can increase this to get more performance
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
...@@ -139,7 +139,7 @@ ...@@ -139,7 +139,7 @@
NUMERIC_BLOCK_SIZE 4096 NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -374,20 +374,20 @@ @@ -374,20 +374,20 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME BINLOG_COMMIT_WAIT_COUNT VARIABLE_NAME BINLOG_COMMIT_WAIT_COUNT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -164,7 +164,7 @@ ...@@ -164,7 +164,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -404,7 +404,7 @@ @@ -404,7 +404,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME BINLOG_EXPIRE_LOGS_SECONDS VARIABLE_NAME BINLOG_EXPIRE_LOGS_SECONDS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -173,7 +173,7 @@ ...@@ -173,7 +173,7 @@
VARIABLE_COMMENT If non-zero, binary logs will be purged after binlog_expire_logs_seconds seconds; It and expire_logs_days are linked, such that changes in one are converted into the other. Possible purges happen at startup and at binary log rotation VARIABLE_COMMENT If non-zero, binary logs will be purged after binlog_expire_logs_seconds seconds; It and expire_logs_days are linked, such that changes in one are converted into the other. Possible purges happen at startup and at binary log rotation
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 8553600 NUMERIC_MAX_VALUE 8553600
@@ -417,7 +417,7 @@ @@ -417,7 +417,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of file cache for the binary log VARIABLE_COMMENT The size of file cache for the binary log
NUMERIC_MIN_VALUE 8192 NUMERIC_MIN_VALUE 8192
...@@ -182,7 +182,7 @@ ...@@ -182,7 +182,7 @@
NUMERIC_BLOCK_SIZE 4096 NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -507,7 +507,7 @@ @@ -507,7 +507,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance VARIABLE_COMMENT The size of the statement cache for updates to non-transactional engines for the binary log. If you often use statements updating a great number of rows, you can increase this to get more performance
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
...@@ -191,7 +191,7 @@ ...@@ -191,7 +191,7 @@
NUMERIC_BLOCK_SIZE 4096 NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -527,7 +527,7 @@ @@ -527,7 +527,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Size of tree cache used in bulk insert optimization. Note that this is a limit per thread VARIABLE_COMMENT Size of tree cache used in bulk insert optimization. Note that this is a limit per thread
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -200,7 +200,7 @@ ...@@ -200,7 +200,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -724,7 +724,7 @@ @@ -724,7 +724,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME CONNECT_TIMEOUT VARIABLE_NAME CONNECT_TIMEOUT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -209,7 +209,7 @@ ...@@ -209,7 +209,7 @@
VARIABLE_COMMENT The number of seconds the MariaDB server is waiting for a connect packet before responding with 'Bad handshake' VARIABLE_COMMENT The number of seconds the MariaDB server is waiting for a connect packet before responding with 'Bad handshake'
NUMERIC_MIN_VALUE 2 NUMERIC_MIN_VALUE 2
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -754,7 +754,7 @@ @@ -754,7 +754,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_LONG VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_LONG
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -218,7 +218,7 @@ ...@@ -218,7 +218,7 @@
VARIABLE_COMMENT Long search depth for the two-step deadlock detection VARIABLE_COMMENT Long search depth for the two-step deadlock detection
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 33 NUMERIC_MAX_VALUE 33
@@ -764,7 +764,7 @@ @@ -764,7 +764,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_SHORT VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_SHORT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -227,7 +227,7 @@ ...@@ -227,7 +227,7 @@
VARIABLE_COMMENT Short search depth for the two-step deadlock detection VARIABLE_COMMENT Short search depth for the two-step deadlock detection
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 32 NUMERIC_MAX_VALUE 32
@@ -774,7 +774,7 @@ @@ -774,7 +774,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_TIMEOUT_LONG VARIABLE_NAME DEADLOCK_TIMEOUT_LONG
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -236,7 +236,7 @@ ...@@ -236,7 +236,7 @@
VARIABLE_COMMENT Long timeout for the two-step deadlock detection (in microseconds) VARIABLE_COMMENT Long timeout for the two-step deadlock detection (in microseconds)
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -784,7 +784,7 @@ @@ -784,7 +784,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DEADLOCK_TIMEOUT_SHORT VARIABLE_NAME DEADLOCK_TIMEOUT_SHORT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -245,7 +245,7 @@ ...@@ -245,7 +245,7 @@
VARIABLE_COMMENT Short timeout for the two-step deadlock detection (in microseconds) VARIABLE_COMMENT Short timeout for the two-step deadlock detection (in microseconds)
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -834,7 +834,7 @@ @@ -834,7 +834,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME DEFAULT_WEEK_FORMAT VARIABLE_NAME DEFAULT_WEEK_FORMAT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -254,7 +254,7 @@ ...@@ -254,7 +254,7 @@
VARIABLE_COMMENT The default week format used by WEEK() functions VARIABLE_COMMENT The default week format used by WEEK() functions
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 7 NUMERIC_MAX_VALUE 7
@@ -844,7 +844,7 @@ @@ -844,7 +844,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_INSERT_LIMIT VARIABLE_NAME DELAYED_INSERT_LIMIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -263,7 +263,7 @@ ...@@ -263,7 +263,7 @@
VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing VARIABLE_COMMENT After inserting delayed_insert_limit rows, the INSERT DELAYED handler will check if there are any SELECT statements pending. If so, it allows these to execute before continuing
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -854,7 +854,7 @@ @@ -854,7 +854,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_INSERT_TIMEOUT VARIABLE_NAME DELAYED_INSERT_TIMEOUT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -272,7 +272,7 @@ ...@@ -272,7 +272,7 @@
VARIABLE_COMMENT How long a INSERT DELAYED thread should wait for INSERT statements before terminating VARIABLE_COMMENT How long a INSERT DELAYED thread should wait for INSERT statements before terminating
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -864,7 +864,7 @@ @@ -864,7 +864,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME DELAYED_QUEUE_SIZE VARIABLE_NAME DELAYED_QUEUE_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -281,7 +281,7 @@ ...@@ -281,7 +281,7 @@
VARIABLE_COMMENT What size queue (in rows) should be allocated for handling INSERT DELAYED. If the queue becomes full, any client that does INSERT DELAYED will wait until there is room in the queue again VARIABLE_COMMENT What size queue (in rows) should be allocated for handling INSERT DELAYED. If the queue becomes full, any client that does INSERT DELAYED will wait until there is room in the queue again
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -894,7 +894,7 @@ @@ -894,7 +894,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME DIV_PRECISION_INCREMENT VARIABLE_NAME DIV_PRECISION_INCREMENT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -290,7 +290,7 @@ ...@@ -290,7 +290,7 @@
VARIABLE_COMMENT Precision of the result of '/' operator will be increased on that value VARIABLE_COMMENT Precision of the result of '/' operator will be increased on that value
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 38 NUMERIC_MAX_VALUE 38
@@ -1004,7 +1004,7 @@ @@ -1004,7 +1004,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME EXTRA_MAX_CONNECTIONS VARIABLE_NAME EXTRA_MAX_CONNECTIONS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -299,7 +299,7 @@ ...@@ -299,7 +299,7 @@
VARIABLE_COMMENT The number of connections on extra-port VARIABLE_COMMENT The number of connections on extra-port
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 100000 NUMERIC_MAX_VALUE 100000
@@ -1034,7 +1034,7 @@ @@ -1034,7 +1034,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME FLUSH_TIME VARIABLE_NAME FLUSH_TIME
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -308,7 +308,7 @@ ...@@ -308,7 +308,7 @@
VARIABLE_COMMENT A dedicated thread is created to flush all tables at the given interval VARIABLE_COMMENT A dedicated thread is created to flush all tables at the given interval
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -1064,7 +1064,7 @@ @@ -1064,7 +1064,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_MAX_WORD_LEN VARIABLE_NAME FT_MAX_WORD_LEN
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -317,7 +317,7 @@ ...@@ -317,7 +317,7 @@
VARIABLE_COMMENT The maximum length of the word to be included in a FULLTEXT index. Note: FULLTEXT indexes must be rebuilt after changing this variable VARIABLE_COMMENT The maximum length of the word to be included in a FULLTEXT index. Note: FULLTEXT indexes must be rebuilt after changing this variable
NUMERIC_MIN_VALUE 10 NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 84 NUMERIC_MAX_VALUE 84
@@ -1074,7 +1074,7 @@ @@ -1074,7 +1074,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_MIN_WORD_LEN VARIABLE_NAME FT_MIN_WORD_LEN
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -326,7 +326,7 @@ ...@@ -326,7 +326,7 @@
VARIABLE_COMMENT The minimum length of the word to be included in a FULLTEXT index. Note: FULLTEXT indexes must be rebuilt after changing this variable VARIABLE_COMMENT The minimum length of the word to be included in a FULLTEXT index. Note: FULLTEXT indexes must be rebuilt after changing this variable
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 84 NUMERIC_MAX_VALUE 84
@@ -1084,7 +1084,7 @@ @@ -1084,7 +1084,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME FT_QUERY_EXPANSION_LIMIT VARIABLE_NAME FT_QUERY_EXPANSION_LIMIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -335,7 +335,7 @@ ...@@ -335,7 +335,7 @@
VARIABLE_COMMENT Number of best matches to use for query expansion VARIABLE_COMMENT Number of best matches to use for query expansion
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1000 NUMERIC_MAX_VALUE 1000
@@ -1254,7 +1254,7 @@ @@ -1254,7 +1254,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME HISTOGRAM_SIZE VARIABLE_NAME HISTOGRAM_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -344,7 +344,7 @@ ...@@ -344,7 +344,7 @@
VARIABLE_COMMENT Number of bytes used for a histogram. If set to 0, no histograms are created by ANALYZE VARIABLE_COMMENT Number of bytes used for a histogram. If set to 0, no histograms are created by ANALYZE
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255 NUMERIC_MAX_VALUE 255
@@ -1284,7 +1284,7 @@ @@ -1284,7 +1284,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME HOST_CACHE_SIZE VARIABLE_NAME HOST_CACHE_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -353,7 +353,7 @@ ...@@ -353,7 +353,7 @@
VARIABLE_COMMENT How many host names should be cached to avoid resolving VARIABLE_COMMENT How many host names should be cached to avoid resolving
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65536 NUMERIC_MAX_VALUE 65536
@@ -1394,7 +1394,7 @@ @@ -1394,7 +1394,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME INTERACTIVE_TIMEOUT VARIABLE_NAME INTERACTIVE_TIMEOUT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -362,7 +362,7 @@ ...@@ -362,7 +362,7 @@
VARIABLE_COMMENT The number of seconds the server waits for activity on an interactive connection before closing it VARIABLE_COMMENT The number of seconds the server waits for activity on an interactive connection before closing it
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -1427,7 +1427,7 @@ @@ -1427,7 +1427,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the buffer that is used for joins VARIABLE_COMMENT The size of the buffer that is used for joins
NUMERIC_MIN_VALUE 128 NUMERIC_MIN_VALUE 128
...@@ -371,7 +371,7 @@ ...@@ -371,7 +371,7 @@
NUMERIC_BLOCK_SIZE 128 NUMERIC_BLOCK_SIZE 128
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -1444,7 +1444,7 @@ @@ -1444,7 +1444,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME JOIN_CACHE_LEVEL VARIABLE_NAME JOIN_CACHE_LEVEL
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -380,7 +380,7 @@ ...@@ -380,7 +380,7 @@
VARIABLE_COMMENT Controls what join operations can be executed with join buffers. Odd numbers are used for plain join buffers while even numbers are used for linked buffers VARIABLE_COMMENT Controls what join operations can be executed with join buffers. Odd numbers are used for plain join buffers while even numbers are used for linked buffers
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 8 NUMERIC_MAX_VALUE 8
@@ -1467,7 +1467,7 @@ @@ -1467,7 +1467,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The size of the buffer used for index blocks for MyISAM tables. Increase this to get faster index handling VARIABLE_COMMENT The size of the buffer used for index blocks for MyISAM tables. Increase this to get faster index handling
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -389,7 +389,7 @@ ...@@ -389,7 +389,7 @@
NUMERIC_BLOCK_SIZE 4096 NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -1624,7 +1624,7 @@ @@ -1624,7 +1624,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME LOCK_WAIT_TIMEOUT VARIABLE_NAME LOCK_WAIT_TIMEOUT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -398,7 +398,7 @@ ...@@ -398,7 +398,7 @@
VARIABLE_COMMENT Timeout in seconds to wait for a lock before returning an error VARIABLE_COMMENT Timeout in seconds to wait for a lock before returning an error
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -1744,7 +1744,7 @@ @@ -1744,7 +1744,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME LOG_SLOW_MAX_WARNINGS VARIABLE_NAME LOG_SLOW_MAX_WARNINGS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -407,7 +407,7 @@ ...@@ -407,7 +407,7 @@
VARIABLE_COMMENT Max numbers of warnings printed to slow query log per statement VARIABLE_COMMENT Max numbers of warnings printed to slow query log per statement
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1000 NUMERIC_MAX_VALUE 1000
@@ -1754,7 +1754,7 @@ @@ -1754,7 +1754,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME LOG_SLOW_MIN_EXAMINED_ROW_LIMIT VARIABLE_NAME LOG_SLOW_MIN_EXAMINED_ROW_LIMIT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -416,7 +416,7 @@ ...@@ -416,7 +416,7 @@
VARIABLE_COMMENT Don't write queries to slow log that examine fewer rows than that VARIABLE_COMMENT Don't write queries to slow log that examine fewer rows than that
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -1794,7 +1794,7 @@ @@ -1794,7 +1794,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME LOG_SLOW_RATE_LIMIT VARIABLE_NAME LOG_SLOW_RATE_LIMIT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -425,7 +425,7 @@ ...@@ -425,7 +425,7 @@
VARIABLE_COMMENT Write to slow log every #th slow query. Set to 1 to log everything. Increase it to reduce the size of the slow or the performance impact of slow logging VARIABLE_COMMENT Write to slow log every #th slow query. Set to 1 to log everything. Increase it to reduce the size of the slow or the performance impact of slow logging
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -1824,7 +1824,7 @@ @@ -1824,7 +1824,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME LOG_WARNINGS VARIABLE_NAME LOG_WARNINGS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -434,7 +434,7 @@ ...@@ -434,7 +434,7 @@
VARIABLE_COMMENT Log some non-critical warnings to the error log. Value can be between 0 and 11. Higher values mean more verbosity VARIABLE_COMMENT Log some non-critical warnings to the error log. Value can be between 0 and 11. Higher values mean more verbosity
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -1874,7 +1874,7 @@ @@ -1874,7 +1874,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME MAX_ALLOWED_PACKET VARIABLE_NAME MAX_ALLOWED_PACKET
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -443,7 +443,7 @@ ...@@ -443,7 +443,7 @@
VARIABLE_COMMENT Max packet length to send to or receive from the server VARIABLE_COMMENT Max packet length to send to or receive from the server
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824 NUMERIC_MAX_VALUE 1073741824
@@ -1887,14 +1887,14 @@ @@ -1887,14 +1887,14 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the total size of the transactional cache VARIABLE_COMMENT Sets the total size of the transactional cache
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
...@@ -460,7 +460,7 @@ ...@@ -460,7 +460,7 @@
VARIABLE_COMMENT Binary log will be rotated automatically when the size exceeds this value VARIABLE_COMMENT Binary log will be rotated automatically when the size exceeds this value
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 1073741824 NUMERIC_MAX_VALUE 1073741824
@@ -1907,7 +1907,7 @@ @@ -1907,7 +1907,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the total size of the statement cache VARIABLE_COMMENT Sets the total size of the statement cache
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
...@@ -469,7 +469,7 @@ ...@@ -469,7 +469,7 @@
NUMERIC_BLOCK_SIZE 4096 NUMERIC_BLOCK_SIZE 4096
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -1924,7 +1924,7 @@ @@ -1924,7 +1924,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_CONNECTIONS VARIABLE_NAME MAX_CONNECTIONS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -478,7 +478,7 @@ ...@@ -478,7 +478,7 @@
VARIABLE_COMMENT The number of simultaneous clients allowed VARIABLE_COMMENT The number of simultaneous clients allowed
NUMERIC_MIN_VALUE 10 NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 100000 NUMERIC_MAX_VALUE 100000
@@ -1934,7 +1934,7 @@ @@ -1934,7 +1934,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_CONNECT_ERRORS VARIABLE_NAME MAX_CONNECT_ERRORS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -487,7 +487,7 @@ ...@@ -487,7 +487,7 @@
VARIABLE_COMMENT If there is more than this number of interrupted connections from a host this host will be blocked from further connections VARIABLE_COMMENT If there is more than this number of interrupted connections from a host this host will be blocked from further connections
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -1944,7 +1944,7 @@ @@ -1944,7 +1944,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_DELAYED_THREADS VARIABLE_NAME MAX_DELAYED_THREADS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -496,7 +496,7 @@ ...@@ -496,7 +496,7 @@
VARIABLE_COMMENT Don't start more than this number of threads to handle INSERT DELAYED statements. If set to zero INSERT DELAYED will be not used VARIABLE_COMMENT Don't start more than this number of threads to handle INSERT DELAYED statements. If set to zero INSERT DELAYED will be not used
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384 NUMERIC_MAX_VALUE 16384
@@ -1964,7 +1964,7 @@ @@ -1964,7 +1964,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_ERROR_COUNT VARIABLE_NAME MAX_ERROR_COUNT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -505,7 +505,7 @@ ...@@ -505,7 +505,7 @@
VARIABLE_COMMENT Max number of errors/warnings to store for a statement VARIABLE_COMMENT Max number of errors/warnings to store for a statement
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 65535 NUMERIC_MAX_VALUE 65535
@@ -1977,14 +1977,14 @@ @@ -1977,14 +1977,14 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Don't allow creation of heap tables bigger than this VARIABLE_COMMENT Don't allow creation of heap tables bigger than this
NUMERIC_MIN_VALUE 16384 NUMERIC_MIN_VALUE 16384
...@@ -522,7 +522,7 @@ ...@@ -522,7 +522,7 @@
VARIABLE_COMMENT Alias for max_delayed_threads. Don't start more than this number of threads to handle INSERT DELAYED statements. If set to zero INSERT DELAYED will be not used VARIABLE_COMMENT Alias for max_delayed_threads. Don't start more than this number of threads to handle INSERT DELAYED statements. If set to zero INSERT DELAYED will be not used
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384 NUMERIC_MAX_VALUE 16384
@@ -2004,7 +2004,7 @@ @@ -2004,7 +2004,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_LENGTH_FOR_SORT_DATA VARIABLE_NAME MAX_LENGTH_FOR_SORT_DATA
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -531,7 +531,7 @@ ...@@ -531,7 +531,7 @@
VARIABLE_COMMENT Max number of bytes in sorted records VARIABLE_COMMENT Max number of bytes in sorted records
NUMERIC_MIN_VALUE 4 NUMERIC_MIN_VALUE 4
NUMERIC_MAX_VALUE 8388608 NUMERIC_MAX_VALUE 8388608
@@ -2034,7 +2034,7 @@ @@ -2034,7 +2034,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_RECURSIVE_ITERATIONS VARIABLE_NAME MAX_RECURSIVE_ITERATIONS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -540,7 +540,7 @@ ...@@ -540,7 +540,7 @@
VARIABLE_COMMENT Maximum number of iterations when executing recursive queries VARIABLE_COMMENT Maximum number of iterations when executing recursive queries
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2047,14 +2047,14 @@ @@ -2047,14 +2047,14 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The maximum size of the container of a rowid filter VARIABLE_COMMENT The maximum size of the container of a rowid filter
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
...@@ -557,7 +557,7 @@ ...@@ -557,7 +557,7 @@
VARIABLE_COMMENT Limit assumed max number of seeks when looking up rows based on a key VARIABLE_COMMENT Limit assumed max number of seeks when looking up rows based on a key
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2074,7 +2074,7 @@ @@ -2074,7 +2074,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_SORT_LENGTH VARIABLE_NAME MAX_SORT_LENGTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -566,7 +566,7 @@ ...@@ -566,7 +566,7 @@
VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored) VARIABLE_COMMENT The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored)
NUMERIC_MIN_VALUE 64 NUMERIC_MIN_VALUE 64
NUMERIC_MAX_VALUE 8388608 NUMERIC_MAX_VALUE 8388608
@@ -2084,7 +2084,7 @@ @@ -2084,7 +2084,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_SP_RECURSION_DEPTH VARIABLE_NAME MAX_SP_RECURSION_DEPTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -575,7 +575,7 @@ ...@@ -575,7 +575,7 @@
VARIABLE_COMMENT Maximum stored procedure recursion depth VARIABLE_COMMENT Maximum stored procedure recursion depth
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255 NUMERIC_MAX_VALUE 255
@@ -2114,7 +2114,7 @@ @@ -2134,7 +2134,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_WRITE_LOCK_COUNT VARIABLE_NAME MAX_WRITE_LOCK_COUNT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -584,7 +584,7 @@ ...@@ -584,7 +584,7 @@
VARIABLE_COMMENT After this many write locks, allow some read locks to run in between VARIABLE_COMMENT After this many write locks, allow some read locks to run in between
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2124,7 +2124,7 @@ @@ -2144,7 +2144,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME METADATA_LOCKS_CACHE_SIZE VARIABLE_NAME METADATA_LOCKS_CACHE_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -593,7 +593,7 @@ ...@@ -593,7 +593,7 @@
VARIABLE_COMMENT Unused VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2134,7 +2134,7 @@ @@ -2154,7 +2154,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME METADATA_LOCKS_HASH_INSTANCES VARIABLE_NAME METADATA_LOCKS_HASH_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -602,7 +602,16 @@ ...@@ -602,7 +602,16 @@
VARIABLE_COMMENT Unused VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2144,7 +2144,7 @@ @@ -2167,7 +2167,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Size of the cache for the MHNSW vector index
NUMERIC_MIN_VALUE 1048576
-NUMERIC_MAX_VALUE 18446744073709551615
+NUMERIC_MAX_VALUE 4294967295
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
@@ -2204,7 +2204,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MIN_EXAMINED_ROW_LIMIT VARIABLE_NAME MIN_EXAMINED_ROW_LIMIT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -611,7 +620,7 @@ ...@@ -611,7 +620,7 @@
VARIABLE_COMMENT Alias for log_slow_min_examined_row_limit. Don't write queries to slow log that examine fewer rows than that VARIABLE_COMMENT Alias for log_slow_min_examined_row_limit. Don't write queries to slow log that examine fewer rows than that
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2154,7 +2154,7 @@ @@ -2214,7 +2214,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MRR_BUFFER_SIZE VARIABLE_NAME MRR_BUFFER_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -620,7 +629,7 @@ ...@@ -620,7 +629,7 @@
VARIABLE_COMMENT Size of buffer to use when using MRR with range access VARIABLE_COMMENT Size of buffer to use when using MRR with range access
NUMERIC_MIN_VALUE 8192 NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647 NUMERIC_MAX_VALUE 2147483647
@@ -2164,7 +2164,7 @@ @@ -2224,7 +2224,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MYISAM_BLOCK_SIZE VARIABLE_NAME MYISAM_BLOCK_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -629,7 +638,7 @@ ...@@ -629,7 +638,7 @@
VARIABLE_COMMENT Block size to be used for MyISAM index pages VARIABLE_COMMENT Block size to be used for MyISAM index pages
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 16384 NUMERIC_MAX_VALUE 16384
@@ -2174,7 +2174,7 @@ @@ -2234,7 +2234,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MYISAM_DATA_POINTER_SIZE VARIABLE_NAME MYISAM_DATA_POINTER_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -638,7 +647,7 @@ ...@@ -638,7 +647,7 @@
VARIABLE_COMMENT Default pointer size to be used for MyISAM tables VARIABLE_COMMENT Default pointer size to be used for MyISAM tables
NUMERIC_MIN_VALUE 2 NUMERIC_MIN_VALUE 2
NUMERIC_MAX_VALUE 7 NUMERIC_MAX_VALUE 7
@@ -2197,7 +2197,7 @@ @@ -2257,7 +2257,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Restricts the total memory used for memory mapping of MyISAM tables VARIABLE_COMMENT Restricts the total memory used for memory mapping of MyISAM tables
NUMERIC_MIN_VALUE 7 NUMERIC_MIN_VALUE 7
...@@ -647,7 +656,7 @@ ...@@ -647,7 +656,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY YES READ_ONLY YES
@@ -2214,10 +2214,10 @@ @@ -2274,10 +2274,10 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME MYISAM_REPAIR_THREADS VARIABLE_NAME MYISAM_REPAIR_THREADS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -660,7 +669,7 @@ ...@@ -660,7 +669,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -2227,7 +2227,7 @@ @@ -2287,7 +2287,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
...@@ -669,7 +678,7 @@ ...@@ -669,7 +678,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -2264,7 +2264,7 @@ @@ -2324,7 +2324,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME NET_BUFFER_LENGTH VARIABLE_NAME NET_BUFFER_LENGTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -678,7 +687,7 @@ ...@@ -678,7 +687,7 @@
VARIABLE_COMMENT Buffer length for TCP/IP and socket communication VARIABLE_COMMENT Buffer length for TCP/IP and socket communication
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2274,7 +2274,7 @@ @@ -2334,7 +2334,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_READ_TIMEOUT VARIABLE_NAME NET_READ_TIMEOUT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -687,7 +696,7 @@ ...@@ -687,7 +696,7 @@
VARIABLE_COMMENT Number of seconds to wait for more data from a connection before aborting the read VARIABLE_COMMENT Number of seconds to wait for more data from a connection before aborting the read
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -2284,7 +2284,7 @@ @@ -2344,7 +2344,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_RETRY_COUNT VARIABLE_NAME NET_RETRY_COUNT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -696,7 +705,7 @@ ...@@ -696,7 +705,7 @@
VARIABLE_COMMENT If a read on a communication port is interrupted, retry this many times before giving up VARIABLE_COMMENT If a read on a communication port is interrupted, retry this many times before giving up
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2294,7 +2294,7 @@ @@ -2354,7 +2354,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_WRITE_TIMEOUT VARIABLE_NAME NET_WRITE_TIMEOUT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -705,7 +714,7 @@ ...@@ -705,7 +714,7 @@
VARIABLE_COMMENT Number of seconds to wait for a block to be written to a connection before aborting the write VARIABLE_COMMENT Number of seconds to wait for a block to be written to a connection before aborting the write
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -2344,7 +2344,7 @@ @@ -2404,7 +2404,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME OPEN_FILES_LIMIT VARIABLE_NAME OPEN_FILES_LIMIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -714,7 +723,7 @@ ...@@ -714,7 +723,7 @@
VARIABLE_COMMENT If this is not 0, then mariadbd will use this value to reserve file descriptors to use with setrlimit(). If this value is 0 or autoset then mariadbd will reserve max_connections*5 or max_connections + table_cache*2 (whichever is larger) number of file descriptors VARIABLE_COMMENT If this is not 0, then mariadbd will use this value to reserve file descriptors to use with setrlimit(). If this value is 0 or autoset then mariadbd will reserve max_connections*5 or max_connections + table_cache*2 (whichever is larger) number of file descriptors
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2354,7 +2354,7 @@ @@ -2414,7 +2414,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_ADJUST_SECONDARY_KEY_COSTS VARIABLE_NAME OPTIMIZER_ADJUST_SECONDARY_KEY_COSTS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -723,7 +732,7 @@ ...@@ -723,7 +732,7 @@
VARIABLE_COMMENT Unused VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 2 NUMERIC_MAX_VALUE 2
@@ -2384,7 +2384,7 @@ @@ -2444,7 +2444,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_EXTRA_PRUNING_DEPTH VARIABLE_NAME OPTIMIZER_EXTRA_PRUNING_DEPTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -732,7 +741,7 @@ ...@@ -732,7 +741,7 @@
VARIABLE_COMMENT If the optimizer needs to enumerate join prefix of this size or larger, then it will try aggressively prune away the search space VARIABLE_COMMENT If the optimizer needs to enumerate join prefix of this size or larger, then it will try aggressively prune away the search space
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 62 NUMERIC_MAX_VALUE 62
@@ -2444,7 +2444,7 @@ @@ -2504,7 +2504,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_MAX_SEL_ARGS VARIABLE_NAME OPTIMIZER_MAX_SEL_ARGS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -741,7 +750,7 @@ ...@@ -741,7 +750,7 @@
VARIABLE_COMMENT The maximum number of SEL_ARG objects created when optimizing a range. If more objects would be needed, the range will not be used by the optimizer VARIABLE_COMMENT The maximum number of SEL_ARG objects created when optimizing a range. If more objects would be needed, the range will not be used by the optimizer
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2454,7 +2454,7 @@ @@ -2514,7 +2514,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -750,7 +759,7 @@ ...@@ -750,7 +759,7 @@
VARIABLE_COMMENT The maximum weight of the SEL_ARG graph. Set to 0 for no limit VARIABLE_COMMENT The maximum weight of the SEL_ARG graph. Set to 0 for no limit
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2464,7 +2464,7 @@ @@ -2524,7 +2524,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_PRUNE_LEVEL VARIABLE_NAME OPTIMIZER_PRUNE_LEVEL
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -759,7 +768,7 @@ ...@@ -759,7 +768,7 @@
VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search: 1 - prune plans based on cost and number of retrieved rows eq_ref: 2 - prune also if we find an eq_ref chain VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search: 1 - prune plans based on cost and number of retrieved rows eq_ref: 2 - prune also if we find an eq_ref chain
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 2 NUMERIC_MAX_VALUE 2
@@ -2534,7 +2534,7 @@ @@ -2594,7 +2594,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SEARCH_DEPTH VARIABLE_NAME OPTIMIZER_SEARCH_DEPTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -768,7 +777,7 @@ ...@@ -768,7 +777,7 @@
VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 62 NUMERIC_MAX_VALUE 62
@@ -2544,7 +2544,7 @@ @@ -2604,7 +2604,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SELECTIVITY_SAMPLING_LIMIT VARIABLE_NAME OPTIMIZER_SELECTIVITY_SAMPLING_LIMIT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -777,7 +786,7 @@ ...@@ -777,7 +786,7 @@
VARIABLE_COMMENT Controls number of record samples to check condition selectivity VARIABLE_COMMENT Controls number of record samples to check condition selectivity
NUMERIC_MIN_VALUE 10 NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2574,17 +2574,17 @@ @@ -2634,17 +2634,17 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_TRACE_MAX_MEM_SIZE VARIABLE_NAME OPTIMIZER_TRACE_MAX_MEM_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -798,7 +807,7 @@ ...@@ -798,7 +807,7 @@
VARIABLE_COMMENT Controls selectivity of which conditions the optimizer takes into account to calculate cardinality of a partial join when it searches for the best execution plan Meaning: 1 - use selectivity of index backed range conditions to calculate the cardinality of a partial join if the last joined table is accessed by full table scan or an index scan, 2 - use selectivity of index backed range conditions to calculate the cardinality of a partial join in any case, 3 - additionally always use selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join, 4 - use histograms to calculate selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join. 5 - additionally use selectivity of certain non-range predicates calculated on record samples VARIABLE_COMMENT Controls selectivity of which conditions the optimizer takes into account to calculate cardinality of a partial join when it searches for the best execution plan Meaning: 1 - use selectivity of index backed range conditions to calculate the cardinality of a partial join if the last joined table is accessed by full table scan or an index scan, 2 - use selectivity of index backed range conditions to calculate the cardinality of a partial join in any case, 3 - additionally always use selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join, 4 - use histograms to calculate selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join. 5 - additionally use selectivity of certain non-range predicates calculated on record samples
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 5 NUMERIC_MAX_VALUE 5
@@ -2614,7 +2614,7 @@ @@ -2674,7 +2674,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME PERFORMANCE_SCHEMA_ACCOUNTS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_ACCOUNTS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -807,7 +816,7 @@ ...@@ -807,7 +816,7 @@
VARIABLE_COMMENT Maximum number of instrumented user@host accounts. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented user@host accounts. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2624,7 +2624,7 @@ @@ -2684,7 +2684,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_DIGESTS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_DIGESTS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -816,7 +825,7 @@ ...@@ -816,7 +825,7 @@
VARIABLE_COMMENT Size of the statement digest. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Size of the statement digest. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2634,7 +2634,7 @@ @@ -2694,7 +2694,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -825,7 +834,7 @@ ...@@ -825,7 +834,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_STAGES_HISTORY_LONG. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows in EVENTS_STAGES_HISTORY_LONG. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2644,7 +2644,7 @@ @@ -2704,7 +2704,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -834,7 +843,7 @@ ...@@ -834,7 +843,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STAGES_HISTORY. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows per thread in EVENTS_STAGES_HISTORY. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2654,7 +2654,7 @@ @@ -2714,7 +2714,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -843,7 +852,7 @@ ...@@ -843,7 +852,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_STATEMENTS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows in EVENTS_STATEMENTS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2664,7 +2664,7 @@ @@ -2724,7 +2724,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -852,7 +861,7 @@ ...@@ -852,7 +861,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_HISTORY. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_HISTORY. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2674,7 +2674,7 @@ @@ -2734,7 +2734,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -861,7 +870,7 @@ ...@@ -861,7 +870,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2684,7 +2684,7 @@ @@ -2744,7 +2744,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -870,7 +879,7 @@ ...@@ -870,7 +879,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2694,7 +2694,7 @@ @@ -2754,7 +2754,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -879,7 +888,7 @@ ...@@ -879,7 +888,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2704,7 +2704,7 @@ @@ -2764,7 +2764,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -888,7 +897,7 @@ ...@@ -888,7 +897,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_WAITS_HISTORY. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows per thread in EVENTS_WAITS_HISTORY. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2714,7 +2714,7 @@ @@ -2774,7 +2774,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -897,7 +906,7 @@ ...@@ -897,7 +906,7 @@
VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2724,7 +2724,7 @@ @@ -2784,7 +2784,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -906,7 +915,7 @@ ...@@ -906,7 +915,7 @@
VARIABLE_COMMENT Maximum number of condition instruments VARIABLE_COMMENT Maximum number of condition instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2734,7 +2734,7 @@ @@ -2794,7 +2794,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -915,7 +924,7 @@ ...@@ -915,7 +924,7 @@
VARIABLE_COMMENT Maximum number of instrumented condition objects. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented condition objects. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2744,7 +2744,7 @@ @@ -2804,7 +2804,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -924,7 +933,7 @@ ...@@ -924,7 +933,7 @@
VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2754,7 +2754,7 @@ @@ -2814,7 +2814,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -933,7 +942,7 @@ ...@@ -933,7 +942,7 @@
VARIABLE_COMMENT Maximum number of file instruments VARIABLE_COMMENT Maximum number of file instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2764,7 +2764,7 @@ @@ -2824,7 +2824,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -942,7 +951,7 @@ ...@@ -942,7 +951,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented files VARIABLE_COMMENT Maximum number of opened instrumented files
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2774,7 +2774,7 @@ @@ -2834,7 +2834,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -951,7 +960,7 @@ ...@@ -951,7 +960,7 @@
VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2784,7 +2784,7 @@ @@ -2844,7 +2844,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -960,7 +969,7 @@ ...@@ -960,7 +969,7 @@
VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2794,7 +2794,7 @@ @@ -2854,7 +2854,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -969,7 +978,7 @@ ...@@ -969,7 +978,7 @@
VARIABLE_COMMENT Maximum number of memory pool instruments VARIABLE_COMMENT Maximum number of memory pool instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2804,7 +2804,7 @@ @@ -2864,7 +2864,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -978,7 +987,7 @@ ...@@ -978,7 +987,7 @@
VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600 NUMERIC_MAX_VALUE 104857600
@@ -2814,7 +2814,7 @@ @@ -2874,7 +2874,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -987,7 +996,7 @@ ...@@ -987,7 +996,7 @@
VARIABLE_COMMENT Maximum number of mutex instruments VARIABLE_COMMENT Maximum number of mutex instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2824,7 +2824,7 @@ @@ -2884,7 +2884,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -996,7 +1005,7 @@ ...@@ -996,7 +1005,7 @@
VARIABLE_COMMENT Maximum number of instrumented MUTEX objects. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented MUTEX objects. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600 NUMERIC_MAX_VALUE 104857600
@@ -2834,7 +2834,7 @@ @@ -2894,7 +2894,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1005,7 +1014,7 @@ ...@@ -1005,7 +1014,7 @@
VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2844,7 +2844,7 @@ @@ -2904,7 +2904,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1014,7 +1023,7 @@ ...@@ -1014,7 +1023,7 @@
VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2854,7 +2854,7 @@ @@ -2914,7 +2914,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1023,7 +1032,7 @@ ...@@ -1023,7 +1032,7 @@
VARIABLE_COMMENT Maximum number of rwlock instruments VARIABLE_COMMENT Maximum number of rwlock instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2864,7 +2864,7 @@ @@ -2924,7 +2924,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1032,7 +1041,7 @@ ...@@ -1032,7 +1041,7 @@
VARIABLE_COMMENT Maximum number of instrumented RWLOCK objects. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented RWLOCK objects. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600 NUMERIC_MAX_VALUE 104857600
@@ -2874,7 +2874,7 @@ @@ -2934,7 +2934,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1041,7 +1050,7 @@ ...@@ -1041,7 +1050,7 @@
VARIABLE_COMMENT Maximum number of socket instruments VARIABLE_COMMENT Maximum number of socket instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2884,7 +2884,7 @@ @@ -2944,7 +2944,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1050,7 +1059,7 @@ ...@@ -1050,7 +1059,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented sockets. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of opened instrumented sockets. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2894,7 +2894,7 @@ @@ -2954,7 +2954,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1059,7 +1068,7 @@ ...@@ -1059,7 +1068,7 @@
VARIABLE_COMMENT Maximum length of displayed sql text VARIABLE_COMMENT Maximum length of displayed sql text
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2904,7 +2904,7 @@ @@ -2964,7 +2964,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1068,7 +1077,7 @@ ...@@ -1068,7 +1077,7 @@
VARIABLE_COMMENT Maximum number of stage instruments VARIABLE_COMMENT Maximum number of stage instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2914,7 +2914,7 @@ @@ -2974,7 +2974,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1077,7 +1086,7 @@ ...@@ -1077,7 +1086,7 @@
VARIABLE_COMMENT Maximum number of statement instruments VARIABLE_COMMENT Maximum number of statement instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2924,7 +2924,7 @@ @@ -2984,7 +2984,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1086,7 +1095,7 @@ ...@@ -1086,7 +1095,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2934,7 +2934,7 @@ @@ -2994,7 +2994,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1095,7 +1104,7 @@ ...@@ -1095,7 +1104,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented tables. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of opened instrumented tables. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2944,7 +2944,7 @@ @@ -3004,7 +3004,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1104,7 +1113,7 @@ ...@@ -1104,7 +1113,7 @@
VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2954,7 +2954,7 @@ @@ -3014,7 +3014,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1113,7 +1122,7 @@ ...@@ -1113,7 +1122,7 @@
VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2964,7 +2964,7 @@ @@ -3024,7 +3024,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1122,7 +1131,7 @@ ...@@ -1122,7 +1131,7 @@
VARIABLE_COMMENT Maximum number of thread instruments VARIABLE_COMMENT Maximum number of thread instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2974,7 +2974,7 @@ @@ -3034,7 +3034,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1131,7 +1140,7 @@ ...@@ -1131,7 +1140,7 @@
VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2984,7 +2984,7 @@ @@ -3044,7 +3044,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1140,7 +1149,7 @@ ...@@ -1140,7 +1149,7 @@
VARIABLE_COMMENT Size of session attribute string buffer per thread. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Size of session attribute string buffer per thread. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2994,7 +2994,7 @@ @@ -3054,7 +3054,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1149,7 +1158,7 @@ ...@@ -1149,7 +1158,7 @@
VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -3004,7 +3004,7 @@ @@ -3064,7 +3064,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1158,7 +1167,7 @@ ...@@ -1158,7 +1167,7 @@
VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3014,7 +3014,7 @@ @@ -3074,7 +3074,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1167,7 +1176,7 @@ ...@@ -1167,7 +1176,7 @@
VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3064,7 +3064,7 @@ @@ -3124,7 +3124,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PRELOAD_BUFFER_SIZE VARIABLE_NAME PRELOAD_BUFFER_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1176,7 +1185,7 @@ ...@@ -1176,7 +1185,7 @@
VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824 NUMERIC_MAX_VALUE 1073741824
@@ -3084,7 +3084,7 @@ @@ -3144,7 +3144,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME PROFILING_HISTORY_SIZE VARIABLE_NAME PROFILING_HISTORY_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1185,7 +1194,7 @@ ...@@ -1185,7 +1194,7 @@
VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 100 NUMERIC_MAX_VALUE 100
@@ -3094,7 +3094,7 @@ @@ -3154,7 +3154,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PROGRESS_REPORT_TIME VARIABLE_NAME PROGRESS_REPORT_TIME
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1194,7 +1203,7 @@ ...@@ -1194,7 +1203,7 @@
VARIABLE_COMMENT Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable progress reporting VARIABLE_COMMENT Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable progress reporting
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3154,7 +3154,7 @@ @@ -3214,7 +3214,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1203,7 +1212,7 @@ ...@@ -1203,7 +1212,7 @@
VARIABLE_COMMENT Allocation block size for query parsing and execution VARIABLE_COMMENT Allocation block size for query parsing and execution
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3164,7 +3164,7 @@ @@ -3224,7 +3224,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_LIMIT VARIABLE_NAME QUERY_CACHE_LIMIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1212,7 +1221,7 @@ ...@@ -1212,7 +1221,7 @@
VARIABLE_COMMENT Don't cache results that are bigger than this VARIABLE_COMMENT Don't cache results that are bigger than this
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3174,7 +3174,7 @@ @@ -3234,7 +3234,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1221,7 +1230,7 @@ ...@@ -1221,7 +1230,7 @@
VARIABLE_COMMENT The minimum size for blocks allocated by the query cache VARIABLE_COMMENT The minimum size for blocks allocated by the query cache
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3187,7 +3187,7 @@ @@ -3247,7 +3247,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The memory allocated to store results from old queries VARIABLE_COMMENT The memory allocated to store results from old queries
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1230,7 +1239,7 @@ ...@@ -1230,7 +1239,7 @@
NUMERIC_BLOCK_SIZE 1024 NUMERIC_BLOCK_SIZE 1024
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3224,7 +3224,7 @@ @@ -3284,7 +3284,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME QUERY_PREALLOC_SIZE VARIABLE_NAME QUERY_PREALLOC_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1239,7 +1248,7 @@ ...@@ -1239,7 +1248,7 @@
VARIABLE_COMMENT Persistent buffer for query parsing and execution VARIABLE_COMMENT Persistent buffer for query parsing and execution
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3237,7 +3237,7 @@ @@ -3297,7 +3297,7 @@ VARIABLE_SCOPE SESSION ONLY
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1248,7 +1257,7 @@ ...@@ -1248,7 +1257,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3247,14 +3247,14 @@ @@ -3307,14 +3307,14 @@ VARIABLE_SCOPE SESSION ONLY
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1265,7 +1274,7 @@ ...@@ -1265,7 +1274,7 @@
VARIABLE_COMMENT Allocation block size for storing ranges during optimization VARIABLE_COMMENT Allocation block size for storing ranges during optimization
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3264,7 +3264,7 @@ @@ -3324,7 +3324,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME READ_BUFFER_SIZE VARIABLE_NAME READ_BUFFER_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1274,7 +1283,7 @@ ...@@ -1274,7 +1283,7 @@
VARIABLE_COMMENT Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value VARIABLE_COMMENT Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value
NUMERIC_MIN_VALUE 8192 NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647 NUMERIC_MAX_VALUE 2147483647
@@ -3284,7 +3284,7 @@ @@ -3344,7 +3344,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME READ_RND_BUFFER_SIZE VARIABLE_NAME READ_RND_BUFFER_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1283,7 +1292,7 @@ ...@@ -1283,7 +1292,7 @@
VARIABLE_COMMENT When reading rows in sorted order after a sort, the rows are read through this buffer to avoid a disk seeks VARIABLE_COMMENT When reading rows in sorted order after a sort, the rows are read through this buffer to avoid a disk seeks
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 2147483647 NUMERIC_MAX_VALUE 2147483647
@@ -3304,10 +3304,10 @@ @@ -3364,10 +3364,10 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ROWID_MERGE_BUFF_SIZE VARIABLE_NAME ROWID_MERGE_BUFF_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1296,7 +1305,7 @@ ...@@ -1296,7 +1305,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3344,7 +3344,7 @@ @@ -3404,7 +3404,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SERVER_ID VARIABLE_NAME SERVER_ID
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1305,7 +1314,7 @@ ...@@ -1305,7 +1314,7 @@
VARIABLE_COMMENT Uniquely identifies the server instance in the community of replication partners VARIABLE_COMMENT Uniquely identifies the server instance in the community of replication partners
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3434,7 +3434,7 @@ @@ -3504,7 +3504,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_MAX_ALLOWED_PACKET VARIABLE_NAME SLAVE_MAX_ALLOWED_PACKET
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1314,7 +1323,7 @@ ...@@ -1314,7 +1323,7 @@
VARIABLE_COMMENT The maximum packet length to sent successfully from the master to slave VARIABLE_COMMENT The maximum packet length to sent successfully from the master to slave
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824 NUMERIC_MAX_VALUE 1073741824
@@ -3444,7 +3444,7 @@ @@ -3514,7 +3514,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLOW_LAUNCH_TIME VARIABLE_NAME SLOW_LAUNCH_TIME
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1323,7 +1332,7 @@ ...@@ -1323,7 +1332,7 @@
VARIABLE_COMMENT If creating the thread takes longer than this value (in seconds), the Slow_launch_threads counter will be incremented VARIABLE_COMMENT If creating the thread takes longer than this value (in seconds), the Slow_launch_threads counter will be incremented
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -3487,7 +3487,7 @@ @@ -3557,7 +3557,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Each thread that needs to do a sort allocates a buffer of this size VARIABLE_COMMENT Each thread that needs to do a sort allocates a buffer of this size
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
...@@ -1332,7 +1341,7 @@ ...@@ -1332,7 +1341,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3704,7 +3704,7 @@ @@ -3774,7 +3774,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME STORED_PROGRAM_CACHE VARIABLE_NAME STORED_PROGRAM_CACHE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1341,7 +1350,7 @@ ...@@ -1341,7 +1350,7 @@
VARIABLE_COMMENT The soft upper limit for number of cached stored routines for one connection VARIABLE_COMMENT The soft upper limit for number of cached stored routines for one connection
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 524288 NUMERIC_MAX_VALUE 524288
@@ -3794,7 +3794,7 @@ @@ -3864,7 +3864,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME TABLE_DEFINITION_CACHE VARIABLE_NAME TABLE_DEFINITION_CACHE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1350,7 +1359,7 @@ ...@@ -1350,7 +1359,7 @@
VARIABLE_COMMENT The number of cached table definitions VARIABLE_COMMENT The number of cached table definitions
NUMERIC_MIN_VALUE 400 NUMERIC_MIN_VALUE 400
NUMERIC_MAX_VALUE 2097152 NUMERIC_MAX_VALUE 2097152
@@ -3804,7 +3804,7 @@ @@ -3874,7 +3874,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME TABLE_OPEN_CACHE VARIABLE_NAME TABLE_OPEN_CACHE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1359,7 +1368,7 @@ ...@@ -1359,7 +1368,7 @@
VARIABLE_COMMENT The number of cached open tables VARIABLE_COMMENT The number of cached open tables
NUMERIC_MIN_VALUE 10 NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3864,7 +3864,7 @@ @@ -3934,7 +3934,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME THREAD_CACHE_SIZE VARIABLE_NAME THREAD_CACHE_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1368,7 +1377,7 @@ ...@@ -1368,7 +1377,7 @@
VARIABLE_COMMENT How many threads we should keep in a cache for reuse. These are freed after 5 minutes of idle time VARIABLE_COMMENT How many threads we should keep in a cache for reuse. These are freed after 5 minutes of idle time
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384 NUMERIC_MAX_VALUE 16384
@@ -3937,7 +3937,7 @@ @@ -3997,7 +3997,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Max size for data for an internal temporary on-disk MyISAM or Aria table VARIABLE_COMMENT Max size for data for an internal temporary on-disk MyISAM or Aria table
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
...@@ -1377,7 +1386,7 @@ ...@@ -1377,7 +1386,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3947,7 +3947,7 @@ @@ -4007,7 +4007,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. Same as tmp_table_size VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. Same as tmp_table_size
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1386,7 +1395,7 @@ ...@@ -1386,7 +1395,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3957,14 +3957,14 @@ @@ -4017,14 +4017,14 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Alias for tmp_memory_table_size. If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table VARIABLE_COMMENT Alias for tmp_memory_table_size. If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1403,7 +1412,7 @@ ...@@ -1403,7 +1412,7 @@
VARIABLE_COMMENT Allocation block size for transactions to be stored in binary log VARIABLE_COMMENT Allocation block size for transactions to be stored in binary log
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 134217728 NUMERIC_MAX_VALUE 134217728
@@ -3984,7 +3984,7 @@ @@ -4044,7 +4044,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME TRANSACTION_PREALLOC_SIZE VARIABLE_NAME TRANSACTION_PREALLOC_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1412,7 +1421,7 @@ ...@@ -1412,7 +1421,7 @@
VARIABLE_COMMENT Persistent buffer for transactions to be stored in binary log VARIABLE_COMMENT Persistent buffer for transactions to be stored in binary log
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 134217728 NUMERIC_MAX_VALUE 134217728
@@ -4134,7 +4134,7 @@ @@ -4194,7 +4194,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME WAIT_TIMEOUT VARIABLE_NAME WAIT_TIMEOUT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1421,7 +1430,7 @@ ...@@ -1421,7 +1430,7 @@
VARIABLE_COMMENT The number of seconds the server waits for activity on a connection before closing it VARIABLE_COMMENT The number of seconds the server waits for activity on a connection before closing it
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -4161,7 +4161,7 @@ @@ -4221,7 +4221,7 @@ order by variable_name;
VARIABLE_NAME LOG_TC_SIZE VARIABLE_NAME LOG_TC_SIZE
GLOBAL_VALUE_ORIGIN AUTO GLOBAL_VALUE_ORIGIN AUTO
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
......
...@@ -2162,6 +2162,16 @@ NUMERIC_BLOCK_SIZE 1 ...@@ -2162,6 +2162,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY YES READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MHNSW_CACHE_SIZE
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Size of the cache for the MHNSW vector index
NUMERIC_MIN_VALUE 1048576
NUMERIC_MAX_VALUE 18446744073709551615
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MHNSW_MAX_EDGES_PER_NODE VARIABLE_NAME MHNSW_MAX_EDGES_PER_NODE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
VARIABLE_TYPE INT UNSIGNED VARIABLE_TYPE INT UNSIGNED
......
diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
index 0906f942121..1521ce1a728 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result --- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result
@@ -44,7 +44,7 @@ READ_ONLY NO @@ -44,7 +44,7 @@ READ_ONLY NO
...@@ -584,7 +586,7 @@ ...@@ -584,7 +586,7 @@
VARIABLE_COMMENT Maximum stored procedure recursion depth VARIABLE_COMMENT Maximum stored procedure recursion depth
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 255 NUMERIC_MAX_VALUE 255
@@ -2324,7 +2324,7 @@ READ_ONLY NO @@ -2344,7 +2344,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MAX_WRITE_LOCK_COUNT VARIABLE_NAME MAX_WRITE_LOCK_COUNT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -593,7 +595,7 @@ ...@@ -593,7 +595,7 @@
VARIABLE_COMMENT After this many write locks, allow some read locks to run in between VARIABLE_COMMENT After this many write locks, allow some read locks to run in between
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2334,7 +2334,7 @@ READ_ONLY NO @@ -2354,7 +2354,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME METADATA_LOCKS_CACHE_SIZE VARIABLE_NAME METADATA_LOCKS_CACHE_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -602,7 +604,7 @@ ...@@ -602,7 +604,7 @@
VARIABLE_COMMENT Unused VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2344,7 +2344,7 @@ READ_ONLY YES @@ -2364,7 +2364,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME METADATA_LOCKS_HASH_INSTANCES VARIABLE_NAME METADATA_LOCKS_HASH_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -611,7 +613,16 @@ ...@@ -611,7 +613,16 @@
VARIABLE_COMMENT Unused VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2354,7 +2354,7 @@ READ_ONLY YES @@ -2377,7 +2377,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Size of the cache for the MHNSW vector index
NUMERIC_MIN_VALUE 1048576
-NUMERIC_MAX_VALUE 18446744073709551615
+NUMERIC_MAX_VALUE 4294967295
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
@@ -2414,7 +2414,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MIN_EXAMINED_ROW_LIMIT VARIABLE_NAME MIN_EXAMINED_ROW_LIMIT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -620,7 +631,7 @@ ...@@ -620,7 +631,7 @@
VARIABLE_COMMENT Alias for log_slow_min_examined_row_limit. Don't write queries to slow log that examine fewer rows than that VARIABLE_COMMENT Alias for log_slow_min_examined_row_limit. Don't write queries to slow log that examine fewer rows than that
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2364,7 +2364,7 @@ READ_ONLY NO @@ -2424,7 +2424,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MRR_BUFFER_SIZE VARIABLE_NAME MRR_BUFFER_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -629,7 +640,7 @@ ...@@ -629,7 +640,7 @@
VARIABLE_COMMENT Size of buffer to use when using MRR with range access VARIABLE_COMMENT Size of buffer to use when using MRR with range access
NUMERIC_MIN_VALUE 8192 NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647 NUMERIC_MAX_VALUE 2147483647
@@ -2374,7 +2374,7 @@ READ_ONLY NO @@ -2434,7 +2434,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MYISAM_BLOCK_SIZE VARIABLE_NAME MYISAM_BLOCK_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -638,7 +649,7 @@ ...@@ -638,7 +649,7 @@
VARIABLE_COMMENT Block size to be used for MyISAM index pages VARIABLE_COMMENT Block size to be used for MyISAM index pages
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 16384 NUMERIC_MAX_VALUE 16384
@@ -2384,7 +2384,7 @@ READ_ONLY YES @@ -2444,7 +2444,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MYISAM_DATA_POINTER_SIZE VARIABLE_NAME MYISAM_DATA_POINTER_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -647,7 +658,7 @@ ...@@ -647,7 +658,7 @@
VARIABLE_COMMENT Default pointer size to be used for MyISAM tables VARIABLE_COMMENT Default pointer size to be used for MyISAM tables
NUMERIC_MIN_VALUE 2 NUMERIC_MIN_VALUE 2
NUMERIC_MAX_VALUE 7 NUMERIC_MAX_VALUE 7
@@ -2407,7 +2407,7 @@ VARIABLE_SCOPE GLOBAL @@ -2467,7 +2467,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Restricts the total memory used for memory mapping of MyISAM tables VARIABLE_COMMENT Restricts the total memory used for memory mapping of MyISAM tables
NUMERIC_MIN_VALUE 7 NUMERIC_MIN_VALUE 7
...@@ -656,7 +667,7 @@ ...@@ -656,7 +667,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY YES READ_ONLY YES
@@ -2424,10 +2424,10 @@ READ_ONLY YES @@ -2484,10 +2484,10 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME MYISAM_REPAIR_THREADS VARIABLE_NAME MYISAM_REPAIR_THREADS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -669,7 +680,7 @@ ...@@ -669,7 +680,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -2437,7 +2437,7 @@ VARIABLE_SCOPE SESSION @@ -2497,7 +2497,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE VARIABLE_COMMENT The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
...@@ -678,7 +689,7 @@ ...@@ -678,7 +689,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -2474,7 +2474,7 @@ READ_ONLY NO @@ -2534,7 +2534,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME NET_BUFFER_LENGTH VARIABLE_NAME NET_BUFFER_LENGTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -687,7 +698,7 @@ ...@@ -687,7 +698,7 @@
VARIABLE_COMMENT Buffer length for TCP/IP and socket communication VARIABLE_COMMENT Buffer length for TCP/IP and socket communication
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2484,7 +2484,7 @@ READ_ONLY NO @@ -2544,7 +2544,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_READ_TIMEOUT VARIABLE_NAME NET_READ_TIMEOUT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -696,7 +707,7 @@ ...@@ -696,7 +707,7 @@
VARIABLE_COMMENT Number of seconds to wait for more data from a connection before aborting the read VARIABLE_COMMENT Number of seconds to wait for more data from a connection before aborting the read
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -2494,7 +2494,7 @@ READ_ONLY NO @@ -2554,7 +2554,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_RETRY_COUNT VARIABLE_NAME NET_RETRY_COUNT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -705,7 +716,7 @@ ...@@ -705,7 +716,7 @@
VARIABLE_COMMENT If a read on a communication port is interrupted, retry this many times before giving up VARIABLE_COMMENT If a read on a communication port is interrupted, retry this many times before giving up
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2504,7 +2504,7 @@ READ_ONLY NO @@ -2564,7 +2564,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME NET_WRITE_TIMEOUT VARIABLE_NAME NET_WRITE_TIMEOUT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -714,7 +725,7 @@ ...@@ -714,7 +725,7 @@
VARIABLE_COMMENT Number of seconds to wait for a block to be written to a connection before aborting the write VARIABLE_COMMENT Number of seconds to wait for a block to be written to a connection before aborting the write
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -2554,7 +2554,7 @@ READ_ONLY NO @@ -2614,7 +2614,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME OPEN_FILES_LIMIT VARIABLE_NAME OPEN_FILES_LIMIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -723,7 +734,7 @@ ...@@ -723,7 +734,7 @@
VARIABLE_COMMENT If this is not 0, then mariadbd will use this value to reserve file descriptors to use with setrlimit(). If this value is 0 or autoset then mariadbd will reserve max_connections*5 or max_connections + table_cache*2 (whichever is larger) number of file descriptors VARIABLE_COMMENT If this is not 0, then mariadbd will use this value to reserve file descriptors to use with setrlimit(). If this value is 0 or autoset then mariadbd will reserve max_connections*5 or max_connections + table_cache*2 (whichever is larger) number of file descriptors
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2564,7 +2564,7 @@ READ_ONLY YES @@ -2624,7 +2624,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_ADJUST_SECONDARY_KEY_COSTS VARIABLE_NAME OPTIMIZER_ADJUST_SECONDARY_KEY_COSTS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -732,7 +743,7 @@ ...@@ -732,7 +743,7 @@
VARIABLE_COMMENT Unused VARIABLE_COMMENT Unused
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 2 NUMERIC_MAX_VALUE 2
@@ -2594,7 +2594,7 @@ READ_ONLY NO @@ -2654,7 +2654,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_EXTRA_PRUNING_DEPTH VARIABLE_NAME OPTIMIZER_EXTRA_PRUNING_DEPTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -741,7 +752,7 @@ ...@@ -741,7 +752,7 @@
VARIABLE_COMMENT If the optimizer needs to enumerate join prefix of this size or larger, then it will try aggressively prune away the search space VARIABLE_COMMENT If the optimizer needs to enumerate join prefix of this size or larger, then it will try aggressively prune away the search space
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 62 NUMERIC_MAX_VALUE 62
@@ -2654,7 +2654,7 @@ READ_ONLY NO @@ -2714,7 +2714,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_MAX_SEL_ARGS VARIABLE_NAME OPTIMIZER_MAX_SEL_ARGS
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -750,7 +761,7 @@ ...@@ -750,7 +761,7 @@
VARIABLE_COMMENT The maximum number of SEL_ARG objects created when optimizing a range. If more objects would be needed, the range will not be used by the optimizer VARIABLE_COMMENT The maximum number of SEL_ARG objects created when optimizing a range. If more objects would be needed, the range will not be used by the optimizer
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2664,7 +2664,7 @@ READ_ONLY NO @@ -2724,7 +2724,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -759,7 +770,7 @@ ...@@ -759,7 +770,7 @@
VARIABLE_COMMENT The maximum weight of the SEL_ARG graph. Set to 0 for no limit VARIABLE_COMMENT The maximum weight of the SEL_ARG graph. Set to 0 for no limit
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2674,7 +2674,7 @@ READ_ONLY NO @@ -2734,7 +2734,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_PRUNE_LEVEL VARIABLE_NAME OPTIMIZER_PRUNE_LEVEL
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -768,7 +779,7 @@ ...@@ -768,7 +779,7 @@
VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search: 1 - prune plans based on cost and number of retrieved rows eq_ref: 2 - prune also if we find an eq_ref chain VARIABLE_COMMENT Controls the heuristic(s) applied during query optimization to prune less-promising partial plans from the optimizer search space. Meaning: 0 - do not apply any heuristic, thus perform exhaustive search: 1 - prune plans based on cost and number of retrieved rows eq_ref: 2 - prune also if we find an eq_ref chain
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 2 NUMERIC_MAX_VALUE 2
@@ -2744,7 +2744,7 @@ READ_ONLY NO @@ -2804,7 +2804,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SEARCH_DEPTH VARIABLE_NAME OPTIMIZER_SEARCH_DEPTH
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -777,7 +788,7 @@ ...@@ -777,7 +788,7 @@
VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value VARIABLE_COMMENT Maximum depth of search performed by the query optimizer. Values larger than the number of relations in a query result in better query plans, but take longer to compile a query. Values smaller than the number of tables in a relation result in faster optimization, but may produce very bad query plans. If set to 0, the system will automatically pick a reasonable value
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 62 NUMERIC_MAX_VALUE 62
@@ -2754,7 +2754,7 @@ READ_ONLY NO @@ -2814,7 +2814,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_SELECTIVITY_SAMPLING_LIMIT VARIABLE_NAME OPTIMIZER_SELECTIVITY_SAMPLING_LIMIT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -786,7 +797,7 @@ ...@@ -786,7 +797,7 @@
VARIABLE_COMMENT Controls number of record samples to check condition selectivity VARIABLE_COMMENT Controls number of record samples to check condition selectivity
NUMERIC_MIN_VALUE 10 NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -2784,17 +2784,17 @@ READ_ONLY NO @@ -2844,17 +2844,17 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME OPTIMIZER_TRACE_MAX_MEM_SIZE VARIABLE_NAME OPTIMIZER_TRACE_MAX_MEM_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -807,7 +818,7 @@ ...@@ -807,7 +818,7 @@
VARIABLE_COMMENT Controls selectivity of which conditions the optimizer takes into account to calculate cardinality of a partial join when it searches for the best execution plan Meaning: 1 - use selectivity of index backed range conditions to calculate the cardinality of a partial join if the last joined table is accessed by full table scan or an index scan, 2 - use selectivity of index backed range conditions to calculate the cardinality of a partial join in any case, 3 - additionally always use selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join, 4 - use histograms to calculate selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join. 5 - additionally use selectivity of certain non-range predicates calculated on record samples VARIABLE_COMMENT Controls selectivity of which conditions the optimizer takes into account to calculate cardinality of a partial join when it searches for the best execution plan Meaning: 1 - use selectivity of index backed range conditions to calculate the cardinality of a partial join if the last joined table is accessed by full table scan or an index scan, 2 - use selectivity of index backed range conditions to calculate the cardinality of a partial join in any case, 3 - additionally always use selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join, 4 - use histograms to calculate selectivity of range conditions that are not backed by any index to calculate the cardinality of a partial join. 5 - additionally use selectivity of certain non-range predicates calculated on record samples
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 5 NUMERIC_MAX_VALUE 5
@@ -2824,7 +2824,7 @@ READ_ONLY YES @@ -2884,7 +2884,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME PERFORMANCE_SCHEMA_ACCOUNTS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_ACCOUNTS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -816,7 +827,7 @@ ...@@ -816,7 +827,7 @@
VARIABLE_COMMENT Maximum number of instrumented user@host accounts. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented user@host accounts. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2834,7 +2834,7 @@ READ_ONLY YES @@ -2894,7 +2894,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_DIGESTS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_DIGESTS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -825,7 +836,7 @@ ...@@ -825,7 +836,7 @@
VARIABLE_COMMENT Size of the statement digest. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Size of the statement digest. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2844,7 +2844,7 @@ READ_ONLY YES @@ -2904,7 +2904,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -834,7 +845,7 @@ ...@@ -834,7 +845,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_STAGES_HISTORY_LONG. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows in EVENTS_STAGES_HISTORY_LONG. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2854,7 +2854,7 @@ READ_ONLY YES @@ -2914,7 +2914,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -843,7 +854,7 @@ ...@@ -843,7 +854,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STAGES_HISTORY. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows per thread in EVENTS_STAGES_HISTORY. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2864,7 +2864,7 @@ READ_ONLY YES @@ -2924,7 +2924,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -852,7 +863,7 @@ ...@@ -852,7 +863,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_STATEMENTS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows in EVENTS_STATEMENTS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2874,7 +2874,7 @@ READ_ONLY YES @@ -2934,7 +2934,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -861,7 +872,7 @@ ...@@ -861,7 +872,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_HISTORY. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_HISTORY. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2884,7 +2884,7 @@ READ_ONLY YES @@ -2944,7 +2944,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -870,7 +881,7 @@ ...@@ -870,7 +881,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows in EVENTS_TRANSACTIONS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2894,7 +2894,7 @@ READ_ONLY YES @@ -2954,7 +2954,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -879,7 +890,7 @@ ...@@ -879,7 +890,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows per thread in EVENTS_TRANSACTIONS_HISTORY. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2904,7 +2904,7 @@ READ_ONLY YES @@ -2964,7 +2964,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -888,7 +899,7 @@ ...@@ -888,7 +899,7 @@
VARIABLE_COMMENT Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows in EVENTS_WAITS_HISTORY_LONG. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2914,7 +2914,7 @@ READ_ONLY YES @@ -2974,7 +2974,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -897,7 +908,7 @@ ...@@ -897,7 +908,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_WAITS_HISTORY. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Number of rows per thread in EVENTS_WAITS_HISTORY. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -2924,7 +2924,7 @@ READ_ONLY YES @@ -2984,7 +2984,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -906,7 +917,7 @@ ...@@ -906,7 +917,7 @@
VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2934,7 +2934,7 @@ READ_ONLY YES @@ -2994,7 +2994,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -915,7 +926,7 @@ ...@@ -915,7 +926,7 @@
VARIABLE_COMMENT Maximum number of condition instruments VARIABLE_COMMENT Maximum number of condition instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2944,7 +2944,7 @@ READ_ONLY YES @@ -3004,7 +3004,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -924,7 +935,7 @@ ...@@ -924,7 +935,7 @@
VARIABLE_COMMENT Maximum number of instrumented condition objects. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented condition objects. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2954,7 +2954,7 @@ READ_ONLY YES @@ -3014,7 +3014,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -933,7 +944,7 @@ ...@@ -933,7 +944,7 @@
VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2964,7 +2964,7 @@ READ_ONLY YES @@ -3024,7 +3024,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -942,7 +953,7 @@ ...@@ -942,7 +953,7 @@
VARIABLE_COMMENT Maximum number of file instruments VARIABLE_COMMENT Maximum number of file instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -2974,7 +2974,7 @@ READ_ONLY YES @@ -3034,7 +3034,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -951,7 +962,7 @@ ...@@ -951,7 +962,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented files VARIABLE_COMMENT Maximum number of opened instrumented files
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2984,7 +2984,7 @@ READ_ONLY YES @@ -3044,7 +3044,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -960,7 +971,7 @@ ...@@ -960,7 +971,7 @@
VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -2994,7 +2994,7 @@ READ_ONLY YES @@ -3054,7 +3054,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -969,7 +980,7 @@ ...@@ -969,7 +980,7 @@
VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of index statistics for instrumented tables. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3004,7 +3004,7 @@ READ_ONLY YES @@ -3064,7 +3064,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -978,7 +989,7 @@ ...@@ -978,7 +989,7 @@
VARIABLE_COMMENT Maximum number of memory pool instruments VARIABLE_COMMENT Maximum number of memory pool instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -3014,7 +3014,7 @@ READ_ONLY YES @@ -3074,7 +3074,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -987,7 +998,7 @@ ...@@ -987,7 +998,7 @@
VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600 NUMERIC_MAX_VALUE 104857600
@@ -3024,7 +3024,7 @@ READ_ONLY YES @@ -3084,7 +3084,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -996,7 +1007,7 @@ ...@@ -996,7 +1007,7 @@
VARIABLE_COMMENT Maximum number of mutex instruments VARIABLE_COMMENT Maximum number of mutex instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -3034,7 +3034,7 @@ READ_ONLY YES @@ -3094,7 +3094,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1005,7 +1016,7 @@ ...@@ -1005,7 +1016,7 @@
VARIABLE_COMMENT Maximum number of instrumented MUTEX objects. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented MUTEX objects. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600 NUMERIC_MAX_VALUE 104857600
@@ -3044,7 +3044,7 @@ READ_ONLY YES @@ -3104,7 +3104,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1014,7 +1025,7 @@ ...@@ -1014,7 +1025,7 @@
VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of instrumented prepared statements. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3054,7 +3054,7 @@ READ_ONLY YES @@ -3114,7 +3114,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1023,7 +1034,7 @@ ...@@ -1023,7 +1034,7 @@
VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3064,7 +3064,7 @@ READ_ONLY YES @@ -3124,7 +3124,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1032,7 +1043,7 @@ ...@@ -1032,7 +1043,7 @@
VARIABLE_COMMENT Maximum number of rwlock instruments VARIABLE_COMMENT Maximum number of rwlock instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -3074,7 +3074,7 @@ READ_ONLY YES @@ -3134,7 +3134,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1041,7 +1052,7 @@ ...@@ -1041,7 +1052,7 @@
VARIABLE_COMMENT Maximum number of instrumented RWLOCK objects. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented RWLOCK objects. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 104857600 NUMERIC_MAX_VALUE 104857600
@@ -3084,7 +3084,7 @@ READ_ONLY YES @@ -3144,7 +3144,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1050,7 +1061,7 @@ ...@@ -1050,7 +1061,7 @@
VARIABLE_COMMENT Maximum number of socket instruments VARIABLE_COMMENT Maximum number of socket instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -3094,7 +3094,7 @@ READ_ONLY YES @@ -3154,7 +3154,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1059,7 +1070,7 @@ ...@@ -1059,7 +1070,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented sockets. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of opened instrumented sockets. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3104,7 +3104,7 @@ READ_ONLY YES @@ -3164,7 +3164,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1068,7 +1079,7 @@ ...@@ -1068,7 +1079,7 @@
VARIABLE_COMMENT Maximum length of displayed sql text VARIABLE_COMMENT Maximum length of displayed sql text
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3114,7 +3114,7 @@ READ_ONLY YES @@ -3174,7 +3174,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1077,7 +1088,7 @@ ...@@ -1077,7 +1088,7 @@
VARIABLE_COMMENT Maximum number of stage instruments VARIABLE_COMMENT Maximum number of stage instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -3124,7 +3124,7 @@ READ_ONLY YES @@ -3184,7 +3184,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1086,7 +1097,7 @@ ...@@ -1086,7 +1097,7 @@
VARIABLE_COMMENT Maximum number of statement instruments VARIABLE_COMMENT Maximum number of statement instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -3134,7 +3134,7 @@ READ_ONLY YES @@ -3194,7 +3194,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1095,7 +1106,7 @@ ...@@ -1095,7 +1106,7 @@
VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -3144,7 +3144,7 @@ READ_ONLY YES @@ -3204,7 +3204,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1104,7 +1115,7 @@ ...@@ -1104,7 +1115,7 @@
VARIABLE_COMMENT Maximum number of opened instrumented tables. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of opened instrumented tables. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3154,7 +3154,7 @@ READ_ONLY YES @@ -3214,7 +3214,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1113,7 +1124,7 @@ ...@@ -1113,7 +1124,7 @@
VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3164,7 +3164,7 @@ READ_ONLY YES @@ -3224,7 +3224,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1122,7 +1133,7 @@ ...@@ -1122,7 +1133,7 @@
VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling VARIABLE_COMMENT Maximum number of lock statistics for instrumented tables. Use 0 to disable, -1 for automated scaling
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3174,7 +3174,7 @@ READ_ONLY YES @@ -3234,7 +3234,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1131,7 +1142,7 @@ ...@@ -1131,7 +1142,7 @@
VARIABLE_COMMENT Maximum number of thread instruments VARIABLE_COMMENT Maximum number of thread instruments
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 256 NUMERIC_MAX_VALUE 256
@@ -3184,7 +3184,7 @@ READ_ONLY YES @@ -3244,7 +3244,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1140,7 +1151,7 @@ ...@@ -1140,7 +1151,7 @@
VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3194,7 +3194,7 @@ READ_ONLY YES @@ -3254,7 +3254,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1149,7 +1160,7 @@ ...@@ -1149,7 +1160,7 @@
VARIABLE_COMMENT Size of session attribute string buffer per thread. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Size of session attribute string buffer per thread. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3204,7 +3204,7 @@ READ_ONLY YES @@ -3264,7 +3264,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1158,7 +1169,7 @@ ...@@ -1158,7 +1169,7 @@
VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1024 NUMERIC_MAX_VALUE 1024
@@ -3214,7 +3214,7 @@ READ_ONLY YES @@ -3274,7 +3274,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1167,7 +1178,7 @@ ...@@ -1167,7 +1178,7 @@
VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3224,7 +3224,7 @@ READ_ONLY YES @@ -3284,7 +3284,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1176,7 +1187,7 @@ ...@@ -1176,7 +1187,7 @@
VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing
NUMERIC_MIN_VALUE -1 NUMERIC_MIN_VALUE -1
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -3274,7 +3274,7 @@ READ_ONLY YES @@ -3334,7 +3334,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PRELOAD_BUFFER_SIZE VARIABLE_NAME PRELOAD_BUFFER_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1185,7 +1196,7 @@ ...@@ -1185,7 +1196,7 @@
VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824 NUMERIC_MAX_VALUE 1073741824
@@ -3294,7 +3294,7 @@ READ_ONLY NO @@ -3354,7 +3354,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME PROFILING_HISTORY_SIZE VARIABLE_NAME PROFILING_HISTORY_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1194,7 +1205,7 @@ ...@@ -1194,7 +1205,7 @@
VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES VARIABLE_COMMENT Number of statements about which profiling information is maintained. If set to 0, no profiles are stored. See SHOW PROFILES
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 100 NUMERIC_MAX_VALUE 100
@@ -3304,7 +3304,7 @@ READ_ONLY NO @@ -3364,7 +3364,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME PROGRESS_REPORT_TIME VARIABLE_NAME PROGRESS_REPORT_TIME
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1203,7 +1214,7 @@ ...@@ -1203,7 +1214,7 @@
VARIABLE_COMMENT Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable progress reporting VARIABLE_COMMENT Seconds between sending progress reports to the client for time-consuming statements. Set to 0 to disable progress reporting
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3364,7 +3364,7 @@ READ_ONLY NO @@ -3424,7 +3424,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1212,7 +1223,7 @@ ...@@ -1212,7 +1223,7 @@
VARIABLE_COMMENT Allocation block size for query parsing and execution VARIABLE_COMMENT Allocation block size for query parsing and execution
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3374,7 +3374,7 @@ READ_ONLY NO @@ -3434,7 +3434,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_LIMIT VARIABLE_NAME QUERY_CACHE_LIMIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1221,7 +1232,7 @@ ...@@ -1221,7 +1232,7 @@
VARIABLE_COMMENT Don't cache results that are bigger than this VARIABLE_COMMENT Don't cache results that are bigger than this
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3384,7 +3384,7 @@ READ_ONLY NO @@ -3444,7 +3444,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1230,7 +1241,7 @@ ...@@ -1230,7 +1241,7 @@
VARIABLE_COMMENT The minimum size for blocks allocated by the query cache VARIABLE_COMMENT The minimum size for blocks allocated by the query cache
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3397,7 +3397,7 @@ VARIABLE_SCOPE GLOBAL @@ -3457,7 +3457,7 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT The memory allocated to store results from old queries VARIABLE_COMMENT The memory allocated to store results from old queries
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1239,7 +1250,7 @@ ...@@ -1239,7 +1250,7 @@
NUMERIC_BLOCK_SIZE 1024 NUMERIC_BLOCK_SIZE 1024
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3434,7 +3434,7 @@ READ_ONLY NO @@ -3494,7 +3494,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME QUERY_PREALLOC_SIZE VARIABLE_NAME QUERY_PREALLOC_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1248,7 +1259,7 @@ ...@@ -1248,7 +1259,7 @@
VARIABLE_COMMENT Persistent buffer for query parsing and execution VARIABLE_COMMENT Persistent buffer for query parsing and execution
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3447,7 +3447,7 @@ VARIABLE_SCOPE SESSION ONLY @@ -3507,7 +3507,7 @@ VARIABLE_SCOPE SESSION ONLY
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1257,7 +1268,7 @@ ...@@ -1257,7 +1268,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3457,14 +3457,14 @@ VARIABLE_SCOPE SESSION ONLY @@ -3517,14 +3517,14 @@ VARIABLE_SCOPE SESSION ONLY
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1274,7 +1285,7 @@ ...@@ -1274,7 +1285,7 @@
VARIABLE_COMMENT Allocation block size for storing ranges during optimization VARIABLE_COMMENT Allocation block size for storing ranges during optimization
NUMERIC_MIN_VALUE 4096 NUMERIC_MIN_VALUE 4096
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -3477,14 +3477,14 @@ VARIABLE_SCOPE GLOBAL @@ -3537,14 +3537,14 @@ VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Maximum speed(KB/s) to read binlog from master (0 = no limit) VARIABLE_COMMENT Maximum speed(KB/s) to read binlog from master (0 = no limit)
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1291,7 +1302,7 @@ ...@@ -1291,7 +1302,7 @@
VARIABLE_COMMENT Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value VARIABLE_COMMENT Each thread that does a sequential scan allocates a buffer of this size for each table it scans. If you do many sequential scans, you may want to increase this value
NUMERIC_MIN_VALUE 8192 NUMERIC_MIN_VALUE 8192
NUMERIC_MAX_VALUE 2147483647 NUMERIC_MAX_VALUE 2147483647
@@ -3504,7 +3504,7 @@ READ_ONLY NO @@ -3564,7 +3564,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME READ_RND_BUFFER_SIZE VARIABLE_NAME READ_RND_BUFFER_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1300,7 +1311,7 @@ ...@@ -1300,7 +1311,7 @@
VARIABLE_COMMENT When reading rows in sorted order after a sort, the rows are read through this buffer to avoid a disk seeks VARIABLE_COMMENT When reading rows in sorted order after a sort, the rows are read through this buffer to avoid a disk seeks
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 2147483647 NUMERIC_MAX_VALUE 2147483647
@@ -3734,10 +3734,10 @@ READ_ONLY NO @@ -3794,10 +3794,10 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME ROWID_MERGE_BUFF_SIZE VARIABLE_NAME ROWID_MERGE_BUFF_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1313,7 +1324,7 @@ ...@@ -1313,7 +1324,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3754,20 +3754,20 @@ READ_ONLY NO @@ -3814,20 +3814,20 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME RPL_SEMI_SYNC_MASTER_TIMEOUT VARIABLE_NAME RPL_SEMI_SYNC_MASTER_TIMEOUT
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1338,7 +1349,7 @@ ...@@ -1338,7 +1349,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3824,10 +3824,10 @@ READ_ONLY NO @@ -3884,10 +3884,10 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL VARIABLE_NAME RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1351,7 +1362,7 @@ ...@@ -1351,7 +1362,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -3864,7 +3864,7 @@ READ_ONLY YES @@ -3924,7 +3924,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SERVER_ID VARIABLE_NAME SERVER_ID
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1360,7 +1371,7 @@ ...@@ -1360,7 +1371,7 @@
VARIABLE_COMMENT Uniquely identifies the server instance in the community of replication partners VARIABLE_COMMENT Uniquely identifies the server instance in the community of replication partners
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -4014,7 +4014,7 @@ READ_ONLY NO @@ -4094,7 +4094,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_DOMAIN_PARALLEL_THREADS VARIABLE_NAME SLAVE_DOMAIN_PARALLEL_THREADS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1369,7 +1380,7 @@ ...@@ -1369,7 +1380,7 @@
VARIABLE_COMMENT Maximum number of parallel threads to use on slave for events in a single replication domain. When using multiple domains, this can be used to limit a single domain from grabbing all threads and thus stalling other domains. The default of 0 means to allow a domain to grab as many threads as it wants, up to the value of slave_parallel_threads VARIABLE_COMMENT Maximum number of parallel threads to use on slave for events in a single replication domain. When using multiple domains, this can be used to limit a single domain from grabbing all threads and thus stalling other domains. The default of 0 means to allow a domain to grab as many threads as it wants, up to the value of slave_parallel_threads
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16383 NUMERIC_MAX_VALUE 16383
@@ -4044,7 +4044,7 @@ READ_ONLY YES @@ -4124,7 +4124,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_MAX_ALLOWED_PACKET VARIABLE_NAME SLAVE_MAX_ALLOWED_PACKET
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1378,7 +1389,7 @@ ...@@ -1378,7 +1389,7 @@
VARIABLE_COMMENT The maximum packet length to sent successfully from the master to slave VARIABLE_COMMENT The maximum packet length to sent successfully from the master to slave
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 1073741824 NUMERIC_MAX_VALUE 1073741824
@@ -4074,7 +4074,7 @@ READ_ONLY NO @@ -4154,7 +4154,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_PARALLEL_MAX_QUEUED VARIABLE_NAME SLAVE_PARALLEL_MAX_QUEUED
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1387,7 +1398,7 @@ ...@@ -1387,7 +1398,7 @@
VARIABLE_COMMENT Limit on how much memory SQL threads should use per parallel replication thread when reading ahead in the relay log looking for opportunities for parallel replication. Only used when --slave-parallel-threads > 0 VARIABLE_COMMENT Limit on how much memory SQL threads should use per parallel replication thread when reading ahead in the relay log looking for opportunities for parallel replication. Only used when --slave-parallel-threads > 0
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 2147483647 NUMERIC_MAX_VALUE 2147483647
@@ -4094,7 +4094,7 @@ READ_ONLY NO @@ -4174,7 +4174,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME SLAVE_PARALLEL_THREADS VARIABLE_NAME SLAVE_PARALLEL_THREADS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1396,7 +1407,7 @@ ...@@ -1396,7 +1407,7 @@
VARIABLE_COMMENT If non-zero, number of threads to spawn to apply in parallel events on the slave that were group-committed on the master or were logged with GTID in different replication domains. Note that these threads are in addition to the IO and SQL threads, which are always created by a replication slave VARIABLE_COMMENT If non-zero, number of threads to spawn to apply in parallel events on the slave that were group-committed on the master or were logged with GTID in different replication domains. Note that these threads are in addition to the IO and SQL threads, which are always created by a replication slave
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16383 NUMERIC_MAX_VALUE 16383
@@ -4104,7 +4104,7 @@ READ_ONLY NO @@ -4184,7 +4184,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_PARALLEL_WORKERS VARIABLE_NAME SLAVE_PARALLEL_WORKERS
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1405,7 +1416,7 @@ ...@@ -1405,7 +1416,7 @@
VARIABLE_COMMENT Alias for slave_parallel_threads VARIABLE_COMMENT Alias for slave_parallel_threads
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16383 NUMERIC_MAX_VALUE 16383
@@ -4144,7 +4144,7 @@ READ_ONLY NO @@ -4224,7 +4224,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME SLAVE_TRANSACTION_RETRIES VARIABLE_NAME SLAVE_TRANSACTION_RETRIES
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1414,7 +1425,7 @@ ...@@ -1414,7 +1425,7 @@
VARIABLE_COMMENT Number of times the slave SQL thread will retry a transaction in case it failed with a deadlock, elapsed lock wait timeout or listed in slave_transaction_retry_errors, before giving up and stopping VARIABLE_COMMENT Number of times the slave SQL thread will retry a transaction in case it failed with a deadlock, elapsed lock wait timeout or listed in slave_transaction_retry_errors, before giving up and stopping
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 4294967295 NUMERIC_MAX_VALUE 4294967295
@@ -4164,7 +4164,7 @@ READ_ONLY YES @@ -4244,7 +4244,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLAVE_TRANSACTION_RETRY_INTERVAL VARIABLE_NAME SLAVE_TRANSACTION_RETRY_INTERVAL
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1423,7 +1434,7 @@ ...@@ -1423,7 +1434,7 @@
VARIABLE_COMMENT Interval of the slave SQL thread will retry a transaction in case it failed with a deadlock or elapsed lock wait timeout or listed in slave_transaction_retry_errors VARIABLE_COMMENT Interval of the slave SQL thread will retry a transaction in case it failed with a deadlock or elapsed lock wait timeout or listed in slave_transaction_retry_errors
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 3600 NUMERIC_MAX_VALUE 3600
@@ -4184,7 +4184,7 @@ READ_ONLY NO @@ -4264,7 +4264,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME SLOW_LAUNCH_TIME VARIABLE_NAME SLOW_LAUNCH_TIME
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1432,7 +1443,7 @@ ...@@ -1432,7 +1443,7 @@
VARIABLE_COMMENT If creating the thread takes longer than this value (in seconds), the Slow_launch_threads counter will be incremented VARIABLE_COMMENT If creating the thread takes longer than this value (in seconds), the Slow_launch_threads counter will be incremented
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -4227,7 +4227,7 @@ VARIABLE_SCOPE SESSION @@ -4307,7 +4307,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Each thread that needs to do a sort allocates a buffer of this size VARIABLE_COMMENT Each thread that needs to do a sort allocates a buffer of this size
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
...@@ -1441,7 +1452,7 @@ ...@@ -1441,7 +1452,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -4454,7 +4454,7 @@ READ_ONLY NO @@ -4534,7 +4534,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME STORED_PROGRAM_CACHE VARIABLE_NAME STORED_PROGRAM_CACHE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1450,7 +1461,7 @@ ...@@ -1450,7 +1461,7 @@
VARIABLE_COMMENT The soft upper limit for number of cached stored routines for one connection VARIABLE_COMMENT The soft upper limit for number of cached stored routines for one connection
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 524288 NUMERIC_MAX_VALUE 524288
@@ -4564,7 +4564,7 @@ READ_ONLY NO @@ -4644,7 +4644,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME TABLE_DEFINITION_CACHE VARIABLE_NAME TABLE_DEFINITION_CACHE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1459,7 +1470,7 @@ ...@@ -1459,7 +1470,7 @@
VARIABLE_COMMENT The number of cached table definitions VARIABLE_COMMENT The number of cached table definitions
NUMERIC_MIN_VALUE 400 NUMERIC_MIN_VALUE 400
NUMERIC_MAX_VALUE 2097152 NUMERIC_MAX_VALUE 2097152
@@ -4574,7 +4574,7 @@ READ_ONLY NO @@ -4654,7 +4654,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME TABLE_OPEN_CACHE VARIABLE_NAME TABLE_OPEN_CACHE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1468,7 +1479,7 @@ ...@@ -1468,7 +1479,7 @@
VARIABLE_COMMENT The number of cached open tables VARIABLE_COMMENT The number of cached open tables
NUMERIC_MIN_VALUE 10 NUMERIC_MIN_VALUE 10
NUMERIC_MAX_VALUE 1048576 NUMERIC_MAX_VALUE 1048576
@@ -4634,7 +4634,7 @@ READ_ONLY NO @@ -4714,7 +4714,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME THREAD_CACHE_SIZE VARIABLE_NAME THREAD_CACHE_SIZE
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
...@@ -1477,7 +1488,7 @@ ...@@ -1477,7 +1488,7 @@
VARIABLE_COMMENT How many threads we should keep in a cache for reuse. These are freed after 5 minutes of idle time VARIABLE_COMMENT How many threads we should keep in a cache for reuse. These are freed after 5 minutes of idle time
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 16384 NUMERIC_MAX_VALUE 16384
@@ -4797,7 +4797,7 @@ VARIABLE_SCOPE SESSION @@ -4867,7 +4867,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Max size for data for an internal temporary on-disk MyISAM or Aria table VARIABLE_COMMENT Max size for data for an internal temporary on-disk MyISAM or Aria table
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
...@@ -1486,7 +1497,7 @@ ...@@ -1486,7 +1497,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -4807,7 +4807,7 @@ VARIABLE_SCOPE SESSION @@ -4877,7 +4877,7 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. Same as tmp_table_size VARIABLE_COMMENT If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table. Same as tmp_table_size
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1495,7 +1506,7 @@ ...@@ -1495,7 +1506,7 @@
NUMERIC_BLOCK_SIZE 1 NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY NO READ_ONLY NO
@@ -4817,14 +4817,14 @@ VARIABLE_SCOPE SESSION @@ -4887,14 +4887,14 @@ VARIABLE_SCOPE SESSION
VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Alias for tmp_memory_table_size. If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table VARIABLE_COMMENT Alias for tmp_memory_table_size. If an internal in-memory temporary table exceeds this size, MariaDB will automatically convert it to an on-disk MyISAM or Aria table
NUMERIC_MIN_VALUE 0 NUMERIC_MIN_VALUE 0
...@@ -1512,7 +1523,7 @@ ...@@ -1512,7 +1523,7 @@
VARIABLE_COMMENT Allocation block size for transactions to be stored in binary log VARIABLE_COMMENT Allocation block size for transactions to be stored in binary log
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 134217728 NUMERIC_MAX_VALUE 134217728
@@ -4844,7 +4844,7 @@ READ_ONLY NO @@ -4914,7 +4914,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME TRANSACTION_PREALLOC_SIZE VARIABLE_NAME TRANSACTION_PREALLOC_SIZE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1521,7 +1532,7 @@ ...@@ -1521,7 +1532,7 @@
VARIABLE_COMMENT Persistent buffer for transactions to be stored in binary log VARIABLE_COMMENT Persistent buffer for transactions to be stored in binary log
NUMERIC_MIN_VALUE 1024 NUMERIC_MIN_VALUE 1024
NUMERIC_MAX_VALUE 134217728 NUMERIC_MAX_VALUE 134217728
@@ -4994,7 +4994,7 @@ READ_ONLY YES @@ -5064,7 +5064,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT NULL COMMAND_LINE_ARGUMENT NULL
VARIABLE_NAME WAIT_TIMEOUT VARIABLE_NAME WAIT_TIMEOUT
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
...@@ -1530,7 +1541,7 @@ ...@@ -1530,7 +1541,7 @@
VARIABLE_COMMENT The number of seconds the server waits for activity on a connection before closing it VARIABLE_COMMENT The number of seconds the server waits for activity on a connection before closing it
NUMERIC_MIN_VALUE 1 NUMERIC_MIN_VALUE 1
NUMERIC_MAX_VALUE 31536000 NUMERIC_MAX_VALUE 31536000
@@ -5021,7 +5021,7 @@ order by variable_name; @@ -5091,7 +5091,7 @@ order by variable_name;
VARIABLE_NAME LOG_TC_SIZE VARIABLE_NAME LOG_TC_SIZE
GLOBAL_VALUE_ORIGIN AUTO GLOBAL_VALUE_ORIGIN AUTO
VARIABLE_SCOPE GLOBAL VARIABLE_SCOPE GLOBAL
......
...@@ -2372,6 +2372,16 @@ NUMERIC_BLOCK_SIZE 1 ...@@ -2372,6 +2372,16 @@ NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL ENUM_VALUE_LIST NULL
READ_ONLY YES READ_ONLY YES
COMMAND_LINE_ARGUMENT REQUIRED COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MHNSW_CACHE_SIZE
VARIABLE_SCOPE GLOBAL
VARIABLE_TYPE BIGINT UNSIGNED
VARIABLE_COMMENT Size of the cache for the MHNSW vector index
NUMERIC_MIN_VALUE 1048576
NUMERIC_MAX_VALUE 18446744073709551615
NUMERIC_BLOCK_SIZE 1
ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME MHNSW_MAX_EDGES_PER_NODE VARIABLE_NAME MHNSW_MAX_EDGES_PER_NODE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
VARIABLE_TYPE INT UNSIGNED VARIABLE_TYPE INT UNSIGNED
......
...@@ -324,6 +324,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length) ...@@ -324,6 +324,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
size_t alloced_length; size_t alloced_length;
/* Increase block size over time if there is a lot of mallocs */ /* Increase block size over time if there is a lot of mallocs */
/* when changing this logic, update root_size() to match */
block_size= (MY_ALIGN(mem_root->block_size, ROOT_MIN_BLOCK_SIZE) * block_size= (MY_ALIGN(mem_root->block_size, ROOT_MIN_BLOCK_SIZE) *
(mem_root->block_num >> 2)- MALLOC_OVERHEAD); (mem_root->block_num >> 2)- MALLOC_OVERHEAD);
get_size= length + ALIGN_SIZE(sizeof(USED_MEM)); get_size= length + ALIGN_SIZE(sizeof(USED_MEM));
......
/*
MIT License
Copyright (c) 2023 Sasha Krassovsky
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
// https://save-buffer.github.io/bloom_filter.html
#pragma once
#include <cmath>
#include <vector>
#include <algorithm>
#ifdef HAVE_IMMINTRIN_H
#include <immintrin.h>
#endif
template <typename T>
struct PatternedSimdBloomFilter
{
PatternedSimdBloomFilter(int n, float eps) : n(n), epsilon(eps)
{
m = ComputeNumBits();
int log_num_blocks = my_bit_log2_uint32(m) + 1 - rotate_bits;
num_blocks = (1ULL << log_num_blocks);
bv.resize(num_blocks);
}
uint32_t ComputeNumBits()
{
double bits_per_val = -1.44 * std::log2(epsilon);
return std::max<uint32_t>(512, static_cast<uint32_t>(bits_per_val * n + 0.5));
}
#if __GNUC__ > 7 && defined(HAVE_IMMINTRIN_H)
__attribute__ ((target ("avx2,avx,fma")))
__m256i CalcHash(__m256i vecData)
{
// (almost) xxHash parallel version, 64bit input, 64bit output, seed=0
static constexpr __m256i rotl48={
0x0504030201000706ULL, 0x0D0C0B0A09080F0EULL,
0x1514131211101716ULL, 0x1D1C1B1A19181F1EULL
};
static constexpr __m256i rotl24={
0x0201000706050403ULL, 0x0A09080F0E0D0C0BULL,
0x1211101716151413ULL, 0x1A19181F1E1D1C1BULL,
};
static constexpr uint64_t prime_mx2= 0x9FB21C651E98DF25ULL;
static constexpr uint64_t bitflip= 0xC73AB174C5ECD5A2ULL;
__m256i step1= _mm256_xor_si256(vecData, _mm256_set1_epi64x(bitflip));
__m256i step2= _mm256_shuffle_epi8(step1, rotl48);
__m256i step3= _mm256_shuffle_epi8(step1, rotl24);
__m256i step4= _mm256_xor_si256(step1, _mm256_xor_si256(step2, step3));
__m256i step5= _mm256_mul_epi32(step4, _mm256_set1_epi64x(prime_mx2));
__m256i step6= _mm256_srli_epi64(step5, 35);
__m256i step7= _mm256_add_epi64(step6, _mm256_set1_epi64x(8));
__m256i step8= _mm256_xor_si256(step5, step7);
__m256i step9= _mm256_mul_epi32(step8, _mm256_set1_epi64x(prime_mx2));
return _mm256_xor_si256(step9, _mm256_srli_epi64(step9, 28));
}
__attribute__ ((target ("avx2,avx,fma")))
__m256i GetBlockIdx(__m256i vecHash)
{
__m256i vecNumBlocksMask = _mm256_set1_epi64x(num_blocks - 1);
__m256i vecBlockIdx = _mm256_srli_epi64(vecHash, mask_idx_bits + rotate_bits);
return _mm256_and_si256(vecBlockIdx, vecNumBlocksMask);
}
__attribute__ ((target ("avx2,avx,fma")))
__m256i ConstructMask(__m256i vecHash)
{
__m256i vecMaskIdxMask = _mm256_set1_epi64x((1 << mask_idx_bits) - 1);
__m256i vecMaskMask = _mm256_set1_epi64x((1ull << bits_per_mask) - 1);
__m256i vec64 = _mm256_set1_epi64x(64);
__m256i vecMaskIdx = _mm256_and_si256(vecHash, vecMaskIdxMask);
__m256i vecMaskByteIdx = _mm256_srli_epi64(vecMaskIdx, 3);
__m256i vecMaskBitIdx = _mm256_and_si256(vecMaskIdx, _mm256_set1_epi64x(0x7));
__m256i vecRawMasks = _mm256_i64gather_epi64((const longlong *)masks, vecMaskByteIdx, 1);
__m256i vecUnrotated = _mm256_and_si256(_mm256_srlv_epi64(vecRawMasks, vecMaskBitIdx), vecMaskMask);
__m256i vecRotation = _mm256_and_si256(_mm256_srli_epi64(vecHash, mask_idx_bits), _mm256_set1_epi64x((1 << rotate_bits) - 1));
__m256i vecShiftUp = _mm256_sllv_epi64(vecUnrotated, vecRotation);
__m256i vecShiftDown = _mm256_srlv_epi64(vecUnrotated, _mm256_sub_epi64(vec64, vecRotation));
return _mm256_or_si256(vecShiftDown, vecShiftUp);
}
__attribute__ ((target ("avx2,avx,fma")))
void Insert(const T **data)
{
__m256i vecDataA = _mm256_loadu_si256(reinterpret_cast<__m256i *>(data + 0));
__m256i vecDataB = _mm256_loadu_si256(reinterpret_cast<__m256i *>(data + 4));
__m256i vecHashA= CalcHash(vecDataA);
__m256i vecHashB= CalcHash(vecDataB);
__m256i vecMaskA = ConstructMask(vecHashA);
__m256i vecMaskB = ConstructMask(vecHashB);
__m256i vecBlockIdxA = GetBlockIdx(vecHashA);
__m256i vecBlockIdxB = GetBlockIdx(vecHashB);
uint64_t block0 = _mm256_extract_epi64(vecBlockIdxA, 0);
uint64_t block1 = _mm256_extract_epi64(vecBlockIdxA, 1);
uint64_t block2 = _mm256_extract_epi64(vecBlockIdxA, 2);
uint64_t block3 = _mm256_extract_epi64(vecBlockIdxA, 3);
uint64_t block4 = _mm256_extract_epi64(vecBlockIdxB, 0);
uint64_t block5 = _mm256_extract_epi64(vecBlockIdxB, 1);
uint64_t block6 = _mm256_extract_epi64(vecBlockIdxB, 2);
uint64_t block7 = _mm256_extract_epi64(vecBlockIdxB, 3);
bv[block0] |= _mm256_extract_epi64(vecMaskA, 0);
bv[block1] |= _mm256_extract_epi64(vecMaskA, 1);
bv[block2] |= _mm256_extract_epi64(vecMaskA, 2);
bv[block3] |= _mm256_extract_epi64(vecMaskA, 3);
bv[block4] |= _mm256_extract_epi64(vecMaskB, 0);
bv[block5] |= _mm256_extract_epi64(vecMaskB, 1);
bv[block6] |= _mm256_extract_epi64(vecMaskB, 2);
bv[block7] |= _mm256_extract_epi64(vecMaskB, 3);
}
__attribute__ ((target ("avx2,avx,fma")))
uint8_t Query(T **data)
{
__m256i vecDataA = _mm256_loadu_si256(reinterpret_cast<__m256i *>(data + 0));
__m256i vecDataB = _mm256_loadu_si256(reinterpret_cast<__m256i *>(data + 4));
__m256i vecHashA= CalcHash(vecDataA);
__m256i vecHashB= CalcHash(vecDataB);
__m256i vecMaskA = ConstructMask(vecHashA);
__m256i vecMaskB = ConstructMask(vecHashB);
__m256i vecBlockIdxA = GetBlockIdx(vecHashA);
__m256i vecBlockIdxB = GetBlockIdx(vecHashB);
__m256i vecBloomA = _mm256_i64gather_epi64(bv.data(), vecBlockIdxA, sizeof(longlong));
__m256i vecBloomB = _mm256_i64gather_epi64(bv.data(), vecBlockIdxB, sizeof(longlong));
__m256i vecCmpA = _mm256_cmpeq_epi64(_mm256_and_si256(vecMaskA, vecBloomA), vecMaskA);
__m256i vecCmpB = _mm256_cmpeq_epi64(_mm256_and_si256(vecMaskB, vecBloomB), vecMaskB);
uint32_t res_a = static_cast<uint32_t>(_mm256_movemask_epi8(vecCmpA));
uint32_t res_b = static_cast<uint32_t>(_mm256_movemask_epi8(vecCmpB));
uint64_t res_bytes = res_a | (static_cast<uint64_t>(res_b) << 32);
uint8_t res_bits = static_cast<uint8_t>(_mm256_movemask_epi8(_mm256_set1_epi64x(res_bytes)) & 0xff);
return res_bits;
}
#endif
int n;
float epsilon;
uint64_t num_blocks;
uint32_t m;
// calculated from the upstream MaskTable and hard-coded
static constexpr int log_num_masks = 10;
static constexpr int bits_per_mask = 57;
const uint8_t masks[136]= {0x00, 0x04, 0x01, 0x04, 0x00, 0x20, 0x01, 0x00,
0x00, 0x02, 0x08, 0x00, 0x02, 0x42, 0x00, 0x00, 0x04, 0x00, 0x00, 0x84,
0x80, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x21, 0x00, 0x08, 0x00, 0x14,
0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x10,
0x04, 0x40, 0x01, 0x00, 0x40, 0x00, 0x00, 0x08, 0x01, 0x02, 0x80, 0x00,
0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0c, 0x10,
0x00, 0x10, 0x00, 0x00, 0x10, 0x08, 0x01, 0x10, 0x00, 0x00, 0x10, 0x20,
0x00, 0x01, 0x20, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, 0x01, 0x00,
0x40, 0x00, 0x00, 0x0a, 0x00, 0x02, 0x01, 0x80, 0x00, 0x00, 0x10, 0x08,
0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x50, 0x00, 0x08, 0x10, 0x20, 0x00,
0x00, 0x80, 0x00, 0x10, 0x10, 0x04, 0x04, 0x00, 0x00, 0x00, 0x20, 0x20,
0x08, 0x08, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00};
std::vector<longlong> bv;
static constexpr int mask_idx_bits = log_num_masks;
static constexpr int rotate_bits = 6;
};
...@@ -559,6 +559,7 @@ enum legacy_db_type ...@@ -559,6 +559,7 @@ enum legacy_db_type
{ {
/* note these numerical values are fixed and can *not* be changed */ /* note these numerical values are fixed and can *not* be changed */
DB_TYPE_UNKNOWN=0, DB_TYPE_UNKNOWN=0,
DB_TYPE_HLINDEX_HELPER=6,
DB_TYPE_HEAP=6, DB_TYPE_HEAP=6,
DB_TYPE_MYISAM=9, DB_TYPE_MYISAM=9,
DB_TYPE_MRG_MYISAM=10, DB_TYPE_MRG_MYISAM=10,
......
...@@ -2401,6 +2401,10 @@ bool open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx) ...@@ -2401,6 +2401,10 @@ bool open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx)
my_error(ER_NOT_SEQUENCE, MYF(0), table_list->db.str, table_list->alias.str); my_error(ER_NOT_SEQUENCE, MYF(0), table_list->db.str, table_list->alias.str);
DBUG_RETURN(true); DBUG_RETURN(true);
} }
/* hlindexes don't support concurrent insert */
if (table->s->total_keys > table->s->keys &&
table_list->lock_type == TL_WRITE_CONCURRENT_INSERT)
table_list->lock_type= TL_WRITE_DEFAULT;
DBUG_ASSERT(thd->locked_tables_mode || table->file->row_logging == 0); DBUG_ASSERT(thd->locked_tables_mode || table->file->row_logging == 0);
DBUG_RETURN(false); DBUG_RETURN(false);
......
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
#include "opt_trace_context.h" #include "opt_trace_context.h"
#include "log_event.h" #include "log_event.h"
#include "optimizer_defaults.h" #include "optimizer_defaults.h"
#include "vector_mhnsw.h"
#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE #ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
#include "../storage/perfschema/pfs_server.h" #include "../storage/perfschema/pfs_server.h"
...@@ -7399,3 +7400,7 @@ static Sys_var_uint Sys_mhnsw_max_edges_per_node( ...@@ -7399,3 +7400,7 @@ static Sys_var_uint Sys_mhnsw_max_edges_per_node(
"memory consumption, but better search results", "memory consumption, but better search results",
SESSION_VAR(mhnsw_max_edges_per_node), CMD_LINE(REQUIRED_ARG), SESSION_VAR(mhnsw_max_edges_per_node), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(3, 200), DEFAULT(6), BLOCK_SIZE(1)); VALID_RANGE(3, 200), DEFAULT(6), BLOCK_SIZE(1));
static Sys_var_ulonglong Sys_mhnsw_cache_size(
"mhnsw_cache_size", "Size of the cache for the MHNSW vector index",
GLOBAL_VAR(mhnsw_cache_size), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(1024*1024, SIZE_T_MAX), DEFAULT(16*1024*1024), BLOCK_SIZE(1));
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
#include "sql_delete.h" // class Sql_cmd_delete #include "sql_delete.h" // class Sql_cmd_delete
#include "rpl_rli.h" // class rpl_group_info #include "rpl_rli.h" // class rpl_group_info
#include "rpl_mi.h" // class Master_info #include "rpl_mi.h" // class Master_info
#include "vector_mhnsw.h"
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include "wsrep_schema.h" #include "wsrep_schema.h"
...@@ -502,7 +503,10 @@ void TABLE_SHARE::destroy() ...@@ -502,7 +503,10 @@ void TABLE_SHARE::destroy()
delete sequence; delete sequence;
if (hlindex) if (hlindex)
{
mhnsw_free(this);
hlindex->destroy(); hlindex->destroy();
}
/* The mutexes are initialized only for shares that are part of the TDC */ /* The mutexes are initialized only for shares that are part of the TDC */
if (tmp_table == NO_TMP_TABLE) if (tmp_table == NO_TMP_TABLE)
...@@ -4792,6 +4796,7 @@ int closefrm(TABLE *table) ...@@ -4792,6 +4796,7 @@ int closefrm(TABLE *table)
if (table->hlindex) if (table->hlindex)
closefrm(table->hlindex); closefrm(table->hlindex);
if (table->db_stat) if (table->db_stat)
error=table->file->ha_close(); error=table->file->ha_close();
table->alias.free(); table->alias.free();
......
...@@ -742,7 +742,11 @@ struct TABLE_SHARE ...@@ -742,7 +742,11 @@ struct TABLE_SHARE
Virtual_column_info **check_constraints; Virtual_column_info **check_constraints;
uint *blob_field; /* Index to blobs in Field arrray*/ uint *blob_field; /* Index to blobs in Field arrray*/
LEX_CUSTRING vcol_defs; /* definitions of generated columns */ LEX_CUSTRING vcol_defs; /* definitions of generated columns */
TABLE_SHARE *hlindex;
union {
void *hlindex_data; /* for hlindex tables */
TABLE_SHARE *hlindex; /* for normal tables */
};
/* /*
EITS statistics data from the last time the table was opened or ANALYZE EITS statistics data from the last time the table was opened or ANALYZE
......
...@@ -19,6 +19,10 @@ ...@@ -19,6 +19,10 @@
#include "vector_mhnsw.h" #include "vector_mhnsw.h"
#include "item_vectorfunc.h" #include "item_vectorfunc.h"
#include <scope.h> #include <scope.h>
#include <my_atomic_wrapper.h>
#include "bloom_filters.h"
ulonglong mhnsw_cache_size;
// Algorithm parameters // Algorithm parameters
static constexpr float alpha = 1.1f; static constexpr float alpha = 1.1f;
...@@ -27,9 +31,6 @@ static constexpr uint ef_construction= 10; ...@@ -27,9 +31,6 @@ static constexpr uint ef_construction= 10;
// SIMD definitions // SIMD definitions
#define SIMD_word (256/8) #define SIMD_word (256/8)
#define SIMD_floats (SIMD_word/sizeof(float)) #define SIMD_floats (SIMD_word/sizeof(float))
// how many extra bytes we need to alloc to be able to convert
// sizeof(double) aligned memory to SIMD_word aligned
#define SIMD_margin (SIMD_word - sizeof(double))
enum Graph_table_fields { enum Graph_table_fields {
FIELD_LAYER, FIELD_TREF, FIELD_VEC, FIELD_NEIGHBORS FIELD_LAYER, FIELD_TREF, FIELD_VEC, FIELD_NEIGHBORS
...@@ -39,116 +40,492 @@ enum Graph_table_indices { ...@@ -39,116 +40,492 @@ enum Graph_table_indices {
}; };
class MHNSW_Context; class MHNSW_Context;
class FVectorNode;
/*
One vector, an array of ctx->vec_len floats
class FVector: public Sql_alloc Aligned on 32-byte (SIMD_word) boundary for SIMD, vector lenght
is zero-padded to multiples of 8, for the same reason.
*/
class FVector
{ {
public: public:
MHNSW_Context *ctx; FVector(MHNSW_Context *ctx_, MEM_ROOT *root, const void *vec_);
FVector(MHNSW_Context *ctx_, const void *vec_);
float *vec; float *vec;
protected: protected:
FVector(MHNSW_Context *ctx_) : ctx(ctx_), vec(nullptr) {} FVector() : vec(nullptr) {}
void make_vec(const void *vec_); };
/*
An array of pointers to graph nodes
It's mainly used to store all neighbors of a given node on a given layer.
An array is fixed size, 2*M for the zero layer, M for other layers
see MHNSW_Context::max_neighbors().
Number of neighbors is zero-padded to multiples of 8 (for SIMD Bloom filter).
Also used as a simply array of nodes in search_layer, the array size
then is defined by ef or efConstruction.
*/
struct Neighborhood: public Sql_alloc
{
FVectorNode **links;
size_t num;
FVectorNode **init(FVectorNode **ptr, size_t n)
{
num= 0;
links= ptr;
n= MY_ALIGN(n, 8);
bzero(ptr, n*sizeof(*ptr));
return ptr + n;
}
}; };
/*
One node in a graph = one row in the graph table
stores a vector itself, ref (= position) in the graph (= hlindex)
table, a ref in the main table, and an array of Neighborhood's, one
per layer.
It's lazily initialized, may know only gref, everything else is
loaded on demand.
On the other hand, on INSERT the new node knows everything except
gref - which only becomes known after ha_write_row.
Allocated on memroot in two chunks. One is the same size for all nodes
and stores FVectorNode object, gref, tref, and vector. The second
stores neighbors, all Neighborhood's together, its size depends
on the number of layers this node is on.
There can be millions of nodes in the cache and the cache size
is constrained by mhnsw_cache_size, so every byte matters here
*/
#pragma pack(push, 1)
class FVectorNode: public FVector class FVectorNode: public FVector
{ {
private: private:
uchar *tref, *gref; MHNSW_Context *ctx;
size_t max_layer;
static uchar *gref_max;
float *make_vec(const void *v);
int alloc_neighborhood(uint8_t layer); int alloc_neighborhood(uint8_t layer);
public: public:
List<FVectorNode> *neighbors= nullptr; Neighborhood *neighbors= nullptr;
uint8_t max_layer;
bool stored;
FVectorNode(MHNSW_Context *ctx_, const void *gref_); FVectorNode(MHNSW_Context *ctx_, const void *gref_);
FVectorNode(MHNSW_Context *ctx_, const void *tref_, uint8_t layer, FVectorNode(MHNSW_Context *ctx_, const void *tref_, uint8_t layer,
const void *vec_); const void *vec_);
float distance_to(const FVector &other) const; float distance_to(const FVector &other) const;
int load(); int load(TABLE *graph);
int load_from_record(); int load_from_record(TABLE *graph);
int save(); int save(TABLE *graph);
size_t get_tref_len() const; size_t tref_len() const;
uchar *get_tref() const { return tref; } size_t gref_len() const;
size_t get_gref_len() const; uchar *gref() const;
uchar *get_gref() const { return gref; } uchar *tref() const;
void push_neighbor(size_t layer, FVectorNode *v);
static uchar *get_key(const FVectorNode *elem, size_t *key_len, my_bool); static uchar *get_key(const FVectorNode *elem, size_t *key_len, my_bool);
}; };
#pragma pack(pop)
// this assumes that 1) rows from graph table are never deleted, /*
// 2) and thus a ref for a new row is larger than refs of existing rows, Shared algorithm context. The graph.
// thus we can treat the not-yet-inserted row as having max possible ref.
// oh, yes, and 3) 8 bytes ought to be enough for everyone Stored in TABLE_SHARE and on TABLE_SHARE::mem_root.
uchar *FVectorNode::gref_max=(uchar*)"\xff\xff\xff\xff\xff\xff\xff\xff"; Stores the complete graph in MHNSW_Context::root,
The mapping gref->FVectorNode is in the node_cache.
class MHNSW_Context Both root and node_cache are protected by a cache_lock, but it's
needed when loading nodes and is not used when the whole graph is in memory.
Graph can be traversed concurrently by different threads, as traversal
changes neither nodes nor the ctx.
Nodes can be loaded concurrently by different threads, this is protected
by a partitioned node_lock.
reference counter allows flushing the graph without interrupting
concurrent searches.
MyISAM automatically gets exclusive write access because of the TL_WRITE,
but InnoDB has to use a dedicated ctx->commit_lock for that
*/
class MHNSW_Context : public Sql_alloc
{ {
public: std::atomic<uint> refcnt{0};
mysql_mutex_t cache_lock;
mysql_mutex_t node_lock[8];
void cache_internal(FVectorNode *node)
{
DBUG_ASSERT(node->stored);
node_cache.insert(node);
}
void *alloc_node_internal()
{
return alloc_root(&root, sizeof(FVectorNode) + gref_len + tref_len
+ vec_len * sizeof(float) + SIMD_word - 1);
}
protected:
MEM_ROOT root; MEM_ROOT root;
TABLE *table; Hash_set<FVectorNode> node_cache{PSI_INSTRUMENT_MEM, FVectorNode::get_key};
Field *vec_field;
public:
mysql_rwlock_t commit_lock;
size_t vec_len= 0; size_t vec_len= 0;
size_t byte_len= 0; size_t byte_len= 0;
uint err= 0; Atomic_relaxed<double> ef_power{0.6}; // for the bloom filter size heuristic
FVectorNode *start= 0;
const uint tref_len;
const uint gref_len;
const uint M;
MHNSW_Context(TABLE *t)
: tref_len(t->file->ref_length),
gref_len(t->hlindex->file->ref_length),
M(t->in_use->variables.mhnsw_max_edges_per_node)
{
mysql_rwlock_init(PSI_INSTRUMENT_ME, &commit_lock);
mysql_mutex_init(PSI_INSTRUMENT_ME, &cache_lock, MY_MUTEX_INIT_FAST);
for (uint i=0; i < array_elements(node_lock); i++)
mysql_mutex_init(PSI_INSTRUMENT_ME, node_lock + i, MY_MUTEX_INIT_SLOW);
init_alloc_root(PSI_INSTRUMENT_MEM, &root, 1024*1024, 0, MYF(0));
}
Hash_set<FVectorNode> node_cache{PSI_INSTRUMENT_MEM, FVectorNode::get_key}; virtual ~MHNSW_Context()
{
free_root(&root, MYF(0));
mysql_rwlock_destroy(&commit_lock);
mysql_mutex_destroy(&cache_lock);
for (size_t i=0; i < array_elements(node_lock); i++)
mysql_mutex_destroy(node_lock + i);
}
MHNSW_Context(TABLE *table, Field *vec_field) uint lock_node(FVectorNode *ptr)
: table(table), vec_field(vec_field)
{ {
init_alloc_root(PSI_INSTRUMENT_MEM, &root, 8192, 0, MYF(MY_THREAD_SPECIFIC)); ulong nr1= 1, nr2= 4;
my_hash_sort_bin(0, (uchar*)&ptr, sizeof(ptr), &nr1, &nr2);
uint ticket= nr1 % array_elements(node_lock);
mysql_mutex_lock(node_lock + ticket);
return ticket;
} }
~MHNSW_Context() void unlock_node(uint ticket)
{ {
free_root(&root, MYF(0)); mysql_mutex_unlock(node_lock + ticket);
}
uint max_neighbors(size_t layer) const
{
return (layer ? 1 : 2) * M; // heuristic from the paper
} }
FVectorNode *get_node(const void *gref);
void set_lengths(size_t len) void set_lengths(size_t len)
{ {
byte_len= len; byte_len= len;
vec_len= MY_ALIGN(byte_len/sizeof(float), SIMD_floats); vec_len= MY_ALIGN(byte_len/sizeof(float), SIMD_floats);
} }
static int acquire(MHNSW_Context **ctx, TABLE *table, bool for_update);
static MHNSW_Context *get_from_share(TABLE_SHARE *share, TABLE *table);
void reset_ctx(TABLE_SHARE *share)
{
mysql_mutex_lock(&share->LOCK_share);
if (static_cast<MHNSW_Context*>(share->hlindex->hlindex_data) == this)
{
share->hlindex->hlindex_data= nullptr;
--refcnt;
}
mysql_mutex_unlock(&share->LOCK_share);
}
void release(TABLE *table)
{
return release(table->file->has_transactions(), table->s);
}
virtual void release(bool can_commit, TABLE_SHARE *share)
{
if (can_commit)
mysql_rwlock_unlock(&commit_lock);
if (root_size(&root) > mhnsw_cache_size)
reset_ctx(share);
if (--refcnt == 0)
this->~MHNSW_Context(); // XXX reuse
}
FVectorNode *get_node(const void *gref)
{
mysql_mutex_lock(&cache_lock);
FVectorNode *node= node_cache.find(gref, gref_len);
if (!node)
{
node= new (alloc_node_internal()) FVectorNode(this, gref);
cache_internal(node);
}
mysql_mutex_unlock(&cache_lock);
return node;
}
/* used on INSERT, gref isn't known, so cannot cache the node yet */
void *alloc_node()
{
mysql_mutex_lock(&cache_lock);
auto p= alloc_node_internal();
mysql_mutex_unlock(&cache_lock);
return p;
}
/* explicitly cache the node after alloc_node() */
void cache_node(FVectorNode *node)
{
mysql_mutex_lock(&cache_lock);
cache_internal(node);
mysql_mutex_unlock(&cache_lock);
}
/* find the node without creating, only used on merging trx->ctx */
FVectorNode *find_node(const void *gref)
{
mysql_mutex_lock(&cache_lock);
FVectorNode *node= node_cache.find(gref, gref_len);
mysql_mutex_unlock(&cache_lock);
return node;
}
void *alloc_neighborhood(size_t max_layer)
{
mysql_mutex_lock(&cache_lock);
auto p= alloc_root(&root, sizeof(Neighborhood)*(max_layer+1) +
sizeof(FVectorNode*)*(MY_ALIGN(M, 4)*2 + MY_ALIGN(M,8)*max_layer));
mysql_mutex_unlock(&cache_lock);
return p;
}
}; };
FVector::FVector(MHNSW_Context *ctx_, const void *vec_) : ctx(ctx_) /*
This is a non-shared context that exists within one transaction.
At the end of the transaction it's either discarded (on rollback)
or merged into the shared ctx (on commit).
trx's are stored in thd->ha_data[] in a single-linked list,
one instance of trx per TABLE_SHARE and allocated on the
thd->transaction->mem_root
*/
class MHNSW_Trx : public MHNSW_Context
{ {
make_vec(vec_); public:
TABLE_SHARE *table_share;
bool list_of_nodes_is_lost= false;
MHNSW_Trx *next= nullptr;
MHNSW_Trx(TABLE *table) : MHNSW_Context(table), table_share(table->s) {}
void reset_trx()
{
node_cache.clear();
free_root(&root, MYF(0));
start= 0;
list_of_nodes_is_lost= true;
}
void release(bool, TABLE_SHARE *) override
{
if (root_size(&root) > mhnsw_cache_size)
reset_trx();
}
static MHNSW_Trx *get_from_thd(THD *thd, TABLE *table);
// it's okay in a transaction-local cache, there's no concurrent access
Hash_set<FVectorNode> &get_cache() { return node_cache; }
/* fake handlerton to use thd->ha_data and to get notified of commits */
static struct MHNSW_hton : public handlerton
{
MHNSW_hton()
{
db_type= DB_TYPE_HLINDEX_HELPER;
flags = HTON_NOT_USER_SELECTABLE | HTON_HIDDEN;
savepoint_offset= 0;
savepoint_set= [](handlerton *, THD *, void *){ return 0; };
savepoint_rollback_can_release_mdl= [](handlerton *, THD *){ return true; };
savepoint_rollback= do_savepoint_rollback;
commit= do_commit;
rollback= do_rollback;
}
static int do_commit(handlerton *, THD *thd, bool);
static int do_rollback(handlerton *, THD *thd, bool);
static int do_savepoint_rollback(handlerton *, THD *thd, void *);
} hton;
};
MHNSW_Trx::MHNSW_hton MHNSW_Trx::hton;
int MHNSW_Trx::MHNSW_hton::do_savepoint_rollback(handlerton *, THD *thd, void *)
{
for (auto trx= static_cast<MHNSW_Trx*>(thd_get_ha_data(thd, &hton));
trx; trx= trx->next)
trx->reset_trx();
return 0;
}
int MHNSW_Trx::MHNSW_hton::do_rollback(handlerton *, THD *thd, bool)
{
MHNSW_Trx *trx_next;
for (auto trx= static_cast<MHNSW_Trx*>(thd_get_ha_data(thd, &hton));
trx; trx= trx_next)
{
trx_next= trx->next;
trx->~MHNSW_Trx();
}
thd_set_ha_data(current_thd, &hton, nullptr);
return 0;
} }
void FVector::make_vec(const void *vec_) int MHNSW_Trx::MHNSW_hton::do_commit(handlerton *, THD *thd, bool)
{ {
DBUG_ASSERT(ctx->vec_len); MHNSW_Trx *trx_next;
vec= (float*)alloc_root(&ctx->root, for (auto trx= static_cast<MHNSW_Trx*>(thd_get_ha_data(thd, &hton));
ctx->vec_len * sizeof(float) + SIMD_margin); trx; trx= trx_next)
if (int off= ((intptr)vec) % SIMD_word) {
vec += (SIMD_word - off) / sizeof(float); trx_next= trx->next;
memcpy(vec, vec_, ctx->byte_len); auto ctx= MHNSW_Context::get_from_share(trx->table_share, nullptr);
for (size_t i=ctx->byte_len/sizeof(float); i < ctx->vec_len; i++) if (ctx)
vec[i]=0; {
mysql_rwlock_wrlock(&ctx->commit_lock);
if (trx->list_of_nodes_is_lost)
ctx->reset_ctx(trx->table_share);
else
{
// consider copying nodes from trx to shared cache when it makes sense
// for ann_benchmarks it does not
// also, consider flushing only changed nodes (a flag in the node)
for (FVectorNode &from : trx->get_cache())
if (FVectorNode *node= ctx->find_node(from.gref()))
node->vec= nullptr;
ctx->start= nullptr;
}
ctx->release(true, trx->table_share);
}
trx->~MHNSW_Trx();
}
thd_set_ha_data(current_thd, &hton, nullptr);
return 0;
}
MHNSW_Trx *MHNSW_Trx::get_from_thd(THD *thd, TABLE *table)
{
auto trx= static_cast<MHNSW_Trx*>(thd_get_ha_data(thd, &hton));
while (trx && trx->table_share != table->s) trx= trx->next;
if (!trx)
{
trx= new (&thd->transaction->mem_root) MHNSW_Trx(table);
trx->next= static_cast<MHNSW_Trx*>(thd_get_ha_data(thd, &hton));
thd_set_ha_data(thd, &hton, trx);
if (!trx->next)
{
bool all= thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN);
trans_register_ha(thd, all, &hton, 0);
}
}
return trx;
}
MHNSW_Context *MHNSW_Context::get_from_share(TABLE_SHARE *share, TABLE *table)
{
mysql_mutex_lock(&share->LOCK_share);
auto ctx= static_cast<MHNSW_Context*>(share->hlindex->hlindex_data);
if (!ctx && table)
{
ctx= new (&share->hlindex->mem_root) MHNSW_Context(table);
if (!ctx) return nullptr;
share->hlindex->hlindex_data= ctx;
ctx->refcnt++;
}
if (ctx)
ctx->refcnt++;
mysql_mutex_unlock(&share->LOCK_share);
return ctx;
}
int MHNSW_Context::acquire(MHNSW_Context **ctx, TABLE *table, bool for_update)
{
TABLE *graph= table->hlindex;
THD *thd= table->in_use;
if (table->file->has_transactions() &&
(for_update || thd_get_ha_data(thd, &MHNSW_Trx::hton)))
*ctx= MHNSW_Trx::get_from_thd(thd, table);
else
{
*ctx= MHNSW_Context::get_from_share(table->s, table);
if (table->file->has_transactions())
mysql_rwlock_rdlock(&(*ctx)->commit_lock);
}
if ((*ctx)->start)
return 0;
if (int err= graph->file->ha_index_init(IDX_LAYER, 1))
return err;
int err= graph->file->ha_index_last(graph->record[0]);
graph->file->ha_index_end();
if (err)
return err;
graph->file->position(graph->record[0]);
(*ctx)->set_lengths(graph->field[FIELD_VEC]->value_length());
(*ctx)->start= (*ctx)->get_node(graph->file->ref);
return (*ctx)->start->load_from_record(graph);
}
/* copy the vector, aligned and padded for SIMD */
static float *make_vec(void *mem, const void *src, size_t src_len)
{
auto dst= (float*)MY_ALIGN((intptr)mem, SIMD_word);
memcpy(dst, src, src_len);
const size_t start= src_len/sizeof(float);
for (size_t i= start; i < MY_ALIGN(start, SIMD_floats); i++)
dst[i]=0.0f;
return dst;
}
FVector::FVector(MHNSW_Context *ctx, MEM_ROOT *root, const void *vec_)
{
vec= make_vec(alloc_root(root, ctx->vec_len * sizeof(float) + SIMD_word - 1),
vec_, ctx->byte_len);
}
float *FVectorNode::make_vec(const void *v)
{
return ::make_vec(tref() + tref_len(), v, ctx->byte_len);
} }
FVectorNode::FVectorNode(MHNSW_Context *ctx_, const void *gref_) FVectorNode::FVectorNode(MHNSW_Context *ctx_, const void *gref_)
: FVector(ctx_), tref(nullptr) : FVector(), ctx(ctx_), stored(true)
{ {
gref= (uchar*)memdup_root(&ctx->root, gref_, get_gref_len()); memcpy(gref(), gref_, gref_len());
} }
FVectorNode::FVectorNode(MHNSW_Context *ctx_, const void *tref_, uint8_t layer, FVectorNode::FVectorNode(MHNSW_Context *ctx_, const void *tref_, uint8_t layer,
const void *vec_) const void *vec_)
: FVector(ctx_, vec_), gref(gref_max) : FVector(), ctx(ctx_), stored(false)
{ {
tref= (uchar*)memdup_root(&ctx->root, tref_, get_tref_len()); memset(gref(), 0xff, gref_len()); // important: larger than any real gref
memcpy(tref(), tref_, tref_len());
vec= make_vec(vec_);
alloc_neighborhood(layer); alloc_neighborhood(layer);
} }
float FVectorNode::distance_to(const FVector &other) const float FVectorNode::distance_to(const FVector &other) const
{ {
const_cast<FVectorNode*>(this)->load();
#if __GNUC__ > 7 #if __GNUC__ > 7
typedef float v8f __attribute__((vector_size(SIMD_word))); typedef float v8f __attribute__((vector_size(SIMD_word)));
v8f *p1= (v8f*)vec; v8f *p1= (v8f*)vec;
...@@ -167,294 +544,352 @@ float FVectorNode::distance_to(const FVector &other) const ...@@ -167,294 +544,352 @@ float FVectorNode::distance_to(const FVector &other) const
int FVectorNode::alloc_neighborhood(uint8_t layer) int FVectorNode::alloc_neighborhood(uint8_t layer)
{ {
DBUG_ASSERT(!neighbors); if (neighbors)
return 0;
max_layer= layer; max_layer= layer;
neighbors= new (&ctx->root) List<FVectorNode>[layer+1]; neighbors= (Neighborhood*)ctx->alloc_neighborhood(layer);
auto ptr= (FVectorNode**)(neighbors + (layer+1));
for (size_t i= 0; i <= layer; i++)
ptr= neighbors[i].init(ptr, ctx->max_neighbors(i));
return 0; return 0;
} }
int FVectorNode::load() int FVectorNode::load(TABLE *graph)
{ {
DBUG_ASSERT(gref); if (likely(vec))
if (tref)
return 0; return 0;
TABLE *graph= ctx->table->hlindex; DBUG_ASSERT(stored);
if ((ctx->err= graph->file->ha_rnd_pos(graph->record[0], gref))) // trx: consider loading nodes from shared, when it makes sense
return ctx->err; // for ann_benchmarks it does not
return load_from_record(); if (int err= graph->file->ha_rnd_pos(graph->record[0], gref()))
return err;
return load_from_record(graph);
} }
int FVectorNode::load_from_record() int FVectorNode::load_from_record(TABLE *graph)
{ {
TABLE *graph= ctx->table->hlindex; DBUG_ASSERT(ctx->byte_len);
uint ticket= ctx->lock_node(this);
SCOPE_EXIT([this, ticket](){ ctx->unlock_node(ticket); });
if (vec)
return 0;
String buf, *v= graph->field[FIELD_TREF]->val_str(&buf); String buf, *v= graph->field[FIELD_TREF]->val_str(&buf);
if (unlikely(!v || v->length() != get_tref_len())) if (unlikely(!v || v->length() != tref_len()))
return ctx->err= HA_ERR_CRASHED; return my_errno= HA_ERR_CRASHED;
tref= (uchar*)memdup_root(&ctx->root, v->ptr(), v->length()); memcpy(tref(), v->ptr(), v->length());
v= graph->field[FIELD_VEC]->val_str(&buf); v= graph->field[FIELD_VEC]->val_str(&buf);
if (unlikely(!v)) if (unlikely(!v))
return ctx->err= HA_ERR_CRASHED; return my_errno= HA_ERR_CRASHED;
DBUG_ASSERT(ctx->byte_len);
if (v->length() != ctx->byte_len) if (v->length() != ctx->byte_len)
return ctx->err= HA_ERR_CRASHED; return my_errno= HA_ERR_CRASHED;
make_vec(v->ptr()); float *vec_ptr= make_vec(v->ptr());
longlong layer= graph->field[FIELD_LAYER]->val_int(); longlong layer= graph->field[FIELD_LAYER]->val_int();
if (layer > 100) // 10e30 nodes at M=2, more at larger M's if (layer > 100) // 10e30 nodes at M=2, more at larger M's
return ctx->err= HA_ERR_CRASHED; return my_errno= HA_ERR_CRASHED;
if (alloc_neighborhood(static_cast<uint8_t>(layer))) if (int err= alloc_neighborhood(static_cast<uint8_t>(layer)))
return ctx->err; return err;
v= graph->field[FIELD_NEIGHBORS]->val_str(&buf); v= graph->field[FIELD_NEIGHBORS]->val_str(&buf);
if (unlikely(!v)) if (unlikely(!v))
return ctx->err= HA_ERR_CRASHED; return my_errno= HA_ERR_CRASHED;
// <N> <gref> <gref> ... <N> ...etc... // <N> <gref> <gref> ... <N> ...etc...
uchar *ptr= (uchar*)v->ptr(), *end= ptr + v->length(); uchar *ptr= (uchar*)v->ptr(), *end= ptr + v->length();
for (size_t i=0; i <= max_layer; i++) for (size_t i=0; i <= max_layer; i++)
{ {
if (unlikely(ptr >= end)) if (unlikely(ptr >= end))
return ctx->err= HA_ERR_CRASHED; return my_errno= HA_ERR_CRASHED;
size_t grefs= *ptr++; size_t grefs= *ptr++;
if (unlikely(ptr + grefs * get_gref_len() > end)) if (unlikely(ptr + grefs * gref_len() > end))
return ctx->err= HA_ERR_CRASHED; return my_errno= HA_ERR_CRASHED;
for (; grefs--; ptr+= get_gref_len()) neighbors[i].num= grefs;
neighbors[i].push_back(ctx->get_node(ptr), &ctx->root); for (size_t j=0; j < grefs; j++, ptr+= gref_len())
neighbors[i].links[j]= ctx->get_node(ptr);
} }
vec= vec_ptr; // must be done at the very end
return 0; return 0;
} }
size_t FVectorNode::get_tref_len() const void FVectorNode::push_neighbor(size_t layer, FVectorNode *other)
{ {
return ctx->table->file->ref_length; DBUG_ASSERT(neighbors[layer].num < ctx->max_neighbors(layer));
neighbors[layer].links[neighbors[layer].num++]= other;
} }
size_t FVectorNode::get_gref_len() const size_t FVectorNode::tref_len() const { return ctx->tref_len; }
{ size_t FVectorNode::gref_len() const { return ctx->gref_len; }
return ctx->table->hlindex->file->ref_length; uchar *FVectorNode::gref() const { return (uchar*)(this+1); }
} uchar *FVectorNode::tref() const { return gref() + gref_len(); }
uchar *FVectorNode::get_key(const FVectorNode *elem, size_t *key_len, my_bool) uchar *FVectorNode::get_key(const FVectorNode *elem, size_t *key_len, my_bool)
{ {
*key_len= elem->get_gref_len(); *key_len= elem->gref_len();
return elem->gref; return elem->gref();
} }
FVectorNode *MHNSW_Context::get_node(const void *gref) /* one visited node during the search. caches the distance to target */
struct Visited : public Sql_alloc
{ {
FVectorNode *node= node_cache.find(gref, table->hlindex->file->ref_length); FVectorNode *node;
if (!node) const float distance_to_target;
Visited(FVectorNode *n, float d) : node(n), distance_to_target(d) {}
static int cmp(void *, const Visited* a, const Visited *b)
{ {
node= new (&root) FVectorNode(this, gref); return a->distance_to_target < b->distance_to_target ? -1 :
node_cache.insert(node); a->distance_to_target > b->distance_to_target ? 1 : 0;
} }
return node; };
}
/*
a factory to create Visited and keep track of already seen nodes
static int cmp_vec(const FVector *target, const FVectorNode *a, const FVectorNode *b) note that PatternedSimdBloomFilter works in blocks of 8 elements,
so on insert they're accumulated in nodes[], on search the caller
provides 8 addresses at once. we record 0x0 as "seen" so that
the caller could pad the input with nullptr's
*/
class VisitedSet
{ {
float a_dist= a->distance_to(*target); MEM_ROOT *root;
float b_dist= b->distance_to(*target); const FVector &target;
PatternedSimdBloomFilter<FVectorNode> map;
const FVectorNode *nodes[8]= {0,0,0,0,0,0,0,0};
size_t idx= 1; // to record 0 in the filter
public:
uint count= 0;
VisitedSet(MEM_ROOT *root, const FVector &target, uint size) :
root(root), target(target), map(size, 0.01f) {}
Visited *create(FVectorNode *node)
{
auto *v= new (root) Visited(node, node->distance_to(target));
insert(node);
count++;
return v;
}
void insert(const FVectorNode *n)
{
nodes[idx++]= n;
if (idx == 8) flush();
}
void flush() {
if (idx) map.Insert(nodes);
idx=0;
}
uint8_t seen(FVectorNode **nodes) { return map.Query(nodes); }
};
if (a_dist < b_dist)
return -1;
if (a_dist > b_dist)
return 1;
return 0;
}
static int select_neighbors(MHNSW_Context *ctx, size_t layer, /*
FVectorNode &target, selects best neighbors from the list of candidates plus one extra candidate
const List<FVectorNode> &candidates_unsafe,
one extra candidate is specified separately to avoid appending it to
the Neighborhood candidates, which might be already at its max size.
*/
static int select_neighbors(MHNSW_Context *ctx, TABLE *graph, size_t layer,
FVectorNode &target, const Neighborhood &candidates,
FVectorNode *extra_candidate,
size_t max_neighbor_connections) size_t max_neighbor_connections)
{ {
Hash_set<FVectorNode> visited(PSI_INSTRUMENT_MEM, FVectorNode::get_key); Queue<Visited> pq; // working queue
Queue<FVectorNode, const FVector> pq; // working queue
Queue<FVectorNode, const FVector> pq_discard; // queue for discarded candidates
/*
make a copy of candidates in case it's target.neighbors[layer].
because we're going to modify the latter below
*/
List<FVectorNode> candidates= candidates_unsafe;
List<FVectorNode> &neighbors= target.neighbors[layer];
neighbors.empty(); if (pq.init(10000, false, Visited::cmp))
return my_errno= HA_ERR_OUT_OF_MEM;
if (pq.init(10000, 0, cmp_vec, &target) || MEM_ROOT * const root= graph->in_use->mem_root;
pq_discard.init(10000, 0, cmp_vec, &target)) auto discarded= (Visited**)my_safe_alloca(sizeof(Visited**)*max_neighbor_connections);
return ctx->err= HA_ERR_OUT_OF_MEM; size_t discarded_num= 0;
Neighborhood &neighbors= target.neighbors[layer];
for (const FVectorNode &candidate : candidates) for (size_t i=0; i < candidates.num; i++)
{ {
visited.insert(&candidate); FVectorNode *node= candidates.links[i];
pq.push(&candidate); if (int err= node->load(graph))
return err;
pq.push(new (root) Visited(node, node->distance_to(target)));
} }
if (extra_candidate)
pq.push(new (root) Visited(extra_candidate, extra_candidate->distance_to(target)));
DBUG_ASSERT(pq.elements()); DBUG_ASSERT(pq.elements());
neighbors.push_back(pq.pop(), &ctx->root); neighbors.num= 0;
while (pq.elements() && neighbors.elements < max_neighbor_connections) while (pq.elements() && neighbors.num < max_neighbor_connections)
{ {
const FVectorNode *vec= pq.pop(); Visited *vec= pq.pop();
const float target_dist= vec->distance_to(target); FVectorNode * const node= vec->node;
const float target_dista= target_dist / alpha; const float target_dista= vec->distance_to_target / alpha;
bool discard= false; bool discard= false;
for (const FVectorNode &neigh : neighbors) for (size_t i=0; i < neighbors.num; i++)
{ if ((discard= node->distance_to(*neighbors.links[i]) < target_dista))
if ((discard= vec->distance_to(neigh) < target_dista))
break; break;
}
if (!discard) if (!discard)
neighbors.push_back(vec, &ctx->root); target.push_neighbor(layer, node);
else if (pq_discard.elements() + neighbors.elements < max_neighbor_connections) else if (discarded_num + neighbors.num < max_neighbor_connections)
pq_discard.push(vec); discarded[discarded_num++]= vec;
} }
while (pq_discard.elements() && neighbors.elements < max_neighbor_connections) for (size_t i=0; i < discarded_num && neighbors.num < max_neighbor_connections; i++)
{ target.push_neighbor(layer, discarded[i]->node);
const FVectorNode *vec= pq_discard.pop();
neighbors.push_back(vec, &ctx->root);
}
my_safe_afree(discarded, sizeof(Visited**)*max_neighbor_connections);
return 0; return 0;
} }
int FVectorNode::save() int FVectorNode::save(TABLE *graph)
{ {
TABLE *graph= ctx->table->hlindex;
DBUG_ASSERT(tref);
DBUG_ASSERT(vec); DBUG_ASSERT(vec);
DBUG_ASSERT(neighbors); DBUG_ASSERT(neighbors);
graph->field[FIELD_LAYER]->store(max_layer, false); graph->field[FIELD_LAYER]->store(max_layer, false);
graph->field[FIELD_TREF]->set_notnull(); graph->field[FIELD_TREF]->set_notnull();
graph->field[FIELD_TREF]->store_binary(tref, get_tref_len()); graph->field[FIELD_TREF]->store_binary(tref(), tref_len());
graph->field[FIELD_VEC]->store_binary((uchar*)vec, ctx->byte_len); graph->field[FIELD_VEC]->store_binary((uchar*)vec, ctx->byte_len);
size_t total_size= 0; size_t total_size= 0;
for (size_t i=0; i <= max_layer; i++) for (size_t i=0; i <= max_layer; i++)
total_size+= 1 + get_gref_len() * neighbors[i].elements; total_size+= 1 + gref_len() * neighbors[i].num;
uchar *neighbor_blob= static_cast<uchar *>(my_safe_alloca(total_size)); uchar *neighbor_blob= static_cast<uchar *>(my_safe_alloca(total_size));
uchar *ptr= neighbor_blob; uchar *ptr= neighbor_blob;
for (size_t i= 0; i <= max_layer; i++) for (size_t i= 0; i <= max_layer; i++)
{ {
*ptr++= (uchar)(neighbors[i].elements); *ptr++= (uchar)(neighbors[i].num);
for (const auto &neigh: neighbors[i]) for (size_t j= 0; j < neighbors[i].num; j++, ptr+= gref_len())
{ memcpy(ptr, neighbors[i].links[j]->gref(), gref_len());
memcpy(ptr, neigh.get_gref(), get_gref_len());
ptr+= neigh.get_gref_len();
}
} }
graph->field[FIELD_NEIGHBORS]->store_binary(neighbor_blob, total_size); graph->field[FIELD_NEIGHBORS]->store_binary(neighbor_blob, total_size);
if (gref != gref_max) int err;
if (stored)
{ {
ctx->err= graph->file->ha_rnd_pos(graph->record[1], gref); if (!(err= graph->file->ha_rnd_pos(graph->record[1], gref())))
if (!ctx->err)
{ {
ctx->err= graph->file->ha_update_row(graph->record[1], graph->record[0]); err= graph->file->ha_update_row(graph->record[1], graph->record[0]);
if (ctx->err == HA_ERR_RECORD_IS_THE_SAME) if (err == HA_ERR_RECORD_IS_THE_SAME)
ctx->err= 0; err= 0;
} }
} }
else else
{ {
ctx->err= graph->file->ha_write_row(graph->record[0]); err= graph->file->ha_write_row(graph->record[0]);
graph->file->position(graph->record[0]); graph->file->position(graph->record[0]);
gref= (uchar*)memdup_root(&ctx->root, graph->file->ref, get_gref_len()); memcpy(gref(), graph->file->ref, gref_len());
stored= true;
ctx->cache_node(this);
} }
my_safe_afree(neighbor_blob, total_size); my_safe_afree(neighbor_blob, total_size);
return ctx->err; return err;
} }
static int update_second_degree_neighbors(MHNSW_Context *ctx, TABLE *graph,
static int update_second_degree_neighbors(MHNSW_Context *ctx, size_t layer, size_t layer, FVectorNode *node)
uint max_neighbors,
const FVectorNode &node)
{ {
for (FVectorNode &neigh: node.neighbors[layer]) const uint max_neighbors= ctx->max_neighbors(layer);
// it seems that one could update nodes in the gref order
// to avoid InnoDB deadlocks, but it produces no noticeable effect
for (size_t i=0; i < node->neighbors[layer].num; i++)
{ {
List<FVectorNode> &neighneighbors= neigh.neighbors[layer]; FVectorNode *neigh= node->neighbors[layer].links[i];
neighneighbors.push_back(&node, &ctx->root); Neighborhood &neighneighbors= neigh->neighbors[layer];
if (neighneighbors.elements > max_neighbors) if (neighneighbors.num < max_neighbors)
{ neigh->push_neighbor(layer, node);
if (select_neighbors(ctx, layer, neigh, neighneighbors, max_neighbors)) else
return ctx->err; if (int err= select_neighbors(ctx, graph, layer, *neigh, neighneighbors,
} node, max_neighbors))
if (neigh.save()) return err;
return ctx->err; if (int err= neigh->save(graph))
return err;
} }
return 0; return 0;
} }
static int search_layer(MHNSW_Context *ctx, TABLE *graph, const FVector &target,
static int search_layer(MHNSW_Context *ctx, const FVector &target, Neighborhood *start_nodes, uint ef, size_t layer,
const List<FVectorNode> &start_nodes, Neighborhood *result)
uint max_candidates_return, size_t layer,
List<FVectorNode> *result)
{ {
DBUG_ASSERT(start_nodes.elements > 0); DBUG_ASSERT(start_nodes->num > 0);
DBUG_ASSERT(result->elements == 0); result->num= 0;
MEM_ROOT * const root= graph->in_use->mem_root;
Queue<FVectorNode, const FVector> candidates; Queue<Visited> candidates;
Queue<FVectorNode, const FVector> best; Queue<Visited> best;
Hash_set<FVectorNode> visited(PSI_INSTRUMENT_MEM, FVectorNode::get_key);
candidates.init(10000, false, cmp_vec, &target); // WARNING! heuristic here
best.init(max_candidates_return, true, cmp_vec, &target); const double est_heuristic= 8 * std::sqrt(ctx->max_neighbors(layer));
const uint est_size= static_cast<uint>(est_heuristic * std::pow(ef, ctx->ef_power));
VisitedSet visited(root, target, est_size);
for (const FVectorNode &node : start_nodes) candidates.init(10000, false, Visited::cmp);
best.init(ef, true, Visited::cmp);
for (size_t i=0; i < start_nodes->num; i++)
{ {
candidates.push(&node); Visited *v= visited.create(start_nodes->links[i]);
if (best.elements() < max_candidates_return) candidates.push(v);
best.push(&node); if (best.elements() < ef)
else if (node.distance_to(target) > best.top()->distance_to(target)) best.push(v);
best.replace_top(&node); else if (v->distance_to_target < best.top()->distance_to_target)
visited.insert(&node); best.replace_top(v);
} }
float furthest_best= best.top()->distance_to(target); float furthest_best= best.top()->distance_to_target;
while (candidates.elements()) while (candidates.elements())
{ {
const FVectorNode &cur_vec= *candidates.pop(); const Visited &cur= *candidates.pop();
float cur_distance= cur_vec.distance_to(target); if (cur.distance_to_target > furthest_best && best.elements() == ef)
if (cur_distance > furthest_best && best.elements() == max_candidates_return) break; // All possible candidates are worse than what we have
{
break; // All possible candidates are worse than what we have. visited.flush();
// Can't get better.
}
for (const FVectorNode &neigh: cur_vec.neighbors[layer]) Neighborhood &neighbors= cur.node->neighbors[layer];
FVectorNode **links= neighbors.links, **end= links + neighbors.num;
for (; links < end; links+= 8)
{ {
if (visited.find(&neigh)) uint8_t res= visited.seen(links);
if (res == 0xff)
continue; continue;
visited.insert(&neigh); for (size_t i= 0; i < 8; i++)
if (best.elements() < max_candidates_return)
{ {
candidates.push(&neigh); if (res & (1 << i))
best.push(&neigh); continue;
furthest_best= best.top()->distance_to(target); if (int err= links[i]->load(graph))
} return err;
else if (neigh.distance_to(target) < furthest_best) Visited *v= visited.create(links[i]);
{ if (best.elements() < ef)
best.replace_top(&neigh); {
candidates.push(&neigh); candidates.push(v);
furthest_best= best.top()->distance_to(target); best.push(v);
furthest_best= best.top()->distance_to_target;
}
else if (v->distance_to_target < furthest_best)
{
best.replace_top(v);
candidates.push(v);
furthest_best= best.top()->distance_to_target;
}
} }
} }
} }
if (ef > 1 && visited.count*2 > est_size)
{
double ef_power= std::log(visited.count*2/est_heuristic) / std::log(ef);
set_if_bigger(ctx->ef_power, ef_power); // not atomic, but it's ok
}
while (best.elements()) result->num= best.elements();
result->push_front(best.pop(), &ctx->root); for (FVectorNode **links= result->links + result->num; best.elements();)
*--links= best.pop()->node;
return 0; return 0;
} }
...@@ -465,7 +900,7 @@ static int bad_value_on_insert(Field *f) ...@@ -465,7 +900,7 @@ static int bad_value_on_insert(Field *f)
my_error(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, MYF(0), "vector", "...", my_error(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, MYF(0), "vector", "...",
f->table->s->db.str, f->table->s->table_name.str, f->field_name.str, f->table->s->db.str, f->table->s->table_name.str, f->field_name.str,
f->table->in_use->get_stmt_da()->current_row_for_warning()); f->table->in_use->get_stmt_da()->current_row_for_warning());
return HA_ERR_GENERIC; return my_errno= HA_ERR_GENERIC;
} }
...@@ -476,7 +911,7 @@ int mhnsw_insert(TABLE *table, KEY *keyinfo) ...@@ -476,7 +911,7 @@ int mhnsw_insert(TABLE *table, KEY *keyinfo)
MY_BITMAP *old_map= dbug_tmp_use_all_columns(table, &table->read_set); MY_BITMAP *old_map= dbug_tmp_use_all_columns(table, &table->read_set);
Field *vec_field= keyinfo->key_part->field; Field *vec_field= keyinfo->key_part->field;
String buf, *res= vec_field->val_str(&buf); String buf, *res= vec_field->val_str(&buf);
MHNSW_Context ctx(table, vec_field); MHNSW_Context *ctx;
/* metadata are checked on open */ /* metadata are checked on open */
DBUG_ASSERT(graph); DBUG_ASSERT(graph);
...@@ -494,92 +929,76 @@ int mhnsw_insert(TABLE *table, KEY *keyinfo) ...@@ -494,92 +929,76 @@ int mhnsw_insert(TABLE *table, KEY *keyinfo)
if (res->length() == 0 || res->length() % 4) if (res->length() == 0 || res->length() % 4)
return bad_value_on_insert(vec_field); return bad_value_on_insert(vec_field);
const double NORMALIZATION_FACTOR= 1 / std::log(thd->variables.mhnsw_max_edges_per_node);
table->file->position(table->record[0]); table->file->position(table->record[0]);
if (int err= graph->file->ha_index_init(IDX_LAYER, 1)) int err= MHNSW_Context::acquire(&ctx, table, true);
return err; SCOPE_EXIT([ctx, table](){ ctx->release(table); });
if (err)
ctx.err= graph->file->ha_index_last(graph->record[0]);
graph->file->ha_index_end();
if (ctx.err)
{ {
if (ctx.err != HA_ERR_END_OF_FILE) if (err != HA_ERR_END_OF_FILE)
return ctx.err; return err;
ctx.err= 0;
// First insert! // First insert!
ctx.set_lengths(res->length()); ctx->set_lengths(res->length());
FVectorNode target(&ctx, table->file->ref, 0, res->ptr()); FVectorNode *target= new (ctx->alloc_node())
return target.save(); FVectorNode(ctx, table->file->ref, 0, res->ptr());
if (!((err= target->save(graph))))
ctx->start= target;
return err;
} }
longlong max_layer= graph->field[FIELD_LAYER]->val_int(); if (ctx->byte_len != res->length())
return bad_value_on_insert(vec_field);
List<FVectorNode> candidates;
List<FVectorNode> start_nodes;
graph->file->position(graph->record[0]);
FVectorNode *start_node= ctx.get_node(graph->file->ref);
if (start_nodes.push_back(start_node, &ctx.root)) Neighborhood candidates, start_nodes;
return HA_ERR_OUT_OF_MEM; candidates.init(thd->alloc<FVectorNode*>(ef_construction + 7), ef_construction);
start_nodes.init(thd->alloc<FVectorNode*>(ef_construction + 7), ef_construction);
start_nodes.links[start_nodes.num++]= ctx->start;
ctx.set_lengths(graph->field[FIELD_VEC]->value_length()); const double NORMALIZATION_FACTOR= 1 / std::log(ctx->M);
if (int err= start_node->load_from_record()) double log= -std::log(my_rnd(&thd->rand)) * NORMALIZATION_FACTOR;
return err; const uint8_t max_layer= start_nodes.links[0]->max_layer;
uint8_t target_layer= std::min<uint8_t>(static_cast<uint8_t>(std::floor(log)), max_layer + 1);
int cur_layer;
if (ctx.byte_len != res->length()) FVectorNode *target= new (ctx->alloc_node())
return bad_value_on_insert(vec_field); FVectorNode(ctx, table->file->ref, target_layer, res->ptr());
if (int err= graph->file->ha_rnd_init(0)) if (int err= graph->file->ha_rnd_init(0))
return err; return err;
SCOPE_EXIT([graph](){ graph->file->ha_rnd_end(); }); SCOPE_EXIT([graph](){ graph->file->ha_rnd_end(); });
double new_num= my_rnd(&thd->rand); for (cur_layer= max_layer; cur_layer > target_layer; cur_layer--)
double log= -std::log(new_num) * NORMALIZATION_FACTOR;
longlong new_node_layer= std::min<longlong>(std::floor(log), max_layer + 1);
longlong cur_layer;
FVectorNode target(&ctx, table->file->ref, new_node_layer, res->ptr());
for (cur_layer= max_layer; cur_layer > new_node_layer; cur_layer--)
{ {
if (search_layer(&ctx, target, start_nodes, 1, cur_layer, &candidates)) if (int err= search_layer(ctx, graph, *target, &start_nodes, 1, cur_layer,
return ctx.err; &candidates))
start_nodes= candidates; return err;
candidates.empty(); std::swap(start_nodes, candidates);
} }
for (; cur_layer >= 0; cur_layer--) for (; cur_layer >= 0; cur_layer--)
{ {
uint max_neighbors= (cur_layer == 0) // heuristics from the paper uint max_neighbors= ctx->max_neighbors(cur_layer);
? thd->variables.mhnsw_max_edges_per_node * 2 if (int err= search_layer(ctx, graph, *target, &start_nodes,
: thd->variables.mhnsw_max_edges_per_node; ef_construction, cur_layer, &candidates))
if (search_layer(&ctx, target, start_nodes, ef_construction, cur_layer, return err;
&candidates))
return ctx.err; if (int err= select_neighbors(ctx, graph, cur_layer, *target, candidates,
0, max_neighbors))
if (select_neighbors(&ctx, cur_layer, target, candidates, max_neighbors)) return err;
return ctx.err; std::swap(start_nodes, candidates);
start_nodes= candidates;
candidates.empty();
} }
if (target.save()) if (int err= target->save(graph))
return ctx.err; return err;
for (longlong cur_layer= new_node_layer; cur_layer >= 0; cur_layer--) if (target_layer > max_layer)
ctx->start= target;
for (cur_layer= target_layer; cur_layer >= 0; cur_layer--)
{ {
uint max_neighbors= (cur_layer == 0) // heuristics from the paper if (int err= update_second_degree_neighbors(ctx, graph, cur_layer, target))
? thd->variables.mhnsw_max_edges_per_node * 2 return err;
: thd->variables.mhnsw_max_edges_per_node;
// XXX do only one ha_update_row() per node
if (update_second_degree_neighbors(&ctx, cur_layer, max_neighbors, target))
return ctx.err;
} }
dbug_tmp_restore_column_map(&table->read_set, old_map); dbug_tmp_restore_column_map(&table->read_set, old_map);
...@@ -592,79 +1011,67 @@ int mhnsw_first(TABLE *table, KEY *keyinfo, Item *dist, ulonglong limit) ...@@ -592,79 +1011,67 @@ int mhnsw_first(TABLE *table, KEY *keyinfo, Item *dist, ulonglong limit)
{ {
THD *thd= table->in_use; THD *thd= table->in_use;
TABLE *graph= table->hlindex; TABLE *graph= table->hlindex;
Field *vec_field= keyinfo->key_part->field;
Item_func_vec_distance *fun= (Item_func_vec_distance *)dist; Item_func_vec_distance *fun= (Item_func_vec_distance *)dist;
String buf, *res= fun->get_const_arg()->val_str(&buf); String buf, *res= fun->get_const_arg()->val_str(&buf);
handler *h= table->file; MHNSW_Context *ctx;
MHNSW_Context ctx(table, vec_field);
if (int err= h->ha_rnd_init(0)) if (int err= table->file->ha_rnd_init(0))
return err; return err;
if (int err= graph->file->ha_index_init(0, 1)) if (int err= MHNSW_Context::acquire(&ctx, table, false))
return err; return err;
ctx.err= graph->file->ha_index_last(graph->record[0]); SCOPE_EXIT([ctx, table](){ ctx->release(table); });
graph->file->ha_index_end();
if (ctx.err)
return ctx.err;
longlong max_layer= graph->field[FIELD_LAYER]->val_int(); size_t ef= thd->variables.mhnsw_min_limit;
List<FVectorNode> candidates; Neighborhood candidates, start_nodes;
List<FVectorNode> start_nodes; candidates.init(thd->alloc<FVectorNode*>(ef + 7), ef);
start_nodes.init(thd->alloc<FVectorNode*>(ef + 7), ef);
graph->file->position(graph->record[0]);
FVectorNode *start_node= ctx.get_node(graph->file->ref);
// one could put all max_layer nodes in start_nodes // one could put all max_layer nodes in start_nodes
// but it has no effect of the recall or speed // but it has no effect of the recall or speed
if (start_nodes.push_back(start_node, &ctx.root)) start_nodes.links[start_nodes.num++]= ctx->start;
return HA_ERR_OUT_OF_MEM;
ctx.set_lengths(graph->field[FIELD_VEC]->value_length());
if (int err= start_node->load_from_record())
return err;
/* /*
if the query vector is NULL or invalid, VEC_DISTANCE will return if the query vector is NULL or invalid, VEC_DISTANCE will return
NULL, so the result is basically unsorted, we can return rows NULL, so the result is basically unsorted, we can return rows
in any order. For simplicity let's sort by the start_node. in any order. For simplicity let's sort by the start_node.
*/ */
if (!res || ctx.byte_len != res->length()) if (!res || ctx->byte_len != res->length())
(res= &buf)->set((char*)start_node->vec, ctx.byte_len, &my_charset_bin); (res= &buf)->set((char*)start_nodes.links[0]->vec, ctx->byte_len, &my_charset_bin);
const longlong max_layer= start_nodes.links[0]->max_layer;
FVector target(ctx, thd->mem_root, res->ptr());
if (int err= graph->file->ha_rnd_init(0)) if (int err= graph->file->ha_rnd_init(0))
return err; return err;
SCOPE_EXIT([graph](){ graph->file->ha_rnd_end(); }); SCOPE_EXIT([graph](){ graph->file->ha_rnd_end(); });
FVector target(&ctx, res->ptr());
uint ef_search= thd->variables.mhnsw_min_limit;
for (size_t cur_layer= max_layer; cur_layer > 0; cur_layer--) for (size_t cur_layer= max_layer; cur_layer > 0; cur_layer--)
{ {
if (search_layer(&ctx, target, start_nodes, 1, cur_layer, &candidates)) if (int err= search_layer(ctx, graph, target, &start_nodes, 1, cur_layer,
return ctx.err; &candidates))
start_nodes= candidates; return err;
candidates.empty(); std::swap(start_nodes, candidates);
} }
if (search_layer(&ctx, target, start_nodes, ef_search, 0, &candidates)) if (int err= search_layer(ctx, graph, target, &start_nodes, ef, 0,
return ctx.err; &candidates))
return err;
size_t context_size=limit * h->ref_length + sizeof(ulonglong); if (limit > candidates.num)
limit= candidates.num;
size_t context_size=limit * ctx->tref_len + sizeof(ulonglong);
char *context= thd->alloc(context_size); char *context= thd->alloc(context_size);
graph->context= context; graph->context= context;
*(ulonglong*)context= limit; *(ulonglong*)context= limit;
context+= context_size; context+= context_size;
while (limit--) for (size_t i=0; limit--; i++)
{ {
context-= h->ref_length; context-= ctx->tref_len;
memcpy(context, candidates.pop()->get_tref(), h->ref_length); memcpy(context, candidates.links[i]->tref(), ctx->tref_len);
} }
DBUG_ASSERT(context - sizeof(ulonglong) == graph->context); DBUG_ASSERT(context - sizeof(ulonglong) == graph->context);
...@@ -679,7 +1086,17 @@ int mhnsw_next(TABLE *table) ...@@ -679,7 +1086,17 @@ int mhnsw_next(TABLE *table)
ref+= sizeof(ulonglong) + (--*limit) * table->file->ref_length; ref+= sizeof(ulonglong) + (--*limit) * table->file->ref_length;
return table->file->ha_rnd_pos(table->record[0], ref); return table->file->ha_rnd_pos(table->record[0], ref);
} }
return HA_ERR_END_OF_FILE; return my_errno= HA_ERR_END_OF_FILE;
}
void mhnsw_free(TABLE_SHARE *share)
{
TABLE_SHARE *graph_share= share->hlindex;
if (!graph_share->hlindex_data)
return;
static_cast<MHNSW_Context*>(graph_share->hlindex_data)->~MHNSW_Context();
graph_share->hlindex_data= 0;
} }
const LEX_CSTRING mhnsw_hlindex_table_def(THD *thd, uint ref_length) const LEX_CSTRING mhnsw_hlindex_table_def(THD *thd, uint ref_length)
......
...@@ -25,3 +25,6 @@ const LEX_CSTRING mhnsw_hlindex_table_def(THD *thd, uint ref_length); ...@@ -25,3 +25,6 @@ const LEX_CSTRING mhnsw_hlindex_table_def(THD *thd, uint ref_length);
int mhnsw_insert(TABLE *table, KEY *keyinfo); int mhnsw_insert(TABLE *table, KEY *keyinfo);
int mhnsw_first(TABLE *table, KEY *keyinfo, Item *dist, ulonglong limit); int mhnsw_first(TABLE *table, KEY *keyinfo, Item *dist, ulonglong limit);
int mhnsw_next(TABLE *table); int mhnsw_next(TABLE *table);
void mhnsw_free(TABLE_SHARE *share);
extern ulonglong mhnsw_cache_size;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment