Vantaggi dell'esecuzione della query OPTIMIZE TABLE in MySQL DB Server


9

Vorrei sapere quali sono i vantaggi [davvero pratici] che possono essere raccolti eseguendo la OPTIMIZE TABLE tbl_namequery in MySQL Server.

L'ho verificato una volta e ho scoperto che dopo l'esecuzione, il successivo hit DB potrebbe richiedere molto tempo a causa del trasferimento di frammenti o giù di lì, ma i successi successivi mostrano un tipo di prestazioni, non sono sicuro che la query nella cache esegua questo trucco con l'ottimizzazione o l'ottimizzazione da solo fa questo trucco.

Qualcuno può guidarmi con alcuni valori di differenza di prestazioni reali, se possibile, in modo che io possa approfondire il fatto che lavorare con MySQL sta guadagnando gravità nel nostro progetto.

Risposte:


7

Tenere presente che OPTIMIZE TABLE non esegue la deframmentazione. Internamente, OPTIMIZE TABLE esegue diverse operazioni (copia dei dati in un file temporaneo, ricreare gli indici, ricalcolare le statistiche degli indici). In effetti, l'esempio che ho può essere eseguito manualmente come mostrato.

Esempio: se ottimizzi mydb.mytable, inserisci questo comando:

OPTIMIZE TABLE mydb.mytable;

Nota che mysql esegue qualcosa sotto il cofano:

CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;

Ciò è abbastanza utile per le tabelle che presentano un volume elevato di AGGIORNAMENTI ed ELIMINA

L'esecuzione di questo può realizzare due cose

  1. Impedisci a mysql di esaminare i frammenti di una tabella nel tentativo di caricare i dati nei frammenti delle dimensioni giuste. L'eliminazione di questi frammenti ridurrà questa operazione.

  2. Avere ricalcolato le statistiche dell'indice aiuta MySQL Query Optimizer a costruire piani EXPLAIN migliori. Altrimenti, le query potrebbero deteriorarsi nei tempi di esecuzione perché MySQL Query Optimizer ha deciso di fare ipotesi errate sul piano EXPLAIN. Questo sarebbe un sintomo definito di una tabella che ha avuto un elevato volume di AGGIORNAMENTI e DELETE.

AVVERTIMENTO

Per quanto riguarda la memorizzazione nella cache, la memorizzazione nella cache consente di immergersi rapidamente a causa di una scansione completa del tavolo. Per le pagine dell'indice MyISAM fluiscono dentro e fuori dalla cache delle chiavi MyISAM. Per InnoDB, le pagine di dati e di indice scorrono dentro e fuori dal pool di buffer InnoDB.


Grazie per la tua risposta. Dal tuo punto di vista, capisco che uso meglio un servizio come un cron job per pianificare la tabella di ottimizzazione per una delle mie tabelle frequentemente aggiornate in modo da poter ottenere prestazioni migliori. Inoltre, sto usando InnoDB per questa tabella. È una scelta migliore. Inoltre, trovo che i join HASH in SQL Server siano stati suggeriti per migliorare le prestazioni delle query, puoi spiegarmelo e come ottenerne uno simile in MySQL. Inoltre, mi dia un ottimizzatore di query SQL per MySQL [versione Windows7].
Saravanan,

@savaranan: MySQL Query Optimizer a cui mi riferivo era quello interno incorporato in MySQL. A proposito, poiché la tabella che si desidera ottimizzare è InnoDB, è possibile saltare i passaggi DISABLE KEYS e ENABLE KEYS. Inoltre, ANALYZE TABLE può essere ignorato perché è totalmente inutile sulle tabelle InnoDB poiché InnoDB ricalcola le cardinalità della tabella con approssimazioni ravvicinate utilizzando le pagine degli indici BTREE, note come immersioni degli indici.
RolandoMySQLDBA,

@savaranan: per quanto riguarda gli indici HASH, InnoDB ha indici hash adattativi ( dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html ). Ci sono anche buoni suggerimenti sull'emulazione degli indici di hash e sulla gestione delle collisioni in base alle pagine 103-106 di "MySQL ad alte prestazioni" ( amazon.com/dp/0596101716 )
RolandoMySQLDBA
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.