MySQL - Как определить, хранится ли моя таблица в оперативной памяти? - PullRequest
3 голосов
/ 16 марта 2010

Я бегу:

MySQL v5.0.67 
InnoDB engine 
innodb_buffer_pool_size = 70MB 

Вопрос: Какую команду можно выполнить, чтобы вся база данных объемом 50 МБ полностью сохранялась в ОЗУ?

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Мне интересно, почему вы хотите хранить всю таблицу в памяти. Я думаю, что вы не. Самое главное для меня, если ваши запросы выполняются хорошо и если вы ограничены доступом к диску. Также возможно, что ОС имеет кешированные дисковые блоки, которые вам нужны, если есть доступная память. В этом случае, даже если MySQL может не иметь его в памяти, ОС будет. Если ваши запросы не работают должным образом, и вы можете это сделать, я настоятельно рекомендую добавить больше памяти, если вы хотите все это в оперативной памяти. Если у вас есть замедления, более вероятно, что вы столкнетесь с конфликтом.

show table status

покажет вам часть информации.

Если вы получаете статистику ввода-вывода / буфера / кэша сервера из

show server status

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

Я сомневаюсь, что вы кэшируете все это в памяти, хотя только с 70 МБ. Из этой суммы вы должны извлечь много буферов кэша, температуры и индекса.

0 голосов
/ 08 января 2019

Если вы запустите SELECT COUNT(*) FROM yourtable USE INDEX (PRIMARY), то InnoDB поместит каждую страницу индекса PRIMARY в буферный пул (при условии, что в нем достаточно места). Если таблица имеет вторичные индексы и если вы хотите загрузить их также в буферный пул, создайте аналогичный запрос, который будет считывать вторичный индекс и выполнять эту работу.

...