sql >> Databasteknik >  >> RDS >> Mysql

mySQL-partitionering av multi-fil kontra en-fil prestanda?

Som du redan har sagt -innodb_file_per_table kommer att avgöra om en tabell ska lagras i en fil eller (om den är partitionerad) i många filer.

Här är några för- och nackdelar med varje tillvägagångssätt (inte nödvändigtvis en komplett lista).

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

I allmänhet skulle jag inte rekommenderar flera filer.
Om din arbetsbelastning däremot leder till kraftig fragmentering och optimize table tar för lång tid, det är meningsfullt att använda flera filer.

Glöm att återta utrymme
Vissa människor gör mycket väsen av det faktum att tabellfiler i InnoDB alltid växer och aldrig krymper, vilket leder till slöseri med utrymme om rader raderas.
Då kommer de på scheman för att återta det utrymmet så att för att inte få slut på ledigt diskutrymme. (truncate table x ).
Detta kommer att fungera mycket snabbare med flera filer, men allt detta är nonsens, eftersom databaser nästan alltid växer och (nästan) aldrig krymper, så all den återvinningen av utrymme kommer att slösa bort mycket tid (CPU och IO) under med kommer din tabell att vara helt låst (inga läsningar och inga skrivningar tillåtna).
Bara för att upptäcka att din 90% full disk (50% efter återkrav) kommer att vara 99% full efter nästa månaders datatillägg.

Var dock försiktig när du använder ALTER TABLE...
Tänk på följande scenario:
- Disken är 60 % full.
- databasen tar upp 50 %, andra filer tar upp 10 %.
Om du gör en alter table på vilket bord som helst, kommer du att få slut på diskutrymme om du har alla tabeller i en fil.
Om du har det i flera filer bör du inte ha problem (annat än koffeinöverdos från all väntan).




  1. Dynamic Sampling Killing Me i 12c

  2. SQLite-fråga:få alla kolumner i en rad (android)?

  3. Mysql SKAPA DEFINER

  4. Hur man skapar vy i PostgreSQL