sql >> Databáze >  >> RDS >> Mysql

mySQL rozdělení na více souborů vs. výkon jednoho souboru?

Jak jste již uvedli -innodb_file_per_table rozhodne, zda bude jedna tabulka uložena v jednom souboru nebo (pokud je rozdělena) v mnoha souborech.

Zde jsou některé výhody a nevýhody každého přístupu (není nutný úplný seznam).

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

Obecně bych ne doporučujeme více souborů.
Pokud však vaše pracovní zatížení vede k velké fragmentaci a optimize table trvá příliš dlouho, použití více souborů bude mít smysl.

Zapomeňte na opětovné získání prostoru
Někteří lidé dělají spoustu povyku kvůli skutečnosti, že soubory tabulky v InnoDB vždy rostou a nikdy se nezmenšují, což vede k plýtvání místem, pokud jsou smazány řádky.
Pak přijdou se schématy, jak tento prostor získat zpět, aby aby vám nedošel volný prostor na disku. (truncate table x ).
Toto bude fungovat mnohem rychleji s více soubory, ale to všechno je nesmysl, protože databáze téměř vždy rostou a (téměř) nikdy se nezmenšují, takže všechno to znovuzískávání místa zabere spoustu času (CPU a IO) během s bude vaše tabulka plně uzamčena (není povoleno žádné čtení ani zápis).
Pouze proto, abyste zjistili, že váš z 90 % plný disk (50 % po opětovném získání) bude z 99 % plný po přidání dat v příštích měsících.

Při používání ALTER TABLE si však dejte pozor...
Zvažte následující scénář:
- Disk je zaplněn z 60 %.
- databáze zabírá 50 %, ostatní soubory zabírají 10 %.
Pokud provedete alter table na jakékoli tabulce vám dojde místo na disku, pokud máte všechny tabulky v jednom souboru.
Pokud to máte ve více souborech, neměli byste mít problémy (kromě předávkování kofeinem z toho všeho čekání).




  1. Zobrazení všech názvů tabulek v php z databáze MySQL

  2. Najděte sloupec, který obsahuje danou hodnotu v MySQL

  3. jak znovu použít smazané primární klíče v mysql?

  4. Zkopírujte položky z treeview tkinter