Как оптимизировать использование памяти MySQL?

9

МОЯ НАСТРОЙКА ( пример )

Я использую Linux на экземпляре Amazon High CPU Extra Large EC2 со следующими характеристиками:

  • 7 ГБ памяти
  • 20 вычислительных блоков EC2 (8 виртуальных ядер по 2,5 вычислительных блока EC2 каждое)
  • 1690 ГБ локального хранилища экземпляров
  • 64-битная платформа

У меня есть две большие базы данных MySQL, работающие на движке хранения MyISAM. Один 2 ГБ, а другой 500 МБ. Я хотел бы убедиться, что MySQL использует столько оперативной памяти, сколько может / нужно для максимизации скорости запросов. Я знаю , что есть куча MySQL опций конфигурации памяти , как key_buffer_sizeи , MyISAM_sort_buffer_size,но я не знаком с оптимизацией их.

ВОПРОСОВ

  1. Как проверить, какая память MySQL в настоящее время используется в системе Linux?
  2. Как максимизировать / оптимизировать использование памяти MySQL?
  3. Предполагая, что мои запросы и схема оптимизированы, какие еще изменения я должен рассмотреть?
Т. Брайан Джонс
источник
Вы можете проверить с помощью программы htop.
новый мир
Максимальное использование памяти не приведет всю базу данных в память. Вы должны иметь файловую систему на основе ОЗУ ...
4
ОЗУ файловой системы небезопасно. В случае сбоя сервера все данные будут потеряны
neworld

Ответы:

7

Это сложная тема. Здесь нельзя ответить, об этом написаны целые книги . Я рекомендую сделать ваш innodb_buffer_pool_size достаточно большим. Если вы используете таблицы myisam, то проверьте key_buffer_size. Также необходимо учитывать table_cache и max_connections.

Вот что может вам помочь:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- основы оптимизации производительности / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

РЕДАКТИРОВАТЬ:

Как сказал @ drew010, важно рассмотреть тип использования БД. Настройка для тяжелой базы данных чтения сильно отличается от тяжелой записи. Также вы можете рассмотреть другие стратегии. Как Memcached, базы данных nosql и т. Д.

santiago.basulto
источник
2
Согласитесь, это довольно маленькие базы данных, слишком условно говоря. Если вы ожидаете массу доступа для чтения базы данных, то вы можете рассмотреть какую-то систему кэширования, такую ​​как memcached, которую ваше приложение может использовать для хранения значений из базы данных, чтобы уменьшить попадания в базу данных. Если вы делаете в основном вставки, то диск будет очень важным фактором. В некоторой степени вопрос зависит от ваших вариантов использования. Если данные не сильно меняются, то кеш запросов mysql должен сильно помочь с более быстрыми запросами. Также убедитесь, что ваши индексы / первичные ключи в порядке.
drew010
+1 ты прав, брат. Я предположил, что он запрашивает базовую настройку, но важно учитывать использование БД и другие вещи. Опять же, я не могу обсуждать здесь, я думаю.
santiago.basulto
1

Если вам нужно быть уверенным, что MySQL использует всю необходимую память, вам нужно переключиться на InnoDB. Если вы не используете FULLTEXTпоисковые возможности MySQL , серьезных проблем не будет.

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

Даже если вы поместите все свои базы данных в память, у вас могут возникнуть медленные запросы из-за недостаточного количества индексов или по другим причинам.

sanmai
источник