Co w MySQL oznacza „Overhead”, co jest złego w tym i jak to naprawić?

157

proste pytanie, ale od jakiegoś czasu mnie to dręczy ...

czym jest „narzut” w MySQL i czy powinienem się martwić?

czy kliknięcie „optymalizuj tabelę” naprawia to naprawdę?

johnnietheblack
źródło

Odpowiedzi:

147

Wydaje się, że narzut jest tymczasowy na dysku, którego baza danych używała do uruchamiania niektórych zapytań, więc powinieneś się martwić tylko wtedy, gdy zrobi się naprawdę dużo.

Możesz porównać „Optymalizację tabeli” z defragmentacją dysku twardego.

Cytuję:

Z czasem każda baza danych będzie wymagać jakiejś formy konserwacji, aby utrzymać ją na optymalnym poziomie wydajności. Czyszczenie usuniętych wierszy, ponowne ustalanie kolejności, kompresowanie, zarządzanie ścieżkami indeksów, defragmentacja itp. To tak zwana OPTYMALIZACJA w mysql i innych terminach w innych bazach danych. Na przykład IBM DB2 / 400 nazywa to REORGANIZE PHYSICAL FILE MEMBER.

To trochę jak wymiana oleju w samochodzie lub dostrajanie. Możesz pomyśleć, że naprawdę nie musisz, ale robiąc to, twój samochód działa znacznie lepiej, uzyskujesz lepszy przebieg na benzynie, itp. Samochód, który ma dużo przebiegów, wymaga częstszych regulacji. Baza danych, która jest intensywnie używana, wymaga tego samego. Jeśli wykonujesz dużo operacji UPDATE i / lub DELETE, a zwłaszcza jeśli twoje tabele mają kolumny o zmiennej długości (VARCHAR, TEXT, itp.), Musisz być na bieżąco.

Jaspis
źródło
1
@Jasper Czy tabele są w pełni zablokowane (nie można ich odczytywać / zapisywać) podczas trwania optymalizacji?
Pacerier,
4
Skąd się wziął ten cytat? Wiele wyników znajduję w Google.
Ian Hunter
skąd mamy wiedzieć, co powoduje ciągle narzut?
mahen3d
dziękuję za doskonały i łatwy przykład, niezależnie od cholernych terminów technicznych.
shyammakwana.me
1
Co jest uważane za „naprawdę wysokie”?
TV-C-15
87

Jeśli mówisz o rzeczy, która phpMyAdminwywołuje overhead, to jest to rzeczywisty rozmiar pliku danych tabeli w stosunku do idealnego rozmiaru tego samego pliku danych (tak jakby był właśnie przywracany z kopii zapasowej).

Ze względu na wydajność MySQLnie kompaktuje plików danych po usunięciu lub zaktualizowaniu wierszy.

Jest overheadto złe w przypadku skanowania tabeli, tj. Gdy zapytanie musi obejmować wszystkie wartości tabeli, będzie musiało spojrzeć na bardziej puste miejsce.

Możesz się go pozbyć overhead, uruchamiając OPTIMIZE TABLEkompaktowanie tabeli i indeksów.

Quassnoi
źródło
7
Rozmiar dokumentacji mysql mówi: "OPTYMALIZUJ TABELĘ należy użyć, jeśli usunąłeś dużą część tabeli lub dokonałeś wielu zmian w tabeli z wierszami o zmiennej długości", to mój przypadek, dzięki :)
boclodoa
8

Narzut to Data_free tabeli, czyli liczba przydzielonych, ale nieużywanych bajtów. Możemy go znaleźć za pomocą polecenia SQL SHOW TABLE STATUS . Jest to wolne miejsce w przydzielonym rozmiarze dla twojego stołu.

Shankar Prakash G.
źródło
1

Optymalizacja tabeli może być bardzo problematyczna. Na przykład jeśli tabela jest intensywnie używana w witrynie.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

Po usunięciu dużej części tabeli MyISAM lub ARCHIVE lub wprowadzeniu wielu zmian w tabeli MyISAM lub ARCHIVE z wierszami o zmiennej długości (tabele, które mają kolumny VARCHAR, VARBINARY, BLOB lub TEXT). Usunięte wiersze są utrzymywane na połączonej liście, a kolejne operacje WSTAWIANIA ponownie wykorzystują stare pozycje wierszy. <

Myślę, że potwierdziłem to zachowanie. I z pewnością byłoby to bardzo przydatne.

Thomas Lindegaard Jensen
źródło