2013-06-06 14 views
9

Używam już mysql, ale nie rozumiem, jak to działa wewnętrznie. Czy ktoś może wskazać mi dobry zasób na temat tego, jak wygląda wewnętrzna reprezentacja danych na dysku, co może również dyskutować o tym, jak rzeczy są wyszukiwane i dostępne tak szybko? Jeszcze lepiej, czy ktoś może wymyślić wyjaśnienie na wysokim poziomie?w jaki sposób dane mysql są przechowywane na dysku?

+0

To pytanie gwarantuje kilka naprawdę dobrych badań, a nie tylko sesja pytań, może być lepiej dopasowana na http://dba.stackexchange.com –

+0

Książka "Pro MySQL" wyjaśnia ten proces dość dokładnie. – Marty

+0

IMHO zależy to od mechanizmu przechowywania, w którym korzystasz ze struktur MyissAM, a InnoDB jest cichych. Jednak AFIK używa wszystkich drzew D lub KD (nie jestem teraz pewien co do K). – rekire

Odpowiedz

12

Serwer MySQL wykorzystuje przestrzeń dyskową na kilka sposobów, głównie dla katalogów i plików znajdujących się w jednym miejscu, znanym jako katalog danych serwera. Serwer używa swojego katalogu danych do przechowywania wszystkich następujących:

  1. Katalogi baz danych. Każda baza danych odpowiada pojedynczemu katalogowi w katalogu danych, niezależnie od typów tabel tworzonych w bazie danych. Na przykład dana baza danych jest reprezentowana przez jeden katalog, niezależnie od tego, czy zawiera tabele MyISAM, tabele InnoDB, czy ich kombinację.
  2. Pliki w formacie tabeli (pliki .frm), które zawierają opis struktury tabeli. Każda tabela ma własny plik .frm, znajdujący się w odpowiednim katalogu bazy danych. Jest to prawdą bez względu na to, który aparat pamięciowy zarządza tabelą.
  3. Pliki danych i indeksów są tworzone dla każdej tabeli przez niektóre silniki pamięci i umieszczane w odpowiednim katalogu bazy danych. Na przykład mechanizm magazynowania danych MyISAM tworzy plik danych i plik indeksu dla każdej tabeli.
  4. Mechanizm magazynowania InnoDB ma własne pliki tabel i dziennika. Przestrzeń tabel zawiera dane i informacje o indeksie dla wszystkich tabel InnoDB, a także dzienniki cofania, które są potrzebne, jeśli transakcja musi zostać wycofana. Pliki dziennika rejestrują informacje o zatwierdzonych transakcjach i służą do zapewnienia, że ​​nie nastąpi utrata danych. Domyślnie pliki obszaru tabel i dziennika są umieszczone w katalogu danych. Domyślny plik obszaru tabel nosi nazwę ibdata1, a domyślne pliki dziennika mają nazwę ib_logfile0 i ib_logfile1. (Możliwe jest również skonfigurowanie InnoDB do używania jednego pliku obszaru tabel na tabelę.W tym przypadku InnoDB tworzy plik obszaru tabel dla danej tabeli w katalogu bazy danych tabeli.)
  5. Pliki dziennika serwera i pliki statusu. Pliki te zawierają informacje o instrukcjach przetwarzanych przez serwer. Dzienniki są używane do replikacji i odzyskiwania danych, w celu uzyskania informacji do wykorzystania w optymalizacji wydajności zapytań oraz do określenia, czy występują problemy operacyjne.
+0

Świetna odpowiedź z cichym mnóstwem informacji, czy napisałeś to wszystko ze swojej pamięci? Jeśli to możliwe, proszę podać odniesienia do przyszłych badań. – rekire

+0

Znalazłem tę informację, gdy robiłem badania na temat pamięci MySQL. Zostało to wspomniane na blogu MySQL DBA –

+0

@PeterVenderberghe Good one ... –

Powiązane problemy