Detaillierte Erläuterung der MySQL 8.0-Wörterbuchtabellenerweiterung

Detaillierte Erläuterung der MySQL 8.0-Wörterbuchtabellenerweiterung

Das Datenwörterbuch in MySQL ist eine der wichtigen Komponenten der Datenbank. INFORMATION_SCHEMA wurde erstmals in MySQL 5.0 als standardkonforme Möglichkeit zum Abrufen von Metadaten von einem laufenden MySQL-Server eingeführt. Wird zum Speichern von Datenmetadaten, statistischen Informationen und Zugriffsinformationen zum MySQL-Server verwendet (z. B. Datenbankname oder Tabellenname, Felddatentyp und Zugriffsberechtigungen usw.).

Vor 8.0:

1. Metadaten stammen aus Dateien

2. Verwenden Sie die MEMORY-Tabellen-Engine

3. Die frm-Datei speichert Informationen zur Tabellenstruktur

4. Die Opt-Datei zeichnet einige grundlegende Informationen jeder Bibliothek auf, einschließlich des Zeichensatzes der Bibliothek usw.

5. .TRN- und .TRG-Dateien werden zum Speichern von Triggerinformationen verwendet

5.6> SELECT TABLE_SCHEMA, ENGINE, COUNT(*) aus information_schema.tables, wobei table_schema in ('information_schema', 'mysql', 'performance_schema', 'sys') gruppiert nach TABLE_SCHEMA, ENGINE;
+--------------------+--------------------+----------+
| TABLE_SCHEMA | ENGINE | ANZAHL(*) |
+--------------------+--------------------+----------+
| Informationsschema | SPEICHER | 49 |
| Informationsschema | MyISAM | 10 |
| MySQL | CSV | 2 |
| MySQL | InnoDB | 6 |
| MySQL | MyISAM | 21 |
| Leistungsschema | LEISTUNGSSCHEMA | 52 |
+--------------------+--------------------+----------+
5.7> SELECT TABLE_SCHEMA, ENGINE, COUNT(*) aus information_schema.tables, wobei table_schema in ('information_schema', 'mysql', 'performance_schema', 'sys') gruppiert nach TABLE_SCHEMA, ENGINE;
+--------------------+--------------------+----------+
| TABLE_SCHEMA | ENGINE | ANZAHL(*) |
+--------------------+--------------------+----------+
| Informationsschema | InnoDB | 10 |
| Informationsschema | SPEICHER | 51 |
| MySQL | CSV | 2 |
| MySQL | InnoDB | 19 |
| MySQL | MyISAM | 10 |
| Leistungsschema | Leistungsschema | 87 |
| sys | NULL | 100 |
| sys | InnoDB | 1 |
+--------------------+--------------------+----------+

Nach 8.0:

1. In der Tabelle sind Metadaten vorhanden

2. Alle werden in die MySQL-Datenbank verschoben, in die InnoDB-Tabellen-Engine geändert und ausgeblendet

3. Information_schema kann nur über die Ansicht angezeigt werden

4. Alle NULL-Werte sind Ansichten

5. Gespeichert in einem separaten Tablespace mysql.ibd

8.0> Wählen Sie TABLE_SCHEMA,ENGINE,count(*) aus den Tabellen aus, in denen TABLE_SCHEMA in ('information_schema', 'mysql', 'performance_schema', 'sys') nach TABLE_SCHEMA,ENGINE gruppiert ist;
+--------------------+--------------------+----------+
| TABELLE_SCHEMA | ENGINE | Anzahl(*) |
+--------------------+--------------------+----------+
| Informationsschema | NULL | 65 |
| MySQL | InnoDB | 31 |
| MySQL | CSV | 2 |
| Leistungsschema | PERFORMANCE_SCHEMA | 102 |
| sys | NULL | 100 |
| sys | InnoDB | 1 |
+--------------------+--------------------+----------+

Trotz einiger Verbesserungen in 5.7 ist die INFORMATION_SCHEMA-Leistung für viele unserer Benutzer weiterhin ein großer Schwachpunkt. Der Hauptgrund für die Leistungsprobleme in der aktuellen INFORMATION_SCHEMA-Implementierung liegt darin, dass Abfragen von INFORMATION_SCHEMA-Tabellen so implementiert werden, dass während der Abfrageausführung temporäre Tabellen erstellt werden.

