Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego data_free MySQL jest większa niż dane i indeksy razem wzięte?

Zakładam, że używasz InnoDB, ponieważ jest to domyślny silnik przechowywania w MySQL 5.5.

Przestrzenie tabel InnoDB powiększają się w miarę wstawiania danych, ale pliki nie zmniejszają się podczas usuwania danych. Na przykład, jeśli wstawisz 1 milion wierszy, a następnie je usuniesz, plik będzie miał dużo miejsca, które jest fizycznie przydzielone, ale nie będzie już używane. InnoDB użyje ponownie tej przestrzeni, jeśli będzie to możliwe, przed ponownym powiększeniem pliku przestrzeni tabel.

Ponadto, nawet jeśli nie usuniesz, może pojawić się trochę "zmarnowanego" miejsca, ponieważ gdy rozmiar plików obszaru tabel jest powiększany, są one powiększane o duży fragment stron, określony przez opcję konfiguracji innodb_autoextend_increment w megabajtach. Dopóki te strony nie zostaną wypełnione danymi, pozostają wolne miejsce.

Data_free zgłaszana przez InnoDB to ilość miejsca „zmarnowanego” na pustych stronach w centralnym pliku obszaru tabel. Nie ma to nic wspólnego z wartościami NULL, ma to związek ze stronami danych, które nie zawierają wierszy.

Ponadto w MySQL 5.5 domyślnie wszystkie tabele współdzielą jeden centralny obszar tabel o nazwie ibdata . Data_Free dla wszystkich tabel w tym obszarze tabel poda tę samą wartość, czyli ilość miejsca na wolnych stronach w całym obszarze tabel, a nie tylko dla jednej tabeli.

Możesz także przydzielić oddzielny obszar tabel na tabelę (innodb_file_per_table=1 ), a dla tabel w oddzielnych przestrzeniach tabel zobaczysz inną wartość dla każdej tabeli dla data_free.

Data_free zgłasza tylko miejsce pozostawione przez całkowicie puste zakresy (zakres to blok stron równy 1MB). Zauważysz, że data_free to zawsze wielokrotność 1 MB. Mniejsze bloki bezpłatnych stron nie są liczone w data_free, ani częściowo wypełnione strony. Tak więc „zmarnowana” przestrzeń jest prawdopodobnie znacznie większa, ale nie mamy możliwości jej poznania.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki COLLATE powinienem ustawić, aby używać wszystkich możliwych języków?

  2. Dynamiczny SQL zwraca „błąd składni” w Google Apps Script przy użyciu JDBC i MySQL

  3. Jak zmienić wszystkie tabele w mojej bazie danych na zestaw znaków UTF8?

  4. Jak stworzyć bloga w PHP i bazie danych MySQL - projektowanie DB

  5. Python models.py syncdb nie działa