Использование памяти MySQL для большой базы данных

У нас есть БД MySQL (OLD_DATA), в которой размер многих секционированных таблиц превысил 100 ГБ. Для повышения производительности сервера мы подумали о создании параллельной БД (NEW_DATA) и начале сбора новых данных в NEW_DATA.

БД - MyISAM, а сервер имеет 96 ГБ ОЗУ.

После этого OLD_DATA не будет доступен.

Поможет ли этот подход повысить производительность сервера с точки зрения использования ОЗУ и ЦП? Будут ли данные из OLD_DATA загружаться в память?


person user1434805    schedule 17.12.2013    source источник
comment
Базы данных обычно не загружают всю базу данных в память сразу. Использование индексов (и других методов кластеризации) обеспечивает хороший выбор алгоритма и доступ к данным: т.е. считывать только то, что нужно, и когда это необходимо.   -  person user2864740    schedule 17.12.2013
comment
В зависимости от того, как вы запрашиваете новые данные и какие настройки индекса у вас есть. Простое перемещение его на новую таблицу не гарантирует лучшей производительности. У вас много памяти, поэтому вы сможете создавать хорошие индексы для быстрых запросов.   -  person Mad Dog Tannen    schedule 17.12.2013
comment
Спасибо за ваши комментарии. Я согласен с тем, что индексация и оптимальные запросы необходимы. Но я хотел перейти на новую БД и каким-то образом изолировать старую БД, чтобы старая БД не занимала память.   -  person user1434805    schedule 17.12.2013
comment
@user1434805 user1434805 Почему это занимает основную память? База данных будет загружать/кэшировать дисковые страницы только тогда, когда сочтет это целесообразным. Как правило, это должно быть намного меньше, чем размер данных на носителе.   -  person user2864740    schedule 17.12.2013
comment
@user1434805 user1434805 В любом случае, создание новой базы данных не ускорит доступ к данным. Но если доступ к [OLD_DATA] не будет, то похоже, что OLD_DATA нужно превратить в исторический архив — и в этом случае создание архивной системы/процесса может оказаться полезным.   -  person user2864740    schedule 17.12.2013


Ответы (1)


Пожалуйста, предоставьте SHOW CREATE TABLE. Если он, как вы намекнули, РАЗДЕЛЕН, то нам нужно учитывать это при анализе.

Как правило, если к «старым» строкам больше нет доступа, они не повредят, и вам не нужно будет делать то, что вы сделали. Уточните, пожалуйста, запросы, которые вы считаете "медленными", предпочтительно предоставив EXPLAIN SELECT.

MyISAM кэширует индексные блоки в «key_buffer»; насколько велики индексы? Что установлено key_buffer_size? Блоки данных кэшируются ОС.

Для системы вполне «нормально» иметь набор данных, во много раз превышающий объем оперативной памяти. Производительность зависит от «рабочего набора» набора данных и от того, насколько активно вы запрашиваете данные. Вы намекнули, что «старые» строки не используются и, следовательно, не являются частью «рабочего набора».

С другой стороны, если у вас есть «сканирование таблицы», вся таблица является частью рабочего набора. Вполне возможно, что мы можем посоветовать, как изменить эти запросы, чтобы они были более приятными.

person Rick James    schedule 18.02.2015