In MySQL cosa significa "Overhead", cosa c'è di male in questo e come risolverlo?


157

domanda semplice, ma mi assilla da un po 'di tempo ...

cos'è "overhead" in MySQL e dovrei preoccuparmi?

facendo clic su "ottimizza tabella" lo risolve davvero?

Risposte:


147

Sembra che l'overhead sia uno spazio su disco temporaneo utilizzato dal database per eseguire alcune query, quindi dovresti preoccuparti solo se questo diventa davvero elevato.

È possibile confrontare "Ottimizzazione della tabella" con la deframmentazione del disco rigido.

Quoto:

Ogni database richiederà, nel tempo, una qualche forma di manutenzione per mantenerlo ad un livello prestazionale ottimale . L'eliminazione delle righe cancellate, il resequenziamento, la compressione, la gestione dei percorsi degli indici, la deframmentazione, ecc. È ciò che è noto come OTTIMIZZAZIONE in mysql e altri termini in altri database. Ad esempio, IBM DB2 / 400 lo chiama RIORGANIZZARE MEMBRO FILE FISICO.

È un po 'come cambiare l'olio in macchina o fare una messa a punto. Potresti pensare di non doverlo fare davvero, ma facendo così la tua auto funziona molto meglio, ottieni un miglior chilometraggio del gas, ecc. Un'auto che ottiene un sacco di chilometraggio richiede regolazioni più spesso. Un database che viene utilizzato pesantemente richiede lo stesso. Se stai facendo molte operazioni di AGGIORNAMENTO e / o ELIMINA, e specialmente se le tue tabelle hanno colonne di lunghezza variabile (VARCHAR, TEXT, ecc.), Devi tenerti aggiornato.


1
@Jasper Le tabelle sono completamente bloccate (impossibile leggere / scrivere) durante la durata dell'ottimizzazione?
Pacerier,

4
Da dove proviene quella citazione? Sto trovando molti risultati su Google.
Ian Hunter,

come facciamo a sapere quale causa l'overhead ancora e ancora?
mahen3d

grazie per l'esempio perfetto e facile, indipendentemente dai termini tecnici impazziti.
shyammakwana.me,

1
Cosa è considerato "davvero alto"?
TV-C-15,

87

Se stai parlando della cosa che phpMyAdminchiama overhead, allora è la dimensione effettiva di un file di dati della tabella rispetto alla dimensione ideale dello stesso file di dati (come se appena ripristinato dal backup).

Per motivi di prestazioni, MySQLnon compatta i file di dati dopo aver eliminato o aggiornato le righe.

Ciò overheadè negativo per la scansione delle tabelle, ovvero quando la query deve essere eseguita su tutti i valori della tabella, dovrà cercare più spazio vuoto.

Puoi sbarazzartene overheadeseguendo OPTIMIZE TABLEche compatterà la tabella e gli indici.


7
Le dimensioni della documentazione di mysql indicano che "TABELLA OTTIMIZZA dovrebbe essere utilizzata se hai eliminato gran parte di una tabella o se hai apportato molte modifiche a una tabella con righe di lunghezza variabile", questo è il mio caso, grazie :)
boclodoa

8

L'overhead è Data_free di una tabella, ovvero il numero di byte allocati ma non utilizzati. Lo possiamo trovare con il comando SQL SHOW TABLE STATUS . È lo spazio libero nelle dimensioni allocate per la tabella.


1

L'ottimizzazione della tabella può essere molto problematica. Ad esempio se la tabella viene utilizzata pesantemente in un sito.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

Dopo aver eliminato gran parte di una tabella MyISAM o ARCHIVE o aver apportato molte modifiche a una tabella MyISAM o ARCHIVE con righe di lunghezza variabile (tabelle con colonne VARCHAR, VARBINARY, BLOB o TEXT). Le righe eliminate vengono mantenute in un elenco collegato e le successive operazioni INSERT riutilizzano le posizioni delle righe precedenti. <

Credo di aver confermato questo comportamento. E sarebbe sicuramente molto utile.

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.