Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Partitionierung Multi-File- vs. One-File-Performance?

Wie Sie bereits gesagt haben -innodb_file_per_table entscheidet, ob eine Tabelle in einer Datei oder (falls partitioniert) in vielen Dateien gespeichert wird.

Hier sind einige Vor- und Nachteile der einzelnen Ansätze (nicht unbedingt eine vollständige 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

Im Allgemeinen würde ich nicht mehrere Dateien empfehlen.
Falls Ihre Arbeitsbelastung jedoch zu starker Fragmentierung führt und optimize table zu lange dauert, ist die Verwendung mehrerer Dateien sinnvoll.

Vergessen Sie die Rückforderung von Speicherplatz
Einige Leute machen viel Aufhebens um die Tatsache, dass Tabellendateien in InnoDB immer wachsen und nie schrumpfen, was zu Platzverschwendung führt, wenn Zeilen gelöscht werden.
Dann entwickeln sie Schemata, um diesen Platz zurückzugewinnen damit der freie Speicherplatz nicht knapp wird. (truncate table x ).
Dies wird mit mehreren Dateien viel schneller funktionieren, aber all dies ist Unsinn, da Datenbanken fast immer wachsen und (fast) nie schrumpfen, so dass all das Zurückfordern von Speicherplatz viel Zeit verschwenden wird (CPU und IO) Während mit wird Ihre Tabelle vollständig gesperrt (keine Lese- und keine Schreibvorgänge erlaubt).
Nur um festzustellen, dass Ihre zu 90 % volle Festplatte (50 % nach der Rückforderung) nach dem Hinzufügen von Daten in den nächsten Monaten zu 99 % voll sein wird.

Aber wenn Sie ALTER TABLE verwenden, passen Sie auf...
Stellen Sie sich folgendes Szenario vor:
- Festplatte ist zu 60 % voll.
- Datenbank nimmt 50 % ein, andere Dateien nehmen 10 % ein.
Wenn Sie alter table auf jeder Tabelle wird Ihnen der Speicherplatz ausgehen, wenn Sie alle Tabellen in einer Datei haben.
Wenn Sie es in mehreren Dateien haben, sollten Sie keine Probleme haben (außer einer Koffein-Überdosis von all dem Warten).