Загрузить базу данных MySQL innodb в память - PullRequest
9 голосов
/ 21 марта 2010

У меня есть база данных MySQL innodb на 1.9GB, показанная с помощью следующей команды.

SELECT table_schema "Data Base Name"
     , sum( data_length + index_length ) / 1 048 576 
       as "Data Base Size in MB"
     , sum( data_free )/ 1 048 576  
       as "Free Space in MB"
FROM information_schema.TABLES
GROUP BY table_schema ; 

+--------------------+----------------------+------------------+
| Data Base Name     | Data Base Size in MB | Free Space in MB |
+--------------------+----------------------+------------------+
| database_name      |        1959.73437500 |   31080.00000000 | 

Мои вопросы:

  1. Означает ли это, если я установлю innodb_buffer_pool_size на 2 ГБ или больше, вся база данных может быть загружена в память, так что требуется гораздо меньше операций чтения с диска?

  2. Что означает свободное пространство в 31 ГБ?

  3. Если максимальный объем ОЗУ, который может быть выделен для innodb_buffer_pool_size, составляет 1 ГБ, можно ли указать, какие таблицы загружать в память, в то время как другие всегда будут считываться с диска?

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 21 марта 2010
  1. Не совсем так. Буферный пул InnoDB используется для буферизации чтения и записи. если большая часть вашего доступа прочитана, большая часть будет кэширована, и потребуется меньше доступа к дискам.
  2. это может быть ошибка , она не очень хорошо документирована, но я думаю, что data_free - это доступное пространство внутри файлов innodb (если вы напишите больше, чем InnoDB, то придется увеличить файл (ы) данных) .
  3. нет, но InnoDB будет кешировать данные, к которым вы обращаетесь наиболее автоматически, поэтому в любом случае это должно иметь оптимальный эффект.

рассмотрите возможность использования memcached в качестве уровня кэша, чтобы полностью исключить доступ к базе данных, если вам нужна более высокая производительность.

2 голосов
/ 22 марта 2010
  1. Лучше беспокоиться о том, чтобы иметь достаточно памяти для кэширования индексов в оперативной памяти и оставить данные на диске. Производительность базы данных сильно страдает, если индексы приходится считывать с диска каждый раз - гораздо больше, чем затраты на последующее извлечение нужных данных с диска.
  2. Файлы данных InnoDB создаются с фиксированным размером, с возможностью автоматического их расширения (создания дополнительных файлов), если они заполнены. Вы можете увидеть размер каждого файла с show variables like 'innodb_data_file_path'. Сообщается о свободном пространстве, сколько файлов текущих данных не используется. В вашем случае у вас есть 2 гигабайта данных, которые хранятся (скорее всего) в 32 гигабайтах файлов данных InnodB, а 30 гигабайт доступны.
  3. Есть ли причина, по которой вы хотите обойти собственную логику кэширования InnoDB для закрепления определенных таблиц в оперативной памяти? Кэш, естественно, будет стремиться хранить наиболее часто используемые данные в оперативной памяти, и производительность, несомненно, пострадает, если вы заставите его хранить менее используемые данные вместо самых популярных.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...