Spec-Zone .ru
спецификации, руководства, описания, API
|
Совместный доступ к ключевому кэшу улучшает производительность, но не устраняет конкуренцию среди сеансов полностью. Они все еще конкурируют за управляющие структуры, которые управляют доступом к ключевым кэш-буферам. Чтобы уменьшить ключевую конкуренцию доступа кэша далее, 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, "Структурированные Системные Переменные", для описания синтаксиса, используемого для
того, чтобы обратиться к структурированным ключевым системным переменным кэша.
По умолчанию таблица индексирует, присваиваются основному (значение по умолчанию) ключевой кэш, создаваемый при запуске сервера. Когда ключевой кэш уничтожается, все индексирует присвоенный ему, повторно присваиваются ключевому кэшу значения по умолчанию.
Для занятого сервера можно использовать стратегию, которая включает три ключевых кэша:
"Горячий" ключевой кэш, который приводит 20 % в рабочее состояние места, выделенного для всех ключевых кэшей. Используйте это для таблиц, которые в большой степени используются для поисков, но которые не обновляются.
"Холодный" ключевой кэш, который приводит 20 % в рабочее состояние места, выделенного для всех ключевых кэшей. Используйте этот кэш для интенсивно измененных таблиц среднего размера, таких как временные таблицы.
"Теплый" ключевой кэш, который приводит 60 % в рабочее состояние ключевого пространства кэша. Используйте это как ключевой кэш значения по умолчанию, чтобы использоваться по умолчанию для всех других таблиц.
Одна причина использование трех ключевых кэшей выгодно, состоит в том, что доступ к одной ключевой структуре кэша не блокирует доступ к другим. Операторы, что таблицы доступа, присвоенные одному кэшу, не конкурируют с операторами что таблицы доступа, присвоенные другому кэшу. Увеличение производительности происходит по другим причинам также:
Горячий кэш используется только для запросов извлечения, таким образом, его содержание никогда не изменяется. Следовательно, всякий раз, когда индексировать блок должен быть втянут от диска, содержание блока данных кэша, выбранного для замены, не должно быть сброшено сначала.
Для индексирования присвоенного горячему кэшу, если нет никаких запросов, требующих индексировать сканирования, есть высокая вероятность, которой индексировать блоки, соответствующие узлам, не являющимся листом индексировать B-дерева, остаются в кэше.
Работа обновления, наиболее часто выполняемая для временных таблиц, выполняется намного быстрее, когда обновленный узел находится в кэше и не должен быть считан в из диска сначала. Если размер индексирования временных таблиц сопоставим с размером холодного ключевого кэша, вероятность очень высока, что обновленный узел находится в кэше.
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