sql >> Databáze >  >> RDS >> Mysql

Vylepšení výkonu InnoDB

Vaše innodb_buffer_pool_size by měl být nastaven na množství dat a indexů InnoDB, které máte. Spusťte tento dotaz a sdělí vám minimální doporučené nastavení pro aktuální data Innodb v 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;

Pokud vaše data InnoDB daleko překračují nainstalovanou RAM na DB serveru, doporučuji 75 % nainstalované RAM na boxu. Takže pokud máte 16GB server, použijte 12G jako innodb_buffer_pool_size.

Musíte také nastavit innodb_log_file_size na 25 % innodb_buffer_pool_size nebo 2047M, podle toho, která hodnota je menší. Chcete-li změnit soubor ib_logfile0 a ib_logfile1, musíte:

mysql -uroot -p -e"SET GLOBAL innodb_fast_shutdown = 0;"
service mysql stop
rm ib_logfile0 ib_logfile1
service mysql start

Pokud používáte MySQL 5.5, nastavte následující:

innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=20000 (set this to your device's IOPs)

Pokud budete uchovávat data MyISAM, spusťte tento dotaz pro ideální nastavení pro 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;

AKTUALIZACE 2013-02-13 12:55 EDT

V poslední době jsem se naučil nenastavovat innodb_io_capacity velmi vysoké, pokud vůbec. To platí zejména pro komoditní hardware a virtuální počítače:




  1. Zobrazení zprávy, když nebyly nalezeny žádné výsledky vyhledávání PHP MySQL

  2. Vytvoření spouštěče v Oracle Express

  3. Je lepší použít prázdnou hodnotu jako '' nebo jako NULL?

  4. Funkce WIDTH_BUCKET() v Oracle