Цитата:
2. innodb_buffer_pool_size
Размер Buffer Pool'а — одна из важнейших настроек InnoDB. Это размер буфера памяти, который используется MySQL в процессе работы для кэша данных и индексов таблиц (сразу напомним, что для того, чтобы избежать двойного кэширования — самим MySQL и операционной системой, стоит указать в настройках innodb_flush_method = O_DIRECT).
На самом деле, в идеале значение innodb_buffer_pool_size должно быть таким, чтобы в память помещалась вся ваша база. При этом важно помнить о сбалансированности системы по памяти (об этом мы говорили в прошлой статье) — если «задрать» значение innodb_buffer_pool_size так, что вся система уйдет в swap, ничего хорошего не получится.
http://habrahabr.ru/company/bitrix/blog/148874/Чем больше дадите - тем лучше.
Но и разгонятся не стоит.
Я бы поставил 70-80% от свободной памяти (т.е. за вычетом той памяти которая может уйти на процессы биллинга/activemq и т.п.).
Но учтите что помимо этой памяти еще выжирается память под каждый коннект из max_connections=1000 в my.cnf и т.п.
Поэтому и 70%. Но при этом я бы на вашем месте последил пару тройку дней в часы пик не лезет ли что то в своп.
На новый год был неприятно удивлен, когда у меня из за кривых настроек мускул вылез в своп, и все просто нещадно тормозило.
Так стоит на системе где 32 гига и кроме mysql'а ничего не крутится.
Код:
#InnoDB
innodb_file_per_table
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size = 22G
innodb_additional_mem_pool_size = 20M
innodb_log_file_size = 256M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 60