Se fossi in te, cambierei tutti i dati su InnoDB. Il blocco della tabella / blocco delle righe è stato a lungo discusso da molti. Sceglierei sempre InnoDB a mani basse. Tuttavia, c'è un altro motivo profondo per scegliere InnoDB ... CACHING .
Mentre la maggior parte delle persone si vanta che MyISAM è più veloce per le letture, la maggior parte delle persone dimentica che molte cache per MyISAM, che è chiamata cache delle chiavi (impostata da key_buffer_size), memorizza solo nella cache le pagine dell'indice dai file .MYI. Non memorizza mai nella cache le pagine dei dati. Ha un massimo ufficiale di 4 GB nei sistemi a 32 bit. 8 GB è il massimo massimo per 64 bit.
Il pool di buffer InnoDB memorizza nella cache i dati e le pagine dell'indice. A seconda del server in uso, è possibile memorizzare nella cache l'intero set di dati nella RAM. È possibile ottimizzare InnoDB per un massimo dell'80% di RAM e del 10% per DB Conenctions e lasciare il 10% per il sistema operativo. Questo vale anche per diversi sistemi operativi .
Ho raccomandato queste cose ai clienti Drupal con un successo meraviglioso. Si applica anche a Wordpress . Ho fornito supporto DB per i clienti con WordPress. Stessi miglioramenti.
Puoi sempre configurare la memoria per InnoDB in modo più efficace rispetto a MyISAM. C'è sempre un modo per modificare InnoDB in base alle proprie esigenze di prestazione . Man mano che i tuoi dati crescono, alla fine diventeranno un requisito .
AGGIORNAMENTO 2011-11-21 11:44 EST
Se il set di dati completo è abbastanza piccolo, puoi eseguire una query SELECT su ogni tabella che hai subito dopo l'avvio di mysql.
Per tutte le tabelle che sono InnoDB e / o MyISAM, eseguire questa query:
SELECT DISTINCT
CONCAT('SELECT ',ndxcollist,' FROM ',
db,'.',tb,' ORDER BY ',ndxcollist,';') SelectQueryToLoadCache
FROM (
SELECT
engine,table_schema db,table_name tb,index_name,
GROUP_CONCAT(column_name ORDER BY seq_in_index) ndxcollist
FROM (
SELECT
B.engine,A.table_schema,A.table_name,
A.index_name,A.column_name,A.seq_in_index
FROM
information_schema.statistics A INNER JOIN
(SELECT engine,table_schema,table_name
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')) B
USING (table_schema,table_name)
WHERE
B.table_schema NOT IN ('information_schema','mysql')
AND A.index_type <> 'FULLTEXT'
ORDER BY
table_schema,table_name,index_name,seq_in_index
) A
GROUP BY
table_schema,table_name,index_name
) AA
ORDER BY
engine DESC,db,tb
;
Ciò genererà tutte le possibili query SELECT che è necessario eseguire che richiamerà tutti gli indici a cui fare riferimento. Inserire questa query in un file chiamato /root/MakeSelectQueriesToLoad.sql. Esegui lo script e raccogli l'output /root/SelectQueriesToLoad.sql. Infine, eseguilo:
mysql -u... -p... -AN < /root/MakeSelectQueriesToLoad.sql > /root/SelectQueriesToLoad.sql
mysql -u... -p... < /root/SelectQueriesToLoad.sql
Ciò precaricherà sicuramente tutte le pagine di indice nel pool di buffer InnoDB e nella cache delle chiavi MyISAM. Se tutti i tuoi dati sono InnoDB, apporta due modifiche:
- sostituire
WHERE engine IN ('InnoDB','MyISAM')
conWHERE engine='InnoDB'
- sostituire
CONCAT('SELECT ',ndxcollist,' FROM ',
conCONCAT('SELECT * FROM ',
Questo popolerà anche più pagine di dati nel pool di buffer InnoDB.
NOTA FINALE: assicurarsi che il pool di buffer InnoDB sia sufficientemente grande da contenere tutti i dati InnoDB