5.1.8.3 Структурированные системные переменные
Структурированная переменная отличается от обычной системной переменной в двух аспектах:
Её значение представляет собой структуру с компонентами, которые задают параметры сервера, считающиеся тесно связанными.
Может быть несколько экземпляров данного типа структурированной переменной. Каждый из них имеет другое имя и ссылается на различные ресурсы, поддерживаемые сервером.
MySQL поддерживает один тип структурированных переменных, который задаёт параметры, управляющие работой кэш-памяти ключей. Структурированная переменная кэш-памяти ключей имеет следующие компоненты:
Этот раздел описывает синтаксис ссылки на структурированные переменные. Переменные кэш-памяти ключей используются в примерах синтаксиса, но конкретные детали работы с кэш-памятью ключей можно найти в другом месте, в разделе 8.10.2, «Кэш ключей MyISAM».
Для ссылки на компонент экземпляра структурированной переменной можно использовать составное имя в формате instance_name.component_name. Примеры:
hot_cache.key_buffer_size
hot_cache.key_cache_block_size
cold_cache.key_cache_block_size
Для каждой структурированной системной переменной всегда предварительно определён экземпляр с именем default. Если вы ссылаетесь на компонент структурированной переменной без указания имени экземпляра, используется экземпляр default. Таким образом, default.key_buffer_size и key_buffer_size оба ссылаются на одну и ту же системную переменную.
Экземпляры и компоненты структурированных переменных подчиняются следующим правилам именования:
Для данного типа структурированной переменной каждое имя экземпляра должно быть уникальным внутри переменных этого типа. Однако имена экземпляров не обязательно должны быть уникальными между типами структурированных переменных. Например, каждая структурированная переменная имеет экземпляр с именем
default, поэтомуdefaultне является уникальным для разных типов переменных.Имена компонентов каждого типа структурированных переменных должны быть уникальными для всех имён системных переменных. Если бы это не было верно (то есть, если бы два разных типа структурированных переменных могли использовать одни и те же имена компонентов), не было бы ясно, какой структурированной переменной по умолчанию пользоваться при ссылках на имена членов, не квалифицированные именем экземпляра.
Если имя экземпляра структурированной переменной не является допустимым идентификатором без кавычек, ссылайтесь на него как на идентификатор в кавычках, используя обратные кавычки. Например,
hot-cacheне является допустимым, но`hot-cache`является.global,sessionиlocalне являются допустимыми именами экземпляров. Это предотвращает конфликт с обозначениями, такими как@@GLOBAL., для ссылки на неструктурированные системные переменные.var_name
В настоящее время первые два правила не могут быть нарушены, потому что единственный тип структурированной переменной — это переменная для кэш-памяти ключей. Эти правила могут приобрести большее значение, если в будущем будет создан другой тип структурированной переменной.
За исключением одного случая, вы можете ссылаться на компоненты структурированных переменных с использованием составных имён в любом контексте, где могут встречаться простые имена переменных. Например, вы можете назначить значение структурированной переменной с помощью параметра командной строки:
$> mysqld --hot_cache.key_buffer_size=64K
В файле параметров используйте этот синтаксис:
[mysqld]
hot_cache.key_buffer_size=64K
Если вы запустите сервер с этим параметром, он создаст кэш ключей с именем hot_cache размером 64 КБ, помимо кэша ключей по умолчанию, имеющего размер по умолчанию 8 МБ.
Предположим, что вы запускаете сервер следующим образом:
$> mysqld --key_buffer_size=256K \
--extra_cache.key_buffer_size=128K \
--extra_cache.key_cache_block_size=2048
В этом случае сервер устанавливает размер кэша ключей по умолчанию в 256 КБ. (Вы также могли бы написать --default.key_buffer_size=256K). Кроме того, сервер создаёт второй кэш ключей с именем extra_cache размером 128 КБ, с размером блочных буферов для кеширования блоков индексов таблиц, установленным в 2048 байт.
Следующий пример запускает сервер с тремя различными кэшами ключей, имеющими размеры в соотношении 3:1:1:
$> mysqld --key_buffer_size=6M \
--hot_cache.key_buffer_size=2M \
--cold_cache.key_buffer_size=2M
Значения структурированных переменных можно устанавливать и извлекать во время выполнения. Например, чтобы установить кэш ключей с именем hot_cache размером 10 МБ, используйте любое из этих утверждений:
mysql> SET GLOBAL hot_cache.key_buffer_size = 10*1024*1024;
mysql> SET @@GLOBAL.hot_cache.key_buffer_size = 10*1024*1024;
Чтобы получить размер кэша, сделайте следующее:
mysql> SELECT @@GLOBAL.hot_cache.key_buffer_size;
Однако следующее утверждение не работает. Переменная не интерпретируется как составное имя, а как простая строка для операции сопоставления шаблонов LIKE:
mysql> SHOW GLOBAL VARIABLES LIKE 'hot_cache.key_buffer_size';
Это исключение из возможности использования имён структурированных переменных в любом месте, где может появиться простое имя переменной.
© 2025 Oracle
Licensed under the GPLv2 License.