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.
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.
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.
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ąć?
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?
Odpowiedzi:
Kiedy może to stanowić problem
Jeśli uruchomisz
show table status
na stole, aData_free
pole stanowi zdecydowaną większośćibdata1
rozmiaru 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 .
Nie przejmuj się bazą danych o pojemności 15 GB.
źródło
InnoDB free: 7364608 kB
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:
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.
źródło