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

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.25

Es gibt zwei Arten von MySQL-Installationsdateien...

Empfehlen Sie mehrere MySQL-bezogene Tools

Vorwort: Mit der kontinuierlichen Entwicklung der...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.13

Installation der Msyql-Datenbank. Zu Ihrer Inform...

CSS imitiert Fernbedienungstasten

Hinweis: Diese Demo wurde in der Miniprogrammumge...

Unglaubliche CSS-Navigationsleiste unterstreiche folgenden Effekt

Der erste Cutter in China github.com/chokcoco Hie...

Spezifische Verwendungsanweisungen für MySQL-Joins

Inhaltsverzeichnis Join-Syntax: 1. InnerJOIN: (In...

Farbabstimmungstechniken und Effektdarstellung für Beauty- und Styling-Websites

Farbe ist eines der wichtigsten Elemente jeder We...

MySQL 5.6.23 Installations- und Konfigurations-Umgebungsvariablen-Tutorial

In diesem Artikel finden Sie das Installations- u...

Beispiel für eine Routing-Berechtigungsverwaltungsmethode in Vue2/vue3

1. Es gibt im Allgemeinen zwei Methoden zur Steue...