Spec-Zone .ru
спецификации, руководства, описания, API

8.9.2.2. Многократные Ключевые Кэши

Совместный доступ к ключевому кэшу улучшает производительность, но не устраняет конкуренцию среди сеансов полностью. Они все еще конкурируют за управляющие структуры, которые управляют доступом к ключевым кэш-буферам. Чтобы уменьшить ключевую конкуренцию доступа кэша далее, MySQL также обеспечивает многократные ключевые кэши. Эта опция позволяет, Вы, чтобы присвоить различную таблицу индексируете к различным ключевым кэшам.

Где есть многократные ключевые кэши, сервер должен знать который кэш использовать, обрабатывая запросы для данного MyISAM таблица. По умолчанию, все MyISAM таблица индексирует, кэшируются в ключевом кэше значения по умолчанию. Присваивать таблицу индексирует к определенному ключевому кэшу, используйте CACHE INDEX оператор (см. Раздел 13.7.6.2,"CACHE INDEX Синтаксис"). Например, следующий оператор присваивается, индексирует от таблиц t1, t2, и t3 к ключевому названному кэшу hot_cache:

mysql> CACHE INDEX t1, t2, t3 IN
        hot_cache;+---------+--------------------+----------+----------+| Table   | Op                 | Msg_type | Msg_text |+---------+--------------------+----------+----------+| test.t1 | assign_to_keycache | status   | OK       || test.t2 | assign_to_keycache | status   | OK       || test.t3 | assign_to_keycache | status   | OK       |+---------+--------------------+----------+----------+

Ключевой кэш упоминается в a CACHE INDEX оператор может быть создан, устанавливая его размер с a SET GLOBAL оператор установки параметра или при использовании сервера запускает опции. Например:

mysql> SET GLOBAL
        keycache1.key_buffer_size=128*1024;

Чтобы уничтожить ключевой кэш, обнулите его размер:

mysql> SET GLOBAL keycache1.key_buffer_size=0;

Отметьте, что невозможно уничтожить ключевой кэш значения по умолчанию. Любая попытка сделать это будет проигнорировано:

mysql> SET GLOBAL key_buffer_size =
        0;mysql> SHOW VARIABLES LIKE
        'key_buffer_size';+-----------------+---------+| Variable_name   | Value   |+-----------------+---------+| key_buffer_size | 8384512 |+-----------------+---------+

Ключевые переменные кэша являются структурированными системными переменными, у которых есть имя и компоненты. Для keycache1.key_buffer_size, keycache1 имя переменной кэша и key_buffer_size компонент кэша. См. Раздел 5.1.5.1, "Структурированные Системные Переменные", для описания синтаксиса, используемого для того, чтобы обратиться к структурированным ключевым системным переменным кэша.

По умолчанию таблица индексирует, присваиваются основному (значение по умолчанию) ключевой кэш, создаваемый при запуске сервера. Когда ключевой кэш уничтожается, все индексирует присвоенный ему, повторно присваиваются ключевому кэшу значения по умолчанию.

Для занятого сервера можно использовать стратегию, которая включает три ключевых кэша:

Одна причина использование трех ключевых кэшей выгодно, состоит в том, что доступ к одной ключевой структуре кэша не блокирует доступ к другим. Операторы, что таблицы доступа, присвоенные одному кэшу, не конкурируют с операторами что таблицы доступа, присвоенные другому кэшу. Увеличение производительности происходит по другим причинам также:

CACHE INDEX оператор устанавливает ассоциацию между таблицей и ключевым кэшем, но ассоциация теряется каждый раз перезапуски сервера. Если Вы хотите, чтобы ассоциация вступила в силу каждый раз, когда сервер запускается, один способ выполнить, это должно использовать файл опции: Включайте переменные настройки, которые конфигурируют Ваши ключевые кэши, и init-file опция, которая называет файл, содержащий CACHE INDEX операторы, которые будут выполнены. Например:

key_buffer_size = 4Ghot_cache.key_buffer_size = 2Gcold_cache.key_buffer_size = 2Ginit_file=/path/to/data-directory/mysqld_init.sql

Операторы в mysqld_init.sql выполняются каждый раз, когда сервер запускается. Файл должен содержать один SQL-оператор на строку. Следующий пример присваивает несколько таблиц каждый hot_cache и cold_cache:

CACHE INDEX db1.t1, db1.t2, db2.t3 IN hot_cacheCACHE INDEX db1.t4, db2.t5, db2.t6 IN cold_cache