Wenn wir die Tabellenfragmente abfragen, sieht das folgendermaßen aus:

5.7> Erläutern Sie „select round(DATA_FREE/1024/1024)“ als DATA_FREE aus „information_schema.TABLES“, wobei DATA_FREE/1024/1024 > 1024 und TABLE_SCHEMA nicht in (,information_schema‘, ,mysql‘, ,performance_schema‘, ,sys‘);
+----+----------+--------+------+---------------+------+---------+---------+------+------+----------------------------------------------------+
| ID | Auswahltyp | Tabelle | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | Extra |
+----+----------+--------+------+---------------+------+---------+---------+------+------+----------------------------------------------------+
| 1 | SIMPLE | TABELLEN | ALLE | NULL | NULL | NULL | NULL | NULL | Verwenden von where; Open_full_table; Alle Datenbanken gescannt |
+----+----------+--------+------+---------------+------+---------+---------+------+------+----------------------------------------------------+

Zu den zusätzlichen Informationen gehören „Open_full_table“ und „Alle Datenbanken gescannt“.
Skip_open_table, Open_frm_only, Open_full_table. Diese Werte geben die Optimierung des Dateiöffnens für INFORMATION_SCHEMA-Tabellenabfragen an.

  • Skip_open_table: Die Tabellendatei muss nicht geöffnet werden. Die Informationen wurden durch Scannen des Datenbankkatalogs in der Abfrage verfügbar gemacht.
  • Open_frm_only: Es muss nur die .frm-Datei der Tabelle geöffnet werden.
  • Open_full_table: Nicht optimierte Informationssuche. .frm-, .MYD- und .MYI-Dateien müssen geöffnet werden.
  • Gescannte N Datenbanken: bezieht sich darauf, wie viele Verzeichnisse beim Verarbeiten von Information_Schema-Abfragen gescannt werden müssen.

Wenn eine MySQL-Instanz über Hunderte von Datenbanken mit jeweils Hunderten von Tabellen verfügt, liest die INFORMATION_SCHEMA-Abfrage letztendlich jede einzelne FRM-Datei aus dem Dateisystem, was zu zahlreichen E/A-Lesevorgängen führt. Außerdem wird durch das Öffnen der Tabelle und die Vorbereitung der zugehörigen Datenstrukturen im Arbeitsspeicher letztendlich mehr CPU-Leistung verbraucht. Es wird versucht, den Tabellencache auf MySQL-Serverebene (die Systemvariable „table_definition_cache“) zu verwenden, aber in großen Instanzen gibt es selten einen Tabellencache, der groß genug ist, um alle Tabellen aufzunehmen. Daher steigt der Speicherverbrauch drastisch an und es kann sogar zu OOM kommen.

Normalerweise verwenden wir die folgenden Methoden, um dieses Problem zu lösen:

1. Teilen Sie die Bibliothekstabelle auf, um die Anzahl der von einer einzelnen Instanz geöffneten Dateien zu reduzieren

2. Passen Sie die Anzahl von table_definition_cache und table_open_cache an

3. Fügen Sie physischen Speicher hinzu

Nach der Veröffentlichung von MySQL 8.0 wurde eine weitere Option bereitgestellt. Da die Wörterbuchtabelle die InnoDB-Engine verwendet, kann die Wörterbuchtabelle Indizes verwenden.

Das folgende Diagramm erläutert die Designunterschiede zwischen MySQL 5.7 und 8.0:

