Jak duży jest za duży dla pliku ibdata?

9

Mój plik ibdata jest bardzo duży, przynajmniej wydaje mi się, że jest bardzo duży. Czy to jest nadmierne czy nie takie złe?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1
nachito
źródło
4
Twój plik ibdata jest bardzo mały.
Jeff Ferland
Czy podzielenie tego pliku na mniejsze fragmenty (powiedzmy 4G) byłoby lepsze czy gorsze pod względem wydajności?
nachito

Odpowiedzi:

13

Kiedy może to stanowić problem

Jeśli uruchomisz show table statusna stole, a Data_freepole stanowi zdecydowaną większość ibdata1rozmiaru pliku, możesz mieć dużo zmarnowanego miejsca. Sprawi to wiele problemów z wstawieniem / usunięciem. Jeśli tak jest, a przejściowe wstawianie i usuwanie stanowi większość danych, masz dobry przypadek na plik na tabelę.

Nie jest to jednak automatyczne „tak”. Na świecie dużo mówi się o wewnętrznej fragmentacji plików InnoDB, ale umieszczenie ich w systemie plików, ponieważ plik na tabelę po prostu przenosi fragmentację na poziom systemu plików zamiast na poziom bazy danych.

Dlaczego zwykle nie stanowi to problemu

Pomyśl o pliku InnoDB jako o systemie plików, a nie o pliku. Jeśli masz dużo plików, potrzebujesz dużego systemu plików.

W większości systemy plików bardzo dobrze radzą sobie ze skalowaniem w górę, aby obsłużyć terabajty danych i niezliczoną liczbę plików. Czasami występują problemy ze słabym indeksowaniem (np. Ograniczenia liczby plików w katalogu przed pogorszeniem wydajności), ale w większości przypadków nowoczesny system plików może wyskoczyć w zakres terabajtów.

InnoDB działa w ten sam sposób. Rozmiar pliku danych może być ogromny ... i podobnie jak duże systemy plików, które mogą powodować problemy z tworzeniem kopii zapasowych danych. Jednak podzielenie systemu plików na wiele partycji nie pomaga w rozwiązaniu tego problemu, podobnie jak próba manipulowania programem innodb. Chociaż możesz używać pliku innodb_file_per_table , rzadko go polecam.

Podobnie jak twój system plików, lepszym rozwiązaniem jest poznanie wewnętrznych ograniczeń i praca w tym zakresie. Zrozum indeksy i odpowiednio je zastosuj. Nie pracuj nad próbą podzielenia InnoDB, to nie jest do tego przeznaczone.

Ponieważ staram się konstruktywnie przekazać tę koncepcję, oto krótkie czytanie, że słowa brzmią lepiej niż potrafię: Terabajty to nie duże zbiory danych, to petabajty .

Pamiętam naprawdę stary slajd marketingowy MySQL, w którym klient prowadził hurtownię danych z kilkoma terabajtami. Wiele lat temu. Oba działałyby InnoDB lub MyISAM. Jest to standard w standardzie MySQL.

Nie przejmuj się bazą danych o pojemności 15 GB.

Jeff Ferland
źródło
Wygląda na to, że jestem prawie w 50% wykorzystany. InnoDB free: 7364608 kB
nachito
@nachito To brzmi jak powinno być w porządku. Jeśli uważasz, że potrzebujesz miejsca w systemie plików, odzyskaj je. Jeśli martwisz się tylko wydajnością, nie rób tego. Ponadto, jeśli chodzi o wydajność, najlepiej przechowywać pliki bazy danych na własnej partycji, więc jeśli skupiasz się na wydajności, i tak nie zobaczysz możliwego do odzyskania.
Jeff Ferland
6

Pliki ibdata nie kurczą się - jeśli ostatnio upuściłeś kilka tabel lub usunąłeś wiele wierszy - innodb w twojej konfiguracji nie zwolni wolnego miejsca z powrotem do systemu plików. proponuję ci:

  • wykonaj kopię zapasową wszystkich danych, np. za pomocą mysqldump
  • dodaj do dyrektywy my.cnf innodb_file_per_table
  • uruchom ponownie mysql
  • upuść wszystkie bazy danych za pomocą silnika innodb
  • zatrzymać mysql
  • usuń plik ibdata
  • rm ib_logfile [01]
  • uruchom mysql, sprawdź syslog, jeśli wszystko jest w porządku
  • przeładuj swój zrzut

w ten sposób będziesz mógł odzyskać miejsce za każdym razem, gdy upuścisz tabelę / bazę danych innodb - powiązane pliki idb zostaną natychmiast usunięte.

pQd
źródło
Rozumiem, że to nigdy nie zmniejszy się bez zrzutu i ponownego załadowania tabel. Jeśli jednak upuściłem bazy danych InnoDB, czy wykorzysta to „wolne” miejsce, zanim zacznie ponownie rosnąć?
nachito
1
@nachito Tak, będzie.
Jeff Ferland
Twoja odpowiedź jest po prostu prostą sugestią, bez zaciemniania problemu, tak jak moja odpowiedź. +1 !!!
RolandoMySQLDBA
1
Cóż, odpowiedź jest rozwiązaniem zmniejszającym przestrzeń zajmowaną przez pliki danych, ale nie jest to dyskusja na temat związanych z tym zalet, i to jest pytanie, gdy je czytam. Czy plik ibdata 15 GB to wielka sprawa?
Jeff Ferland