Tabelruimten uitleggen

Voltooid

Een tabelruimte is een groep gegevensbestanden. Elke tabelruimte kan gegevens opslaan voor een of meer tabellen. Er zijn drie typen tabelruimten:

  • Systeemtabelruimte
  • Bestand-per-tabelruimte
  • Algemene tabelruimte

Als u een volledige lijst met tabelruimten op uw MySQL-server wilt weergeven, voert u de query uit:

SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;

Hiermee wordt een lijst met tabelruimten samen met hun bestandsnamen geretourneerd.

InnoDB-gegevensbestanden hebben de extensie .ibd.

Notitie

MySQL scant tabelruimten wanneer deze wordt gestart, dus een zeer groot aantal tabelruimten kan ertoe leiden dat MySQL langer duurt om te starten of failover uit te voeren.

Systeemtabelruimte

Elke MySQL-database heeft ten minste één tabelruimte, de systeemtabelruimte en u kunt meer maken met de instructie CREATE TABLESPACE .

Er is altijd een systeemtabelruimte, waar de InnoDB-datadictionary en de undo-logboeken worden opgeslagen.

In Azure Database for MySQL is de serverparameter innodb_data_file_path een statische parameter die is ingesteld op automatischextend. Hiermee configureert u de systeemtabelruimte om automatisch uit te breiden, zodat er altijd voldoende ruimte beschikbaar blijft. Deze parameter kan niet worden gewijzigd, dus u hoeft zich geen zorgen te maken over het wijzigen van het formaat van de systeemtabelruimte.

Bestand-per-tabelruimte

Tabel- en indexgegevens worden standaard opgeslagen in een tabelruimte per bestand of tabelruimte met één tabel. Een tabelruimte met een bestand per tabel bevat één tabel, inclusief de gegevens en indexen. Wanneer de tabel wordt verwijderd, wordt de file-per-table tabelruimte ook verwijderd.

De serverparameter innodb_file_per_table bepaalt of elke zojuist gemaakte tabel in een eigen tabelruimte wordt gemaakt. Deze parameter is standaard ingesteld op AAN. Als innodb_file_per_table is ingesteld op UIT, worden er nieuwe tabellen gemaakt in de systeemtabelruimte.

Aanbeveling

Wijzig voor de beste prestaties de standaardinstelling van de innodb_file_per tabel niet.

Algemene tabelruimte

Als u tabellen wilt opslaan in een tabelruimte die u maakt, gebruikt u de syntaxis:

CREATE TABLESPACE mytablespace ADD DATAFILE '/var/lib/mysql/mytablespace.ibd' engine = Innodb;

Als u een tabel wilt maken in de algemene tabelruimte die u hebt gemaakt, gebruikt u de volgende syntaxis:

CREATE TABLE new_table (myID INT) TABLESPACE = mytablespace;

Wanneer u een algemene tabelruimte maakt, is de locatie van het gegevensbestand optioneel. De volgende syntaxis werkt ook:

CREATE TABLESPACE mytablespace ADD DATAFILE 'mytablespace.ibd' engine = Innodb;

Algemene tabelruimten worden niet automatisch verwijderd, zelfs niet als alle tabellen die ze bevatten, zijn verwijderd. Een algemene tabelruimte verwijderen:

DROP TABLESPACE mytablespace;

Over het algemeen is het beter om de standaardinstelling te behouden voor het maken van elke nieuwe tabel in een eigen tabelruimte per bestand. Als u een groot aantal kleine tabellen hebt, is er mogelijk sprake van ongebruikte ruimte of fragmentatie, die moet worden beheerd, maar de algehele prestaties zijn beter.

Best practice voor Tablespace

  • Maak alle tabellen in de innodb_file_per_table tabelruimte.
  • Als een tabel groter is dan 1 TB, kunt u overwegen om de tabel te partitioneren .
  • Zelfs voor grote tabellen kunt u overwegen een bestand-per-tabel-tabelruimte te gebruiken. Hiermee voorkomt u dat de systeemtabelruimte de maximale opslaglimiet overschrijdt.