8.0> erläutern Sie „select table_name,table_rows,concat(round(DATA_LENGTH/1024/1024, 2), 'MB') als Größe,concat(round(INDEX_LENGTH/1024/1024, 2), 'MB') als Indexgröße,DATA_FREE/1024/1024 AS data_free_MB“ aus „information_schema.TABLES“, wobei „table_schema“ nicht in ('information_schema', 'performance_schema', 'test') ist, sortiert nach data_free_MB, Beschreibungslimit 10;
+----+----------+----------+---------+--------+--------------------+------------+---------+---------+---------+-----------+----------+----------+-----------------------------------------------+
| ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra |
+----+----------+----------+---------+--------+--------------------+------------+---------+---------+---------+-----------+----------+----------+-----------------------------------------------+
| 1 | SIMPLE | cat | NULL | index | PRIMARY | name | 194 | NULL | 1 | 100.00 | Index wird verwendet; Temporär wird verwendet; Filesort wird verwendet |
| 1 | SIMPLE | sch | NULL | ref | PRIMARY,catalog_id | catalog_id | 8 | mysql.cat.id | 6 | 50.00 | Where verwenden; Index verwenden |
| 1 | SIMPLE | tbl | NULL | ref | schema_id | schema_id | 8 | mysql.sch.id | 52 | 100.00 | Verwenden von „where“ |
| 1 | EINFACH | ts | NULL | eq_ref | PRIMARY | PRIMARY | 8 | mysql.tbl.tablespace_id | 1 | 100.00 | NULL |
| 1 | EINFACH | stat | NULL | eq_ref | PRIMARY | PRIMARY | 388 | mysql.sch.name,mysql.tbl.name | 1 | 100.00 | NULL |
| 1 | SIMPLE | col | NULL | eq_ref | PRIMARY | PRIMARY | 8 | mysql.tbl.collation_id | 1 | 100.00 | Index wird verwendet |
+----+----------+----------+---------+--------+--------------------+------------+---------+---------+---------+-----------+----------+----------+-----------------------------------------------+

Oben finden Sie eine ausführliche Erläuterung der MySQL 8.0-Wörterbuchtabellenerweiterung. Weitere Informationen zur MySQL 8.0-Wörterbuchtabellenerweiterung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So gehen Sie mit dem Problem um, dass MySQL-Benutzer ihre Passwörter vergessen oder ihre Passwörter ablaufen
  • Detaillierte Erläuterung der MySQL-Benutzerkennwort-Ablauffunktion
  • Das MySQL-Passwort ist abgelaufen, wodurch die Verbindung zu MySQL fehlgeschlagen ist
  • Absteigender Index in MySQL 8.0
  • Beispiel für die Bereitstellung von MySQL 8.0 mit Docker
  • Ausführliche Erklärung des Binlogs in MySQL 8.0
  • So fügen Sie in MySQL 8.0 schnell Spalten hinzu
  • MySQL 8.0.21 Installationstutorial mit Bildern und Text
  • MySQL 8.0.21-Installationstutorial unter Windows-System (Abbildung und Text)
  • MySQL 8.0.21.0 Community Edition Installations-Tutorial (ausführliche Abbildungen)
  • Detaillierte Erläuterung der MySQL 8.0-Richtlinie zum Ablauf von Passwörtern

<<:  So fügen Sie Vite-Unterstützung zu alten Vue-Projekten hinzu

>>:  Nginx konfiguriert denselben Domänennamen, um sowohl den http- als auch den https-Zugriff zu unterstützen

Artikel empfehlen

Der gesamte Prozess der Entwicklung eines Google-Plug-Ins mit vue+element

Einfache Funktion: Klicken Sie auf das Plug-In-Sy...

Tipps zur Verwendung von Vue-Elementen und Nuxt

1. Konvertierung des Übermittlungsformats für die...

So erstellen Sie schnell eine statische Website in der Alibaba Cloud

Vorwort: Als Junior-Programmierer träume ich davo...

Über die Überlappung von Randwert und vertikalem Rand in CSS

Rand paralleler Boxen (Überlappung doppelter Ränd...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.21 winx64

Dieser Artikel fasst die Hinweise zur Installatio...

So installieren und konfigurieren Sie den Apache-Webserver

Erfahren Sie, wie Sie Ihre eigene Website auf Apa...

So verwenden Sie Anti-Shake und Throttling in Vue

Inhaltsverzeichnis Vorwort Konzept Stabilisierung...

So löschen Sie verstümmelte oder mit Sonderzeichen versehene Dateien in Linux

Aus Kodierungsgründen werden beim Hochladen oder ...

Kommentare auf Webseiten verursachen Textüberlauf im Internet Explorer

Der experimentelle Code lautet wie folgt: </hea...

Implementierung der Elementzeitleiste

Inhaltsverzeichnis Komponenten - Zeitleiste Benut...