Назад | Перейти на главную страницу

Что быстрее, key_cache или кеш ОС?

В тб с 1 мил. строк, если я это сделаю (после перезагрузки компьютера - так ничего не кешируется):
1. SELECT price,city,state FROM tb1 WHERE zipId=13458;
результат - 23 строки за 0,270 секунды

после запуска «ЗАГРУЗИТЬ ИНДЕКС В КЭШ tb1» (key_buffer_size = 128M, а общий размер индекса для tb составляет 82M): 2. SELECT price,city,state FROM tb1 WHERE zipId=24781;
результат - 23 строки за 0,252 секунды, Key_reads остается постоянным, Key_read_requests увеличивается на 23

BUT после загрузки zipId в кеш ОС, если я снова запущу запрос:
2. SELECT price,city,state FROM tb1 WHERE zipId=20548;
результат - 22 строки за 0,006 с

Это простой пример, но я провожу десятки тестов и комбинаций. Но результаты всегда одни и те же.
Я использую: MySql с MyISAM, WINDOWS 7 64 и query_cache равным 0;

НЕ ДОЛЖЕН key_cache быть быстрее, чем кеш ОС ??
НЕ ДОЛЖНА быть огромной разницы в скорости после загрузки индекса в кеш ??
(в моем тесте разницы почти нет).

Я прочитал много веб-сайтов, руководств и блогов по этому поводу, но ни один из них не обсуждает разницу в скорости. Мы будем благодарны за любые идеи или ссылки.
Спасибо.

Весьма вероятно, что все запросы используют как кеш ключей myisam, так и кеш ОС.

MyISAM использует свой собственный кеш для индексов, а ОС - для файлов данных. «ЗАГРУЗИТЬ ИНДЕКС В кеш» загружает весь индекс (если возможно), но при выполнении выбора загружаются только необходимые биты, но также загружаются блоки данных по мере необходимости.

«ЗАГРУЗИТЬ ИНДЕКС В кэш» загружает не блоки файла данных, а только блоки индекса. Блоки индекса, вероятно, не заставляют большинство операций ввода-вывода удовлетворять запросу.

Вы можете проверить план объяснения с помощью EXPLAIN, чтобы увидеть, использует ли запрос покрывающий индекс - я полагаю, что это не так. Если запрос не использует покрывающий индекс, то для чтения блоков данных из файла данных требуется некоторый дисковый ввод-вывод, даже если вы выполнили «ЗАГРУЗИТЬ ИНДЕКС», который загружает только индекс.

Надеюсь, в этом есть смысл.

Сказав это, на таком банально маленьком столе это действительно не имеет значения.

Кэш ОС и кэш ключей выполняют разные функции, и иногда они необходимы.

Если у вас такая маленькая база данных, подумайте о том, чтобы запустить ее с ramdisc, если ее содержимое фактически доступно только для чтения (т.е. вам не нужна долговечность)