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

Защо data_free на MySQL е по-голям от данните и индексите, взети заедно?

Предполагам, че използвате InnoDB, защото това е машината за съхранение по подразбиране в MySQL 5.5.

Пространствата за таблици InnoDB нарастват, когато вмъквате данни, но файловете не се свиват, когато изтриете данни. Така например, ако вмъкнете 1 милион реда и след това ги изтриете, файлът ще има много място, което е физически разпределено, но вече не се използва. InnoDB ще използва повторно това пространство, ако може, преди да увеличи отново файла на пространството за таблици.

Освен това, дори и да не изтриете, може да има малко "загубено" пространство, защото когато файловете на пространството за таблици се увеличат по размер, те се разширяват с голяма част от страници, определени от опцията за конфигурация innodb_autoextend_increment в мегабайти. Докато тези страници не се запълнят с данни, те са свободно място.

Data_free, отчетен от InnoDB, е количеството пространство, "загубено" в празни страници в централния файл на пространството за таблици. Това няма нищо общо с NULL стойности, има общо със страници с данни, които нямат редове в тях.

Освен това в MySQL 5.5 по подразбиране всички таблици споделят едно централно пространство за таблици, наречено ibdata . Data_Free за всички таблици в това пространство за таблици ще отчита една и съща цифра, която е количеството пространство в свободните страници в цялото пространство за таблици, а не само за една таблица.

Можете също така да разпределите отделно пространство за таблица на таблица (innodb_file_per_table=1 ), а за таблици в отделни пространства за таблици ще видите различна стойност за таблица за data_free.

Data_free отчита само място, оставено от напълно празни екстенти (екстент е блок от страници, равен на 1MB). Ще забележите, че data_free винаги е кратно на 1MB. По-малките блокове безплатни страници не се броят в data_free, нито частично попълнените страници. Така че „загубеното“ пространство вероятно е много по-голямо, но няма как да го разберем.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да ПРИСЪЕДИНЕТЕ таблица с категории за родители в SQL заявка?

  2. Как да запазим UTF8mb4 данни с mysqldump?

  3. Преобразувайте вложената mysql заявка в стил codeigniter

  4. Как да направя <option selected=selected> зададен от MySQL и PHP?

  5. Можете ли да разделите/раздуете поле в MySQL заявка?