Загрузите MySQL innodb база данных в память

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

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. Если максимальная RAM может быть выделена innodb_buffer_pool_size, 1 ГБ, действительно ли возможно указать, какие таблицы к загруженному в память, в то время как всегда сохраняют других читавшимися из диска?

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

9
задан lexu 21 March 2010 в 09:39
поделиться

2 ответа

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

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

7
ответ дан 4 December 2019 в 21:49
поделиться
  1. Лучше позаботиться о том, чтобы у вас было достаточно памяти для кэширования индексов в оперативной памяти, и оставить данные на диске. Производительность базы данных сильно страдает, если индексы должны каждый раз считываться с диска - гораздо больше, чем накладные расходы на последующее извлечение требуемых данных с диска.
  2. Файлы данных InnoDB создаются фиксированного размера с возможностью их автоматического расширения (создания дополнительных файлов), если они заполняются. Вы можете увидеть размер файла с помощью таких переменных, как 'innodb_data_file_path' . Сообщаемое свободное пространство показывает, какая часть текущих файлов данных не используется. В вашем случае у вас есть 2 гигабайта данных, хранящихся (скорее всего) в 32 гигабайтах файлов данных InnodB, оставляя 30 гигабайт доступными.
  3. Есть ли причина, по которой вы хотите обойти собственную логику кэширования InnoDB, чтобы закрепить определенные таблицы в оперативной памяти? Кэш, естественно, будет иметь тенденцию хранить наиболее часто используемые данные в оперативной памяти, и производительность, несомненно, пострадает, если вы заставите его хранить менее используемые данные вместо самых популярных.
2
ответ дан 4 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: