Назад | Перейти на главную страницу

Размер сервера базы данных

Я получил рекомендацию от своего хостинг-провайдера, в которой говорится, что общее правило управления производственным сервером - гарантировать, что объем памяти на вашем сервере базы данных превышает размер всей вашей базы данных.

Наша база данных составляет 1800 МБ (и продолжает расти), и нам говорят купить сервер на 2 ГБ. Мне это не понравилось, но я не эксперт в управлении производственными серверами. Мы используем базу данных MySQL в основном с таблицами InnoDB и некоторыми MyISAM.

Спасибо!

Поскольку вы используете MySQL, вам нужно измерить память двух механизмов хранения

  • InnoDB
  • MyISAM

Каждый механизм хранения имеет разные характеристики кэширования. Я писал об этом в DBA StackExchange еще 14 апреля 2011 г..

InnoDB

InnoDB будет кэшировать данные и индексировать страницы в свой буферный пул.

Этот запрос подскажет вам идеальный размер для innodb_buffer_pool_size в ГБ

SELECT SUM(data_length+index_length)/POWER(1024,3) RecommendedBufferPoolSize
FROM information_schema.tables WHERE engine='InnoDB';

Я бы также убедитесь, что InnoDB использует innodb_file_per_table.

MyISAM

MyISAM будет кэшировать страницы индекса в свой Key Cache

Этот запрос подскажет вам идеальный размер для key_buffer_size

SELECT SUM(index_length)/POWER(1024,3) RecommendedKeyBufferSize
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','performance_schema','mysql');

Сложите эти два числа вместе и умножьте на 1,1 (чтобы учесть подключения к БД, буферы для сортировки, чтения, объединения). Это должен быть необходимый объем оперативной памяти. Во многих случаях может быть просто слишком много данных для размещения в памяти.

Как показывает практика, если у вас есть все данные InnoDB, то innodb_buffer_pool_size не должно превышать 80% установленной оперативной памяти (я предпочитаю 75%).

Здесь я рекомендую вам просто руководствоваться здравым смыслом. Тот факт, что у вас есть 10 ГБ данных и индексов InnoDB, не означает, что все они будут находиться в ОЗУ, за исключением, конечно, того, что вы запускаете каждый SELECT для всех таблиц, используя каждую таблицу InnoDB и каждый индекс InnoDB.

В вашем случае, если вы не знаете, какой механизм хранения вы будете использовать изначально, или если объем данных намного превышает установленную оперативную память, я бы просто использовал 65% ОЗУ для InnoDB и 10% ОЗУ для MyISAM.