Wissen Sie, wie Sie diese Optionen des allgemeinen MySQL-Tabellenbereichs verwenden?

Die effiziente Verwaltung von Speicher und Leistung in einer MySQL-Datenbank ist von entscheidender Bedeutung, und allgemeine Tablespaces bieten die Flexibilität, dieses Ziel zu erreichen. In diesem Artikel werden allgemeine Tabellenbereiche erläutert und ihre Funktionen, Vorteile und praktischen Einsatzmöglichkeiten sowie anschauliche Beispiele untersucht.

Was ist ein allgemeiner Tablespace?

Im Gegensatz zu einem einzelnen System-Tablespace, der standardmäßig Systemtabellen enthält, ist ein allgemeiner Tablespace ein benutzerdefinierter Speichercontainer für mehrere InnoDB-Tabellen. Sie bieten im Vergleich zu den Standardeinstellungen Flexibilität bei der Datenorganisation und Leistungsoptimierung.

Haupteigenschaften

  • Multitabellenspeicher: Im Gegensatz zu unabhängigen Tabellenbereichen, die jede Tabelle in einer separaten Datei speichern, kann ein allgemeiner Tabellenbereich eine große Anzahl von Tabellen aufnehmen und dadurch die Speichereffizienz verbessern.
  • Flexibler Speicherort: Datendateien können im Datenverzeichnis von MySQL oder an einem separaten Speicherort gespeichert werden, was eine bessere Kontrolle über die Speicherverwaltung und Leistungsoptimierung ermöglicht.
  • Unterstützung für alle Tabellenformate: Universelle Tabellenbereiche können alle InnoDB-Tabellenformate unterstützen, einschließlich redundanter, kompakter, dynamischer und komprimierter Zeilenformate, und bieten so Flexibilität für spezifische Anforderungen.
  • Speicheroptimierung: Gemeinsam genutzte Tablespace-Metadaten reduzieren den Speicherverbrauch im Vergleich zu Tablespaces mit mehreren Dateien pro Tabelle.

Vorteile der Verwendung eines allgemeinen Tabellenbereichs

  • Verbesserte Leistung: Durch die strategische Platzierung von Datendateien auf schnelleren Festplatten oder die Verteilung von Tabellen auf mehrere Festplatten kann die Leistung erheblich verbessert werden.
  • RAID- und DRBD-Integration: Datendateien können für verbesserte Datenredundanz und Notfallwiederherstellung auf RAID- oder DRBD-Volumes abgelegt werden.
  • Verschlüsselungsunterstützung: MySQL unterstützt die allgemeine Tabellenbereichsverschlüsselung, um die Datensicherheit zu erhöhen.
  • Bequeme Tabellenverwaltung: Mit universellen Tablespaces können Sie mehrere Tabellen gruppieren und so Datenbankobjekte einfacher verwalten und organisieren.

Erstellen und verwalten Sie gemeinsame Tablespaces

Sie können die CREATE TABLESPACE- Anweisung verwenden, um einen allgemeinen Tabellenbereich zu erstellen und den Speicherort der Datendatei sowie Engine-Optionen anzugeben.

Das Erstellen eines allgemeinen Tabellenbereichs erfordert ein paar einfache Schritte. Die folgende CREATE TABLESPACE-general_tablespace.ibd Anweisung erstellt einen my_general_tablespaceneuen Tablespace mit dem Namen unter Verwendung der angegebenen Datendatei . Darüber hinaus wird die ENCRYPTION='Y'Tablespace-Verschlüsselung mithilfe der Option aktiviert und FILE_BLOCK_SIZE = 16384die Dateiblockgröße mithilfe der Option festgelegt.

Erstellen wir einen my_general_tablespaceallgemeinen Tabellenbereich mit dem Namen:

mysql> CREATE TABLESPACE my_general_tablespace
   -> ADD DATAFILE 'general_tablespace.ibd'
   -> ENCRYPTION='Y'
   -> FILE_BLOCK_SIZE = 16384;
ERROR 3185 (HY000): Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully.
mysql>


mysql> pager grep -i keyring_file;
PAGER set to 'grep -i keyring_file'

mysql> SHOW PLUGINS;
50 rows in set (0.00 sec)

mysql> INSTALL PLUGIN keyring_file SONAME 'keyring_file.so';
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW PLUGINS;
| keyring_file                     | ACTIVE   | KEYRING            | keyring_file.so | GPL     |
50 rows in set (0.00 sec)

mysql> CREATE TABLESPACE my_general_tablespace
   -> ADD DATAFILE 'general_tablespace.ibd'
   -> ENCRYPTION='Y'
   -> FILE_BLOCK_SIZE = 16384;
Query OK, 0 rows affected (0.01 sec)

mysql>

Sehen wir uns nun an, wie man einen allgemeinen Tablespace außerhalb des Datenverzeichnisses erstellt.

root@mysql8:/var/lib# mkdir mysql_user_defined
root@mysql8:/var/lib# chown -R mysql.mysql mysql_user_defined
root@mysql8:/var/lib#

