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

mySQL-partitionering af multi-fil vs. én-fil ydeevne?

Som du allerede har nævnt -innodb_file_per_table vil afgøre, om en tabel vil blive gemt i én fil eller (hvis opdelt) i mange filer.

Her er nogle fordele og ulemper ved hver tilgang (ikke nødvendigt en komplet liste).

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

Generelt ville jeg ikke anbefaler flere filer.
Hvis din arbejdsbyrde imidlertid fører til kraftig fragmentering og optimize table tager for lang tid, vil det give mening at bruge flere filer.

Glem alt om at genvinde plads
Nogle mennesker laver meget ballade over det faktum, at tabelfiler i InnoDB altid vokser og aldrig krymper, hvilket fører til spildplads, hvis rækker slettes.
Så kommer de med skemaer til at genvinde den plads, så som for ikke at løbe tør for ledig diskplads. (truncate table x ).
Dette vil fungere meget hurtigere med flere filer, men alt dette er noget vrøvl, fordi databaser næsten altid vokser og (næsten) aldrig krymper, så al den genvinding af plads vil spilde masser af tid (CPU og IO) under med vil din tabel være fuldt låst (ingen læsning og ingen skrivning tilladt).
Kun for at opdage, at din 90% fuld disk (50% efter genindvinding) vil være 99% fuld efter de næste måneders datatilføjelser.

Vær dog opmærksom på..., når du bruger ALTER TABLE
Overvej følgende scenarie:
- Disken er 60 % fuld.
- databasen fylder 50 %, andre filer fylder 10 %.
Hvis du foretager en alter table på et hvilket som helst bord, vil du løbe tør for diskplads, hvis du har alle tabeller i én fil.
Hvis du har det i flere filer, skulle du ikke have problemer (bortset fra koffeinoverdosis fra alt det ventende).




  1. Tally Tabel for at indsætte manglende datoer mellem to datoer? SQL

  2. Python MySQL ReferenceError:svagt refereret objekt eksisterer ikke længere

  3. SQL Server v.Next:STRING_AGG() ydeevne

  4. Hvordan får man det samlede antal fundne rækker uden at overveje grænsen i BOB?