Domanda

Ho letto più volte che dopo aver eliminato una riga in una tabella InnoDB in MySQL, il suo spazio non viene riutilizzato, quindi se si inseriscono molti INSERTI in una tabella e poi si ELIMINA periodicamente alcune righe, la tabella utilizzerà più e più spazio sul disco, come se le righe non fossero affatto eliminate.

Recentemente mi è stato detto che lo spazio occupato dalle righe eliminate viene riutilizzato, ma solo dopo che alcune transazioni sono state completate e anche allora - non completamente. Ora sono confuso.

Qualcuno può darmi un senso per favore? Ho bisogno di fare molti INSERTI in una tabella InnoDB e quindi ogni X minuti devo ELIMINARE i record che hanno più di Y minuti. Ho un problema di tabella InnoDB in continua crescita qui, o è paranoia?

È stato utile?

Soluzione

È paranoia :)

I DB non crescono inutilmente in termini di dimensioni, ma per problemi di prestazioni non viene neppure liberato spazio.

Quello che hai sentito molto probabilmente è che se elimini i record quello spazio non viene restituito al sistema operativo . Invece, viene mantenuto come spazio vuoto per il riutilizzo successivo del DB.

Questo perché:

  • DB deve disporre di spazio HD per salvare i suoi dati; se non ha spazio, all'inizio riserva dello spazio vuoto.
  • Quando si inserisce una nuova riga, viene utilizzato un pezzo di quello spazio.
  • Quando si esaurisce lo spazio libero, viene riservato un nuovo blocco e così via.
  • Ora, quando si eliminano alcune righe , al fine di impedire la prenotazione di sempre più blocchi, il suo spazio viene mantenuto libero ma mai restituito al sistema operativo, quindi è possibile riutilizzarlo in seguito senza qualsiasi necessità di riservare nuovi blocchi.

Come puoi vedere, lo spazio viene riutilizzato, ma mai restituito. Questo è il punto chiave della tua domanda.

Altri suggerimenti

in innodb, non esiste un modo pratico per liberare spazio.

Tutti questi metodi diventano poco pratici quando si utilizzano tabelle enormi (nel mio caso sono più di 250 GB) e è necessario continuare a eliminarli per migliorare le prestazioni.

Dovrai pensare seriamente, se hai abbastanza spazio sul tuo hard disk per eseguire una delle funzioni sopra (nel mio caso non penso che 1 TB sia sufficiente per tutte queste azioni)

con la tabella Innotab (e mysql stesso) le opzioni sono abbastanza limitate se hanno dimensioni del database gravi.

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