1

Я немного работаю и экспериментирую с MySQL, имею базу данных размером в несколько ГБ. И я обнаружил интересную вещь: когда MySQL работает, Windows не кэширует базу данных .ibd файлов, из которой состоит. Например, я запускаю запрос, посмотрите, как Windows активно читает с диска. Я копирую соответствующие файлы в FAR Manager в nul одновременно несколько раз и каждый раз, когда они читаются с диска.

В мониторе ресурсов Windows 7 я вижу, как увеличивается объем кеш-памяти, когда файл читается, и сразу же после этого возвращается обратно. Иногда я видел, как приостановка копирования в одном FAR помогает читать в другой FAR :) Но это не обязательно. Если служба MySQL отключена, кэширование работает нормально - например, если файл .ibd таблицы имеет размер 200 МБ и имеется 1 ГБ свободной ОЗУ или, по крайней мере, кэш-памяти ОЗУ, он кэшируется после одной или двух операций чтения.

Почему это происходит и можно ли это исправить?

Это мой ноутбук для всего и для разработки, поэтому я не хочу выделять много памяти для MySQL (может быть, 200 МБ в порядке, но 500 - это слишком много). Windows 7 x64, Core i5, 8 ГБ ОЗУ, гибридный SSHD (1 ТБ HDD + 8 ГБ флэш-памяти), около 8 ГБ кэш-памяти ReadyBoost, таблицы InnoDB (по умолчанию я не большой специалист по MySQL). ReadyBoost очень помогает, я полагаю. Я вижу, что система много пишет (скажем, 500 КБ / с) в файл ReadyBoost.sfcache и много читает (1-5 МБ / с).

1 ответ1

0

Я нашел решение довольно хорошим для меня: я обновил до последней версии MySQL 5.7 и теперь меняю размер пула на лету:

set global innodb_buffer_pool_size = 512 * 1024 * 1024;

Улучшение производительности очень велико, когда размер пула достаточно велик, например, при массивных вставках.

У меня было много проблем во время обновления (MySQL 5.7 не принимал базы данных 5.5, mysql_upgrade даже не запускался, MySQL Front вылетал и так далее). Но похоже, что в некоторых случаях производительность 5.7 также выше (при одинаковом размере пула).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .