Я запускаю MySQL 5.0.75 на Ubuntu на двухъядерном компьютере с 8 гигабайтами оперативной памяти. Я использую сайт базы данных Drupal 5 и Drupal 6.
Я уверен, что моя конфигурация MySQL не оптимальна, но мне интересно, есть ли какие-нибудь низко висящие плоды, с которыми я могу обратиться. Вот суть нынешней установки.
Новая текущая установка (оригинальная внизу). Это выделенная машина, кстати:
key_buffer = 2G
innodb_buffer_pool_size = 6G
innodb_additional_mem_pool_size = 16M
max_allowed_packet = 16M
sort_buffer_size = 128M
myisam_sort_buffer_size = 128M
read_buffer_size = 128M
join_buffer_size = 128M
read_rnd_buffer_size = 512M
thread_stack = 192K
thread_cache_size = 10
thread_concurrency = 8
innodb_thread_concurrency = 8
table_cache = 2048
query_cache_limit = 2M
query_cache_size = 128M
Старый:
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M
expire_logs_days = 10
max_binlog_size = 100M
skip-federated
default-storage-engine = InnoDB
default-character-set = utf8
default-collation = utf8_general_ci
Похоже, что вы используете InnoDB в качестве основного типа ядра базы данных, но в вашей конфигурации нет параметров настройки конфигурации InnoDB, что означает, что вы используете значения по умолчанию. Эти настройки по умолчанию рассчитаны на машину 8 Мбайт!
Я рекомендую эти настройки за основу и работаю оттуда
innodb_file_per_table
set-variable = innodb_buffer_pool_size=2G
set-variable = innodb_log_files_in_group=4
set-variable = innodb_log_file_size=128M
set-variable = thread_cache_size=10
set-variable = table_cache=512
set-variable = query_cache_size=8M
Вы не сказали, использует ли сайт php тот же компьютер, что и ваш сервер db, поэтому вам нужно быть осторожным, чтобы MySQL не потреблял столько физической оперативной памяти, чтобы это заставляло машину переключаться.
Я также рекомендовал бы вам добавить эти настройки к медленным запросам и запросам с плохим планом запроса.
log_slow_queries
log-queries-not-using-indexes
set-variable = long_query_time=1
Вы используете InnoDB, поэтому ваш innodb_buffer_pool
должен быть настолько большим, насколько вы можете его сделать (key_buffer
эквивалент MyISAM). 6 ГБ должно быть нормальным значением на машине с 8 ГБ.
Если вы выполняете много сложных запросов, sort_buffer
и tmp_table_size
может также стоить увеличения.