Quanto è grande è troppo grande per il file ibdata?


9

Il mio file ibdata è molto grande, almeno mi sembra molto grande. È eccessivo o negativo?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1

4
Il tuo file ibdata è molto piccolo.
Jeff Ferland,

Dividere quel file in blocchi più piccoli (diciamo 4G) sarebbe meglio o peggio per le prestazioni?
nachito,

Risposte:


13

Quando questo può essere un problema

Se corri show table statussu una tabella e il Data_freecampo costituisce la stragrande maggioranza delle ibdata1dimensioni del tuo file, allora potresti avere molto spazio sprecato. Una grande quantità di insert / delete renderà questo un problema. In tal caso, gli inserimenti e le eliminazioni transitorie costituiscono la maggior parte dei dati, quindi hai un buon caso di file per tabella.

Questo non è un "sì" automatico, comunque. Nel mondo si parla molto della frammentazione interna dei file InnoDB, ma inserendoli in un file system poiché il file per tabella sposta la frammentazione a livello di file system anziché a livello di database.

Perché questo di solito non è un problema

Pensa al tuo file InnoDB come a un filesystem piuttosto che a un file. Se hai molti file, avrai bisogno di un grande filesystem.

Per la maggior parte, i filesystem fanno davvero bene a scalare per gestire terabyte di dati e un numero imprecisato di file. A volte incontrano problemi con una scarsa indicizzazione (ad esempio, limiti al numero di file in una directory prima di un impatto sulle prestazioni), ma per la maggior parte il moderno filesystem può oscillare bene nell'intervallo di terabyte.

InnoDB funziona allo stesso modo. La dimensione del tuo file di dati può essere enorme ... e come i filesystem di grandi dimensioni, che possono presentare problemi con il backup dei dati. Tuttavia, proprio come suddividere il filesystem in più partizioni non aiuta a risolvere questo problema, né tentare di manipolare innodb. Mentre puoi usare innodb_file_per_table , lo consiglio raramente.

Proprio come il tuo filesystem, la risposta migliore è conoscere i limiti internamente e lavorare al suo interno. Comprendere gli indici e applicarli in modo appropriato. Non cercare di dividere InnoDB, non è pensato per questo.

Dato che sto lottando per trasmettere in modo costruttivo il concetto, ecco una rapida lettura delle parole così meglio di me: Terabyte non è un grosso dato, petabyte lo è .

Ricordo una diapositiva di marketing MySQL davvero vecchia in cui il cliente gestiva un data warehouse con alcuni terabyte. Molti anni fa. InnoDB o MyISAM, funzionerebbero entrambi. Questo è uno standard MySQL standard.

Non sudare un database da 15 GB.


Sembra che io sia poco meno del 50% utilizzato. InnoDB free: 7364608 kB
nachito,

@nachito Sembra che dovrebbe andare bene. Se ritieni di aver bisogno di spazio per il filesystem, recuperalo. Se sei solo preoccupato per le prestazioni, non farlo. Inoltre, per quanto riguarda le prestazioni, è meglio mantenere i file del database sulla propria partizione, quindi se ci si concentra sulle prestazioni non si vedrà comunque un recupero utilizzabile.
Jeff Ferland,

6

I file ibdata non si restringono - se hai recentemente eliminato alcune tabelle o rimosso molte righe - innodb nella tua configurazione non rilascerà lo spazio libero sul filesystem. ti suggerirei:

  • eseguire il backup di tutti i dati, ad es. con mysqldump
  • aggiungi alla direttiva my.cnf innodb_file_per_table
  • riavvia mysql
  • rilascia tutti i database usando il motore innodb
  • basta mysql
  • rimuovere il file ibdata
  • rm ib_logfile [01]
  • avvia mysql, controlla syslog se tutto va bene
  • ricarica la tua discarica

in questo modo sarai in grado di recuperare lo spazio ogni volta che rilasci una tabella / database innodb - i file idb associati verranno rimossi immediatamente.


Capisco che non si ridurrà mai senza scaricare e ricaricare i tavoli. Tuttavia, se ho lasciato cadere i database InnoDB, utilizzerà quello spazio "libero" prima che ricominci a crescere?
nachito,

1
@nachito Sì, lo farà.
Jeff Ferland,


La tua risposta è solo un semplice suggerimento senza offuscare il problema come sembra aver fatto la mia risposta. +1 !!!
RolandoMySQLDBA,

1
Bene, la risposta è una soluzione per ridurre lo spazio utilizzato dai file di dati, ma non è una discussione sul merito ad esso correlato, e questa è la domanda mentre la leggo. Un file ibdata da 15 GB è un grosso problema?
Jeff Ferland,
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.