Spec-Zone.ru › MySQL 9.2

7.1.9.5 Структурированные системные переменные

Структурированная переменная отличается от обычной системной переменной по двум аспектам:

  • Её значение представляет собой структуру с компонентами, определяющими параметры сервера, которые считаются тесно связанными.

  • Может быть несколько экземпляров данного типа структурированной переменной. Каждый из них имеет другое имя и относится к другому ресурсу, поддерживаемому сервером.

MySQL поддерживает один тип структурированной переменной, который определяет параметры, управляющие работой кэшей ключей. Структурированная переменная кэша ключей имеет следующие компоненты:

  • key_buffer_size

  • key_cache_block_size

  • key_cache_division_limit

  • key_cache_age_threshold

В этом разделе описывается синтаксис для ссылок на структурированные переменные. Переменные кэша ключей используются для примеров синтаксиса, но подробности о том, как работают кэши ключей, можно найти в другом месте, в разделе 10.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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/structured-system-variables.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API