Din innodb_buffer_pool_size skal indstilles til mængden af InnoDB-data og indekser, du har. Kør denne forespørgsel, og den vil fortælle dig den anbefalede minimumsindstilling for mysqls nuværende Innodb-data
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_sizeFROM (SELECT SUM(index_length) KBS FROM information_schema.tables WHEREengine='InnoDB') A,(SELECT 3 pw) B;
Hvis dine InnoDB-data langt overstiger den installerede RAM på DB-serveren, anbefaler jeg 75% af den installerede RAM på boksen. Så hvis du har en 16 GB server, skal du bruge 12G som innodb_buffer_pool_size.
Du skal også indstille innodb_log_file_size til 25% af innodb_buffer_pool_size eller 2047M, alt efter hvad der er mindst. For at ændre filen ib_logfile0 og ib_logfile1, skal du:
mysql -uroot -p -e"SET GLOBAL innodb_fast_shutdown =0;"service mysql stoprm ib_logfile0 ib_logfile1service mysql start
Hvis du bruger MySQL 5.5, skal du indstille følgende:
innodb_read_io_threads=64innodb_write_io_threads=64innodb_io_capacity=20000 (indstil dette til din enheds IOP'er)
Hvis du vil beholde MyISAM-data, kør denne forespørgsel for den ideelle indstilling for 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_sizeFROM (SELECT SUM(index_length) KBS FROM information_schema.tablesWHERE engine='MyISAM' OG table_schema NOT IN ('information_schema','mysql ')) A,(SELECT 3 pw) B;
OPDATERING 2013-02-13 12:55 EDT
Jeg har på det seneste lært ikke at indstille innodb_io_capacity meget høj, hvis overhovedet. Dette gælder især for råvarehardware og VM'er:
- 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/