Uw innodb_buffer_pool_size moet worden ingesteld op de hoeveelheid InnoDB-gegevens en indexen die u heeft. Voer deze query uit en het zal u de minimaal aanbevolen instelling voor de huidige Innodb-gegevens van mysql vertellen
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;
Als uw InnoDB-gegevens veel groter zijn dan het geïnstalleerde RAM-geheugen op de DB-server, raad ik 75% van het geïnstalleerde RAM-geheugen op de doos aan. Dus, als je een server van 16 GB hebt, gebruik dan 12G als innodb_buffer_pool_size.
Je moet ook innodb_log_file_size instellen op 25% van innodb_buffer_pool_size of 2047M, welke kleiner is. Om het bestand ib_logfile0 en ib_logfile1 te wijzigen, moet u:
mysql -uroot -p -e"SET GLOBAL innodb_fast_shutdown = 0;"
service mysql stop
rm ib_logfile0 ib_logfile1
service mysql start
Als u MySQL 5.5 gebruikt, stelt u het volgende in:
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=20000 (set this to your device's IOPs)
Als u MyISAM-gegevens wilt behouden, voert u deze query uit voor de ideale instelling voor key_buffer_size:
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 13-02-2013 12:55 EDT
Ik heb de laatste tijd geleerd om innodb_io_capacity zeer hoog, of helemaal niet. Dit geldt met name voor standaardhardware en VM's:
- 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/