Поиск
Системные переменные
Начиная с MySQL 4.0.3, мы предоставили лучший доступ к множеству системных переменных и сеансовых переменных соединений. Многие переменные можно изменять динамически - при работающем сервере. Это позволяет модифицировать поведение сервера без его останова и перезапуска.
Сервер mysqld поддерживает два типа переменных. Глобальные переменные влияют на все операции сервера. Сеансовые переменные влияют только на отдельное клиентское соединение.
Когда сервер стартует, он инициализирует все глобальные переменные значениями по умолчанию. Эти умолчания могут изменяться опциями, указанными в файле опций или в командной строке. После того, как сервер стартует, динамические глобальные переменные можно изменять, подключаясь к серверу и выполняя оператор SET GLOBAL имя_ п ер еменной. Для изменения глобальных переменных нужно иметь привилегию SUPER.
Сервер также поддерживает набор сеансовых переменных для каждого подключенного клиента. Клиентские сеансовые переменные инициализируются во время установки соединения с сервером значениями, взятыми из соответствующих глобальных переменных.
Те сеансовые переменные, которые являются динамическими, клиент может изменять с помощью оператора SET SESSION имя_переменной. Установка сеансовых переменных не требует специальных привилегий, но клиент может изменять только свои собственные сеансовые переменные, а никакого другого клиента.
Изменения в глобальных переменных видимы всем клиентам, которые имеют к ним доступ. Однако эти изменения затрагивают соответствующие сеансовые переменные, которые инициализируются значениями глобальных, только для клиентов, подключившихся после внесения изменений. Сеансовые переменные клиентов, подключившихся ранее, не изменяются (даже для того клиента, который выполняет оператор SET GLOBAL).
Глобальные или сеансовые переменные могут быть установлены и прочтены с применением одной из приведенных ниже синтаксических форм. В приведенных далее примерах задействована переменная sort_buf fer_size.
Для установки глобальной переменной можно воспользоваться одним из следующих вариантов:
Установить значение сеансовой переменной можно так:
mysql SET SESSION sort_buffer mysql SET @@session.sort_buffer_ mysql SET sort_buffer__size=3Haчение;
LOCAL - ЭТО синоним SESSION.
Если вы не указываете GLOBAL, SESSION или LOCAL при установке значения переменной, по умолчанию предполагается SESSION (см. раздел Синтаксис SET).
Чтобы получить значение глобальной переменной, используйте один из следующих операторов:
mysql SELECT @@global.sort_buffer__size;
mysql SHOW GLOBAL VARIABLES like 'sort_buffer_size';
Получить значение сеансовой переменной можно одним из следующих способов:
mysql SELECT @@sort_buffer_size;
mysql SELECT @@session.sort_buffer_size;
mysql SHOW SESSION VARIABLES like 'sort_buffer_size';
Здесь также LOCAL является синонимом SESSION.
Когда вы читаете значение переменной с помощью оператора SELECT $$имя_переменной (то есть, не указывая global, session или local), MySQL возвращает значение сеансовой переменной, если она существует, и глобальной - в противном случае.
Для SHOW VARIABLES, если не указано ни SESSION, ни GLOBAL, ни LOCAL, MySQL возвращает SESSION.
Причина для обязательного указания слова GLOBAL при установке исключительно глобальных переменных состоит в том, чтобы избежать проблем в будущем. Если удалить SESSION-переменную с тем же именем, что и GLOBAL, то клиент с привилегией SUPER может нечаянно изменить GLOBAL-переменную вместо того, чтобы изменить только SESSION-переменную, принадлежащую его собственному сеансу. Если добавить GLOBAL-переменную с тем же именем, что и существующая SESSION-переменная, то клиент, желая изменить GLOBAL-переменную, изменить только свою SESSION-переменную.
Дополнительную информацию о стартовых опциях и системных переменных можно найти в книге MySQL. Руководство администратора (М. : Издательский дом Вильяме, 2005, ISBN 5-8459-0805-1). Там же приведен список переменных, которые можно изменять во время работы сервера.
Структурированные системные переменные
Структурированные системные переменные поддерживаются, начиная с MySQL 4.1.1. Структурированные переменные отличаются от обычных системных переменных в двух аспектах:- Их значения являются структурами с компонентами, представляющими парамет
ры сервера, которые близко связаны друг с другом. - Может существовать несколько экземпляров данного типа структурированной
переменной. Они имеют различные имена и ссылаются на различные ресурсы,
поддерживаемые сервером.
В настоящий момент MySQL поддерживает только один тип структурированных переменных. Он специфицирует параметры, управляющие операциями кэшей ключей. Структурированные переменные кэшей ключей имеют следующие компоненты:
- key_buffer_size
- key_cache_block_size
- key_cache_division_limit
- key_cache_age_threshold
Целью настоящего раздела является описание синтаксиса ссылок на структурированные переменные. Переменные кэшей ключей используются для демонстрации примеров синтаксиса, а специфические детали о работе с ключевыми кэшами можно найти в книге MySQL. Руководство администратора.
Чтобы сослаться на компонент структурированной переменной, вы можете использовать составное имя в формате имя_экземпляра .имя_компонента. Вот примеры:
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 - не уникальное имя между разными типами. - Имена компонентов каждого тира структурированных переменных должны быть
уникальны среди всех имен системных переменных. Если бы это было не так (то
есть, два разных типа структурированных переменных имели бы компоненты с
одинаковыми именами), было бы не ясно, на какую переменную default ссылает
ся имя члена структурированной переменной, если оно не квалифицировано име
нем экземпляра. - Если имя экземпляра структурированной переменной не является корректным
н виде идентификатора без кавычек, обращайтесь к нему с использованием
обратных одинарных кавычек. Например, hot-cache - недопустимое имя, но
4hot-cacheч - вполне законное. - global, session и local не являются правильными именами экземпляров. Это по
зволяет избежать конфликтов с нотацией, таких как @@д1оЬа1. имя_леремеяяой,
для ссылки на неструктурированные системные переменные.
В настоящий момент первые два правила нарушить невозможно, потому что существует только один тип структурированных переменных для описания параметров кэшей ключей. Эти правила обретут большее значение в будущем, когда появятся какие-то другие типы структурированных переменных.
Можно ссылаться на компоненты структурированных переменных, используя составные имена в любом контексте, где допустимо появление простых имен переменных. Например, вы можете присваивать значение структурированным переменным, используя опции командной строки:shell mysqld -hot_cache.key_buffer_size=64K В файле опций поступите следующим образом:
[mysqld] hot_cache.key_buffer_size=64K
Если вы запускаете сервер с подобной опцией, он создает кэш ключей с именем hotcache размером 64 Кбайт в дополнение к кэшу ключей по умолчанию, который имеет размер 8 Мбайт.
Предположим, что сервер запускается так:
shell mysqld —keyJbuffer_size=256K \
—extra_cache.keyjbuffer_size=128K \ —extra_cache.key__cache_block_size=2048
В этом случае сервер устанавливает размер кэша ключей по умолчанию в 256 Кбайт (можно также указать — -default. key_buffer_size=256K). В дополнение сервер создает второй кэш ключей с именем extracache, который имеет размер 128 Кбайт и размер блока буферов для кэширования индексных блоков таблиц в 2048 байт.
В следующем примере сервер запускается с тремя различными кэшами ключей, которые имеют отношение размеров 3:1:1:
shell 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.keyjbuffer_size = 10*1024*1024; mysql SET @©global.hot_cache.keyjbuffer_size = 10*1024*1024;
Чтобы получить размер кэша, сделайте так:
mysql SELECT @@global.hot_cache.key_buffer_size;
Однако следующий оператор работать не будет. Переменная интерпретируется не как составное имя, а как простая строка в конструкции LIKE сопоставления с шаблоном:
mysql SHOW GLOBAL VARIABLES LIKE 'hot_cache.keyjbuffer_size';
Это единственное исключение из правила, которое гласит, что имя составной переменной может применяться везде, где допустимо появление простого имени.