Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL partizionamento multi-file rispetto a prestazioni di un file?

Come hai già affermato -innodb_file_per_table deciderà se una tabella verrà archiviata in un file o (se partizionata) in più file.

Ecco alcuni pro e contro di ogni approccio (non è necessario un elenco completo).

Single file per table                    Multiple files per (partitioned) table
--------------------------------------   --------------------------------------
+ System uses less filehandles           - System uses more filehandles
+ One one fsync per second per table     - Possibly many more fsync calls (bottleneck)
  (less fs overhead (journal etc))         (more fs overhead)
+ Single file uses less space overall    - Much larger disk space usage
- Single file fragments badly            + Less fragmentation 
- Optimize table (et al) takes longer    + You can choose to optimize just one file
- One file = one filesystem              + You can put heavy traffic files on a fast fs
                                           (e.g. on a solid state disk)
- Impossible to reclaim disk space       + possible to emergency-reclaim disk space 
  in a hurry (truncate table takes long)   fast (just delete a file)
- ALTER TABLE can use large % of disk-   + rebuilding with ALTER TABLE will use less
  space for temp tables while rebuilding   temp disk space

In generale non consiglia più file.
Se tuttavia il tuo carico di lavoro porta a una forte frammentazione e optimize table impiega troppo tempo, l'utilizzo di più file avrà senso.

Dimentica il recupero dello spazio
Alcune persone fanno un sacco di storie sul fatto che in InnoDB i file delle tabelle crescono sempre e non si riducono mai, portando a uno spreco di spazio se le righe vengono eliminate.
Poi escogitano schemi per recuperare quello spazio in modo da per non esaurire lo spazio libero su disco. (truncate table x ).
Funzionerà molto più velocemente con più file, tuttavia tutto questo non ha senso, perché i database crescono quasi sempre e (quasi) non si riducono mai, quindi tutto quel recupero di spazio farà perdere molto tempo (CPU e IO) durante con la tua tabella sarà completamente bloccata (nessuna lettura o scrittura consentita).
Solo per scoprire che il tuo disco pieno al 90% (50% dopo il recupero) sarà pieno al 99% dopo l'aggiunta di dati nei prossimi mesi.

Tuttavia, quando usi ALTER TABLE fai attenzione...
Considera il seguente scenario:
- Il disco è pieno al 60%.
- il database occupa il 50%, gli altri file occupano il 10%.
Se esegui una modifica di alter table su qualsiasi tavolo, esaurirai lo spazio su disco se hai tutte le tabelle in un file.
Se lo hai in più file, non dovresti avere problemi (a parte l'overdose di caffeina da tutta quella attesa).