Ihre innodb_buffer_pool_size sollte auf die Menge an InnoDB-Daten und -Indizes eingestellt werden, die Sie haben. Führen Sie diese Abfrage aus und Sie erhalten die empfohlene Mindesteinstellung für die aktuellen Innodb-Daten von mysql
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),
SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(index_length) KBS FROM information_schema.tables WHERE
engine='InnoDB') A,(SELECT 3 pw) B;
Wenn Ihre InnoDB-Daten den installierten RAM auf dem DB-Server bei weitem überschreiten, empfehle ich 75% des installierten RAM auf der Box. Wenn Sie also einen 16-GB-Server haben, verwenden Sie 12 GB als innodb_buffer_pool_size.
Sie müssen auch innodb_log_file_size auf 25 % von innodb_buffer_pool_size oder 2047 MB setzen, je nachdem, was kleiner ist. Um die Dateien ib_logfile0 und ib_logfile1 zu ändern, müssen Sie:
mysql -uroot -p -e"SET GLOBAL innodb_fast_shutdown = 0;"
service mysql stop
rm ib_logfile0 ib_logfile1
service mysql start
Wenn Sie MySQL 5.5 verwenden, stellen Sie Folgendes ein:
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=20000 (set this to your device's IOPs)
Wenn Sie MyISAM-Daten beibehalten möchten, führen Sie diese Abfrage für die ideale Einstellung für key_buffer_size aus:
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),
SUBSTR(' KMG',IF(pw<0,0,IF(pw>3,0,pw))+1,1)) recommended_key_buffer_size
FROM (SELECT SUM(index_length) KBS FROM information_schema.tables
WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A,
(SELECT 3 pw) B;
UPDATE 2013-02-13 12:55 EDT
Ich habe in letzter Zeit gelernt, innodb_io_capacity sehr hoch, wenn überhaupt. Dies gilt insbesondere für handelsübliche Hardware und VMs:
- http://www.mysqlperformanceblog.com/2012/02/17/the-relationship-between-innodb-log-checkpointing-and-dirty-buffer-pool-pages/
- http://www.mysqlperformanceblog.com/2010/12/20/mysql-5-5-8-and-percona-server-being-adaptive/