mysql> CREATE TABLESPACE user_defined_general_tablespace
    -> ADD DATAFILE '/var/lib/var/lib/mysql_user_defined/user_defined_general_tablespace.ibd'
    -> Engine=InnoDB;
ERROR 3121 (HY000): The DATAFILE location must be in a known directory.

Fehler 3121 (HY000): Der Speicherort der Datendatei muss sich in einem bekannten Verzeichnis befinden. Tipp: MySQL kann den Tablespace nicht im angegebenen Verzeichnis erstellen, da das Verzeichnis nicht als gültiger Speicherort für Datendateien konfiguriert ist.

Um diesen Fehler zu beheben, führen Sie die folgenden Schritte aus: Überprüfen Sie die konfigurierten Verzeichnisse mit SHOW VARIABLES LIKE 'innodb_directories'/var/lib/mysql_user_define . Wenn sie nicht aufgeführt sind, fahren Sie mit dem Hinzufügen des Verzeichnisses fort.

mysql> SHOW VARIABLES LIKE 'innodb_directories';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| innodb_directories |       |
+--------------------+-------+
1 row in set (0.00 sec)

root@mysql8:/etc/mysql/mysql.conf.d# grep -i innodb_directories mysqld.cnf
innodb_directories=/var/lib/mysql_user_defined
root@mysql8:/etc/mysql/mysql.conf.d# service mysql restart
root@mysql8:/etc/mysql/mysql.conf.d

mysql> CREATE TABLESPACE user_defined_general_tablespace
    -> ADD DATAFILE '/var/lib/mysql_user_defined/user_defined_general_tablespace.ibd'
    -> Engine=InnoDB;
Query OK, 0 rows affected (0.02 sec)

Ordnen Sie die Tabelle dem allgemeinen Tabellenbereich zu

Nachdem Sie einen allgemeinen MySQL-Tablespace erstellt haben, können Sie ihm während der Tabellenerstellung oder durch Änderung vorhandener Tabellen Tabellen zuweisen. Das Folgende ist my_general_tablespaceein Beispiel für die Erstellung einer Tabelle in:

mysql> CREATE TABLE my_table (
    ->     id INT PRIMARY KEY,
    ->     name VARCHAR(50)
    -> ) TABLESPACE = my_general_tablespace;
ERROR 3825 (HY000): Request to create 'unencrypted' table while using an 'encrypted' tablespace.
mysql>

mysql> CREATE TABLE my_table (
    ->     id INT PRIMARY KEY,
    ->     name VARCHAR(50)
    -> ) TABLESPACE = my_general_tablespace
    ->   ENCRYPTION='Y';
Query OK, 0 rows affected (0.02 sec)

Wir haben user_define_general_tablespaceunverschlüsselt erstellt, sodass wir darin unverschlüsselte Tabellen erstellen können.

mysql> CREATE TABLE my_unencrypted_table(
    -> id INT PRIMARY KEY,
    -> name VARCHAR(50)
    -> ) TABLESPACE = user_defined_general_tablespace;
Query OK, 0 rows affected (0.01 sec)

Migrieren Sie eine Tabelle in einen allgemeinen Tabellenbereich

Wenn Sie über vorhandene Tabellen verfügen und diese in einen allgemeinen Tabellenbereich verschieben möchten, können Sie die ALTER TABLE- Anweisung verwenden. Zum Beispiel:

mysql> show create table authorsG
*************************** 1. row ***************************
       Table: authors
