Spec-Zone.ru › MariaDB

Разделенный кэш ключей

О разделенном кэше ключей

Разделенный кэш ключей представляет собой набор структур для обычного кэша ключей MyISAM, называемых сегментами кэша ключей. Разделенный кэш ключей устраняет одну из основных проблем простого кэша ключей: конфликт потоков при блокировке кэша ключей (мьютексе). При использовании обычных кэшей ключей каждая функция интерфейса кэша ключей должна получить эту блокировку. Таким образом, потоки конкурируют за эту блокировку даже в том случае, когда они получили общие блокировки для файла и страницы, которые они хотят прочитать из буферов кэша ключей.

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

Любая страница из файла может быть помещена в буфер только одного сегмента. Номер сегмента рассчитывается по номеру файла и позиции страницы в файле, и он всегда одинаков для страницы. Страницы равномерно распределяются между сегментами.

Идея и исходный код разделенного кэша ключей были предоставлены Фредриком Ньландером из Stardoll.com. Код был значительно переработан, улучшен и в конечном итоге интегрирован в MariaDB Игорем Бабаевым из Monty Program (сейчас MariaDB Corporation).

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

Синтаксис разделенного кэша ключей

Новая глобальная переменная: key_cache_segments. Эта переменная задает количество сегментов в кэше ключей. Допустимые значения для этой переменной — целые числа от 0 до 64. Если число сегментов установлено на значение, большее 64, количество сегментов будет усечено до 64, и будет выведено сообщение об ошибке.

Значение 0 означает, что кэш ключей является обычным (то есть не разделенным) кэшем ключей. Это значение по умолчанию. Если key_cache_segments равно 1 (или выше), используется новый код сегментации кэша ключей. На практике нет практического использования разделенного кэша ключей с одним сегментом, за исключением целей тестирования, и установка key_cache_segments = 1 должна быть медленнее, чем любой другой вариант, и не должна использоваться в рабочей среде.

Другие глобальные переменные, используемые при работе с обычными кэшами ключей, также применяются к разделенным кэшам ключей: key_buffer_size, key_cache_age_threshold, key_cache_block_size и key_cache_division_limit.

Статистика разделенного кэша ключей

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

Имя столбца Описание
KEY_CACHE_NAME Имя кэша ключей
SEGMENTS общее количество сегментов (установлено в NULL для обычных кэшей ключей)
SEGMENT_NUMBER номер сегмента (установлено в NULL для всех обычных кэшей ключей и для строк, содержащих статистику агрегации для разделенных кэшей ключей)
FULL_SIZE память для буферов кэша/вспомогательных структур
BLOCK_SIZE размер блоков
USED_BLOCKS количество используемых блоков
UNUSED_BLOCKS количество неиспользуемых блоков
DIRTY_BLOCKS количество грязных блоков
READ_REQUESTS количество запросов на чтение
READS количество фактических чтений из файлов в буферы
WRITE_REQUESTS количество запросов на запись
WRITES количество фактических записей из буферов в файлы

См. также

  • Производительность разделенного кэша ключей
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержание не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/segmented-key-cache/

Spec-Zone.ru

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