Domanda

Ho una tabella di memoria in MySQL per una live chat (forse questo non è il miglior tipo di tabella per questo?), E l'eliminazione di file ogni notte per mantenere la chat registra causa gestibile in testa nella tabella. Tuttavia, dal momento che non è possibile eseguire OPTIMIZE su una tabella di memoria, come si fa a sbarazzarsi del sovraccarico (Data_free nel show table status)?

È stato utile?

Soluzione

Come si fa a sbarazzarsi del sovraccarico?

È possibile forzare una tabella utilizzando il motore di archiviazione MEMORY / MUCCHIO di recuperare spazio residuo perso dalla righe eliminate alterando, ma non cambia nulla. per es.

ALTER TABLE my_table ENGINE=MEMORY;

Sarà ri-scrivere la tabella. Backup che con una citazione dal documentazione :

Per liberare la memoria utilizzata da filari che sono stati eliminati, utilizzare ALTER TABELLA MOTORE = MEMORY per forzare una tabella ricostruire.

Modifica

forse questo non è il miglior tipo di tabella per questo?

Non suona come l'applicazione ideale di una tabella di memoria a mio parere - in linea di massima, lo considero un motore di eredità. Alcuni alimenti di riflessione

In primo luogo, tabelle di memoria non può / non utilizzare gli indici b-tree (solo indici hash), quindi query che potrebbero utilizzare un indice per ordinare o vanno (cioè <,> operazioni) ricorrere a classificare / filtraggio manualmente /esaustivamente.

In secondo luogo, le tabelle InnoDB risiederà in RAM se l'innodb_buffer_pool è abbastanza grande, e funziona meglio con thread simultanei, in modo che esibisce spesso come buono se non meglio di una tabella di memoria per la maggior parte delle applicazioni.

In terzo luogo, forse più importante, se il tuo MySQL è mai spento, perderete tutti i dati nella tabella. Ci sono implicazioni tavolo troncamento anche se si sta utilizzando la replica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top