Поиск

Системные переменные

Начиная с MySQL 4.0.3, мы предоставили лучший доступ к множеству системных переменных и сеансовых переменных соединений. Многие переменные можно изменять динамически - при работающем сервере. Это позволяет модифицировать поведение сер­вера без его останова и перезапуска.
Сервер mysqld поддерживает два типа переменных. Глобальные переменные влияют на все операции сервера. Сеансовые переменные влияют только на отдельное клиент­ское соединение.
Когда сервер стартует, он инициализирует все глобальные переменные значениями по умолчанию. Эти умолчания могут изменяться опциями, указанными в файле опций или в командной строке. После того, как сервер стартует, динамические глобальные пе­ременные можно изменять, подключаясь к серверу и выполняя оператор SET GLOBAL имя_ п ер еменной. Для изменения глобальных переменных нужно иметь привилегию SUPER.
Сервер также поддерживает набор сеансовых переменных для каждого подключенного клиента. Клиентские сеансовые переменные инициализируются во время установки со­единения с сервером значениями, взятыми из соответствующих глобальных переменных.
Те сеансовые переменные, которые являются динамическими, клиент может изме­нять с помощью оператора SET SESSION имя_переменной. Установка сеансовых пере­менных не требует специальных привилегий, но клиент может изменять только свои собственные сеансовые переменные, а никакого другого клиента.
Изменения в глобальных переменных видимы всем клиентам, которые имеют к ним доступ. Однако эти изменения затрагивают соответствующие сеансовые переменные, которые инициализируются значениями глобальных, только для клиентов, подключив­шихся после внесения изменений. Сеансовые переменные клиентов, подключившихся ранее, не изменяются (даже для того клиента, который выполняет оператор SET GLOBAL).
Глобальные или сеансовые переменные могут быть установлены и прочтены с при­менением одной из приведенных ниже синтаксических форм. В приведенных далее примерах задействована переменная sort_buf fer_size.
Для установки глобальной переменной можно воспользоваться одним из следующих вариантов:

>raysql SET GLOBAL sort_buffer_size=3Haчение; raysql SET @@global.sort_buffer_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. Структурированные переменные отличаются от обычных системных переменных в двух аспектах:

  1. Их значения являются структурами с компонентами, представляющими парамет­
    ры сервера, которые близко связаны друг с другом.
  2. Может существовать несколько экземпляров данного типа структурированной
    переменной. Они имеют различные имена и ссылаются на различные ресурсы,
    поддерживаемые сервером.

В настоящий момент MySQL поддерживает только один тип структурированных пе­ременных. Он специфицирует параметры, управляющие операциями кэшей ключей. Структурированные переменные кэшей ключей имеют следующие компоненты:

  1. key_buffer_size
  2. key_cache_block_size
  3. key_cache_division_limit
  4. 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 ссылаются на одну и ту же системную пе­ременную.
Правила именования экземпляров и компонентов структурированных переменных формулируются следующим образом:

  1. Для заданного типа структурированных переменных каждый экземпляр должен
    иметь имя, уникальное среди переменных данного типа. Однако имена перемен­
    ных не обязаны быть уникальными между разными типами переменных. Напри­
    мер, каждая структурированная переменная имеет экземпляр с именем default,
    таким образом, default - не уникальное имя между разными типами.
  2. Имена компонентов каждого тира структурированных переменных должны быть
    уникальны среди всех имен системных переменных. Если бы это было не так (то
    есть, два разных типа структурированных переменных имели бы компоненты с
    одинаковыми именами), было бы не ясно, на какую переменную default ссылает­
    ся имя члена структурированной переменной, если оно не квалифицировано име­
    нем экземпляра.
  3. Если имя экземпляра структурированной переменной не является корректным
    н виде идентификатора без кавычек, обращайтесь к нему с использованием
    обратных одинарных кавычек. Например, hot-cache - недопустимое имя, но
    4hot-cacheч - вполне законное.
  4. 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';
Это единственное исключение из правила, которое гласит, что имя составной пере­менной может применяться везде, где допустимо появление простого имени.