Create Table: CREATE TABLE `authors` (
  `id` int DEFAULT NULL,
  `first_name` varchar(50) DEFAULT NULL,
  `last_name` varchar(50) DEFAULT NULL,
  `age` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql> ALTER TABLE authors
    -> TABLESPACE = my_general_tablespace;
ERROR 3825 (HY000): Request to create 'unencrypted' table while using an 'encrypted' tablespace.

mysql> ALTER TABLE authors ENCRYPTION='Y';
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE authors
    -> TABLESPACE = my_general_tablespace;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql>

Um eine Tabelle von einem allgemeinen Tablespace in einen eigenständigen Tablespace zu verschieben, geben Sie “innodb_file_per_table”als Ziel-Tablespace-Namen an.

mysql> ALTER TABLE authors
    -> TABLESPACE = innodb_file_per_table ENCRYPTION = 'Y';
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

Monitor

Diese Abfrage ruft Informationen über den angegebenen MySQL-Tablespace ab, einschließlich Tablespace-Name, Dateiname, Speicher-Engine, Status und verfügbarem freien Datenspeicher.

mysql> SELECT TABLESPACE_NAME, FILE_NAME, ENGINE, STATUS, DATA_FREE FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME IN ('my_general_tablespace',
'user_defined_general_tablespace')G
*************************** 1. row ***************************
TABLESPACE_NAME: my_general_tablespace
      FILE_NAME: ./general_tablespace.ibd
         ENGINE: InnoDB
         STATUS: NORMAL
      DATA_FREE: 0
*************************** 2. row ***************************
TABLESPACE_NAME: user_defined_general_tablespace
      FILE_NAME: /var/lib/mysql_user_defined/user_defined_general_tablespace.ibd
         ENGINE: InnoDB
         STATUS: NORMAL
      DATA_FREE: 0
2 rows in set (0.00 sec)

Mit der folgenden Abfrage können Sie Informationen zu InnoDB-Tabellen finden, die zum angegebenen Tabellenbereich gehören.

mysql> SELECT NAME, SPACE_TYPE, TABLESPACE_NAME from INFORMATION_SCHEMA.INNODB_TABLES JOIN INFORMATION_SCHEMA.FILES ON FILE_ID=SPACE WHERE TABLESPACE_NAME='my_general_tablespace'G
*************************** 1. row ***************************
           NAME: mytestdb/my_table
     SPACE_TYPE: General
TABLESPACE_NAME: my_general_tablespace
*************************** 2. row ***************************
           NAME: mytestdb/books
     SPACE_TYPE: General
TABLESPACE_NAME: my_general_tablespace
2 rows in set (0.01 sec)

Um TABLESPACE-Informationen für eine bestimmte InnoDB-Tabelle abzurufen, verwenden Sie die folgende Abfrage.

mysql> SELECT NAME, SPACE_TYPE, TABLESPACE_NAME from INFORMATION_SCHEMA.INNODB_TABLES JOIN INFORMATION_SCHEMA.FILES ON FILE_ID=SPACE WHERE NAME='mytestdb/my_table'G
*************************** 1. row ***************************
           NAME: mytestdb/my_table
     SPACE_TYPE: General
TABLESPACE_NAME: my_general_tablespace
1 row in set (0.00 sec)

Praktisches Anwendungsbeispiel:

  • Trennen Sie häufig aufgerufene und selten verwendete Tabellen: Platzieren Sie häufig aufgerufene Tabellen in einem allgemeinen Tabellenbereich auf der SSD, um eine bessere Leistung zu erzielen, und platzieren Sie selten verwendete Tabellen in einem allgemeinen Tabellenbereich auf der Festplatte, um die Speicherkosten zu optimieren.
  • E/A-Last ausgleichen: Verteilen Sie Tabellen auf mehrere gemeinsame Tabellenbereiche auf verschiedenen Festplatten, um E/A-Engpässe zu vermeiden und die Geschwindigkeit der Abfrageausführung zu erhöhen.
  • Dedizierter Speicher für kritische Daten: Erstellen Sie separate Allzweck-Tablespaces mit RAID- oder DRBD-Konfiguration für kritische Tabellen, um maximale Redundanz zu gewährleisten und vor Hardwareausfällen zu schützen.

abschließend

MySQL Universal Tablespaces stellen eine leistungsstarke und flexible Speicherlösung zur Optimierung der Datenorganisation und -leistung dar. Wenn Sie ihre Funktionen verstehen und sie effektiv einsetzen, können Sie Ihre Datenbankverwaltungsbemühungen erheblich verbessern. Um die Vorteile zu maximieren, denken Sie daran, Ihre spezifischen Anforderungen und Workload-Eigenschaften sorgfältig zu prüfen, bevor Sie einen universellen Tablespace implementieren.

Weitere technische Artikel finden Sie unter: https://opensource.actionsky.com/

Über SQLE

SQLE ist eine umfassende SQL-Qualitätsmanagementplattform, die die SQL-Prüfung und -Verwaltung von der Entwicklung bis zur Produktionsumgebung abdeckt. Es unterstützt gängige Open-Source-, kommerzielle und inländische Datenbanken, bietet Prozessautomatisierungsfunktionen für Entwicklung, Betrieb und Wartung, verbessert die Online-Effizienz und verbessert die Datenqualität.

SQLE erhalten

Typ Adresse
Repository https://github.com/actiontech/sqle
dokumentieren https://actiontech.github.io/sqle-docs/
Neuigkeiten veröffentlichen https://github.com/actiontech/sqle/releases
Entwicklungsdokumentation für das Datenaudit-Plug-in https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
MySQL 5.7, Moqu, Li Tiaotiao... Eine Bestandsaufnahme der (Open-Source-)Projekte und Websites, die 2023 „suspendiert“ werden. Kingsoft WPS abgestürzt . Das Rust-Experiment von Linux war erfolgreich. Kann Firefox die Chance nutzen? 10 Vorhersagen über Open Source Die Mittelschule kaufte ein „intelligentes interaktives Katharsis-Gerät“ – das eigentlich eine Hülle für die Nintendo Wii ist. „Ruiping“, der Vater von Redis, LLM-Programmierung: allwissend und allmächtig&& Dumm Die „Post-Open-Source“-Ära hat begonnen eingetroffen: Die Lizenz ist abgelaufen und kann nicht für die breite Öffentlichkeit bereitgestellt werden. Vim 9.1 wird veröffentlicht, gewidmet Bram Moolenaar 2024 „Neujahrsschlacht“ im Front-End-Kreis: React gräbt Löcher, füllt sie aber nicht, dazu muss es sich auf die Dokumentation verlassen Fülle sie? China Unicom Broadband begrenzte plötzlich die Upload-Geschwindigkeit, viele Nutzer beschwerten sich. Niklaus Wirth, der Vater von Pascal, ist verstorben.
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/actiontechoss/blog/10678832
Recomendado
Clasificación