Dal punto di vista di MySQL, ho suggerimenti su come migliorare la memorizzazione nella cache di dati / indici per un'istanza di MySQL.
Tieni presente che esistono due principali motori di archiviazione per MySQL
I loro meccanismi di memorizzazione nella cache sono diversi. C'è qualcosa che puoi fare per sintonizzare il motore di archiviazione di tua scelta.
MyISAM
MyISAM memorizza solo nella cache le pagine dell'indice. Non memorizza mai nella cache i dati. Puoi fare due cose per migliorare l'I / O per le tabelle MyISAM.
Miglioramento MyISAM n. 1
Qualsiasi tabella MyISAM con colonne VARCHAR può essere convertita internamente in CHAR senza toccare il progetto iniziale. Supponiamo di avere una tabella chiamata mydb.mytable e che desideri migliorare l'I / O, esegui quanto segue:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Ciò consentirà di aumentare le dimensioni della tabella dal 60% al 100%, ma produrrà un aumento delle prestazioni del 20-30% nell'I / O senza modificare nient'altro . Ne ho scritto prima in StackExchange DBA:
Miglioramento MyISAM n. 2
È necessario aumentare la cache delle chiavi MyISAM (in base alle dimensioni di key_buffer_size ). Esegui questa query, per favore:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;
Questo ti mostrerà il key_buffer_size ideale basato sul tuo set di dati corrente.
InnoDB
InnoDB memorizza nella cache sia i dati che gli indici. Se hai convertito tutti i tuoi dati in InnoDB e stai attualmente eseguendo WordPress da un database tutto InnoDB, devi dimensionare il tuo pool di buffer InnoDB (dimensionato con innodb_buffer_pool_size ). Esegui questa query, per favore:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
Questo ti mostrerà il key_buffer_size ideale basato sul tuo set di dati corrente.
proiezioni
Se si prevede che il set di dati aumenterà 20 volte di più, è sufficiente moltiplicare ciò che questa query consiglia per 20. Supponiamo che il set di dati MyISAM sia 15 MB e 3 MB sia la somma degli indici. Se stimate che avrete 20 volte più dati, impostate key_buffer_size su 60MB in questo modo in /etc/my.cnf:
[mysqld]
key_buffer_size=60M
quindi riavviare MySQL. La stessa cosa si applicherebbe al pool di buffer InnoDB.
Se tutti i tuoi dati sono InnoDB, devi eseguire una pulizia completa della tua infrastruttura InnoDB che ho pubblicato in StackOverflow .