2016-06-14 51 views
15

Badając problem, natknąłem się na ten błąd:Co to jest obszar tabel i dlaczego jest używany?

30503 [ERROR] InnoDB: Attempted to open a previously opened tablespace. Previous tablespace mysql/innodb_index_stats uses space ID: 2 at filepath: ./mysql/innodb_index_stats.ibd. Cannot open tablespace Mydb/be_command_log which uses space ID: 2 at filepath: ./Mydb/be_command_log.ibd

Po przeczytaniu trochę o tym problemie, poznałem, że to a known issue of MySQL.

Ale mój problem polega na tym, że nie wiem zbyt wiele o tym, jak naprawdę działają obszary tabel. Jak są przydatne? Czytam this definition, ale to nie daje wszystkich informacji.

Czy ktoś może udostępnić niektóre szczegółowe informacje o czym są obszary tabel i jak działają?

+0

Ten wpis zawiera również podstawowe informacje na temat przestrzeni tabel: http://stackoverflow.com/questions/18959643/what-is-the-use-of-tablespace-in-the-above-query – ArBro

+0

Myślę, że link @ABr zaoferował odpowiedzi na pytanie, ale ponieważ oznaczono MySQL, możesz również zainteresować się instrukcją [CREATE TABLESPACE'] (https://dev.mysql.com/doc/refman/5.6/en/create-tablespace. html). – bishop

+0

Zgadzam się z tym, ale zależy od ciebie wersja MySql chcesz zobaczyć odniesienie do wersji 5.7: http://dev.mysql.com/doc/refman/5.7/en/create-tablespace.html – ArBro

Odpowiedz

5

Plik danych, który może przechowywać dane dla jednej lub więcej tabel InnoDB i powiązanych indeksów.

Istnieje wiele rodzajów obszarów tabel na podstawie konfiguracji w.r.t informacji clubbing na tabelę. Są to,

. System tabel b. Plik na tabelę c. Ogólne tabel słownika danych

tabel systemu zawiera,

  1. InnoDB.
  2. Bufor DoubleWrite.
  3. Zmień bufor
  4. Cofnij dzienniki.

Oprócz tego zawiera on także,

  1. Stoły &
  2. Dane Index

pliku skojarzonego jest .idbdata1

Opcja innodb_file_per_table, który jest domyślnie włączony w MySQL w wersji 5.6 i wyższej, umożliwia tworzenie tabel w obszarach tabel na plik, w oddzielnym pliku danych dla każdej tabeli. Włączenie opcji innodb_file_per_table udostępnia inne funkcje MySQL, takie jak kompresja tabel i przenośne obszary tabel.

pliku skojarzonego jest .idbd

InnoDB wprowadzone ogólnych tabel w MySQL 5.7.6. Ogólne obszary tablicowe to współużytkowane obszary tabel utworzone przy użyciu składni CREATE TABLESPACE. Mogą być tworzone poza katalogiem danych MySQL, mogą przechowywać wiele tabel i obsługiwać tabele wszystkich formatów wierszy.

2

Domyślnie InnoDB zawiera tylko jedną przestrzeń tabel nazywaną systemową przestrzenią tabel, której identyfikator to 0. Więcej obszarów tablic może zostać utworzonych pośrednio przy użyciu parametru konfiguracyjnego innodb_file_per_table. Obszar tabel składa się z łańcucha plików. Rozmiar plików nie musi być podzielny przez rozmiar bloku bazy danych, ponieważ możemy po prostu zostawić ostatni nieukończony blok nieużywany. Kiedy nowy plik jest dołączany do obszaru tabel, określony jest również maksymalny rozmiar pliku. W tej chwili uważamy, że najlepiej jest rozszerzyć plik do jego maksymalnego rozmiaru już podczas tworzenia pliku, ponieważ wtedy możemy uniknąć dynamicznego rozszerzania pliku, gdy potrzebujemy więcej miejsca dla obszaru tabel. Pliki danych są dynamicznie rozszerzane, ale ponawiane pliki dziennika są wstępnie przydzielane. Ponadto, jak już wspomniano wcześniej, tylko systemowa przestrzeń tabel może mieć więcej niż jeden plik danych. Jest także wyraźnie wspomniane, że nawet jeśli obszar tabel może mieć wiele plików, są one traktowane jako jeden duży plik połączony razem. Zatem kolejność plików w obszarze tabel jest ważna.

Od https://blogs.oracle.com/mysqlinnodb/entry/data_organization_in_innodb

+0

Rukshan, Czy możesz wyjaśnić więcej o tym, czym one są i dlaczego ich potrzebujemy? Dzięki za komentarz. –

1

MySQL Innodb TableSpace to miejsce, w którym dane znajdują się na dysku o nazwie katalog danych (Domyślnie „tabel systemu”). Przykład:

"/var/lib/mysql"

z MySQL w wersji 5.6.6, użytkownik może tworzyć i określać tabel chcą przechowywać dane, które umożliwia przepustowość manipulacji danymi i procesu odzyskiwania. Funkcja "plik-tabela" InnoDB oferuje każdej tabeli oddzielne pliki indeksu, które reprezentują indywidualny ogólny obszar tabel. Aby każda tabela w bazie danych mogła wskazywać various locations of data directories.

Ex:

/home/{user}/test/data/{dbName}/{tableName}.ibd

/home/{user}/work/data/{dbName}/{tableName}.ibd

Więcej na temat tabel file-per-tabeli, patrz ten mysql documentation.

1

Klienci sql będą używać tylko obiektów sql i nie będą się martwić, gdzie serwer bazy danych fizycznie przechowuje te informacje.

dlatego potrzebna jest koncepcja przestrzeni tabel. Obiekty sql, takie jak dane tabeli, przechodzą do obszaru tabel z punktu widzenia klienta sql.

Administratorzy serwera db mogą teraz fizycznie umieszczać obszary tabel tam, gdzie chcą fizycznie przejść, programy klienckie sql nadal działają.