Mysql
 sql >> база данни >  >> RDS >> Mysql

mySQL разделяне на няколко файла срещу производителност на един файл?

Както вече казахте -innodb_file_per_table ще реши дали една таблица ще бъде съхранена в един файл или (ако е разделена) в много файлове.

Ето някои плюсове и минуси на всеки подход (не е необходим пълен списък).

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

По принцип не биси препоръчайте няколко файла.
Ако обаче работното ви натоварване доведе до силно фрагментиране и optimize table отнема твърде много време, използването на няколко файла ще има смисъл.

Забравете за възстановяването на място
Някои хора вдигат много шум за факта, че в InnoDB файловете на таблици винаги растат и никога не се свиват, което води до загуба на пространство, ако редовете бъдат изтрити.
След това измислят схеми за възстановяване на това пространство, така че за да не остава без свободно дисково пространство. (truncate table x ).
Това ще работи много по-бързо с множество файлове, но всичко това е глупост, тъй като базите данни почти винаги растат и (почти) никога не се свиват, така че цялото това възстановяване на пространство ще загуби много време (CPU и IO) по време с таблицата ви ще бъде напълно заключена (без четене и без запис).
Само за да установите, че вашият 90% пълен диск (50% след възстановяване) ще бъде пълен на 99% след добавяне на данни през следващите месеци.

Въпреки това, когато използвате ALTER TABLE, внимавайте...
Помислете за следния сценарий:
- Дискът е пълен с 60%.
- базата данни заема 50%, други файлове заемат 10%.
Ако направите alter table на която и да е маса, ще ви свърши дисково пространство, ако имате всички таблици в един файл.
Ако го имате в няколко файла, не би трябвало да имате проблеми (освен предозирането на кофеин от цялото това чакане).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_SET() – Вмъкване или актуализиране на стойности в JSON документ в MySQL

  2. MySql Меко изтриване

  3. Моментна снимка на обема на EBS, използван за репликация

  4. Отпечатване на данни от таблицата mysql php

  5. json_encode връща стойностите на следващите редове - PHP PDO SQL HighCharts