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“.
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 fügen Sie Vite-Unterstützung zu alten Vue-Projekten hinzu
Inhaltsverzeichnis 1. Effektanzeige 2. Verbessert...
Inhaltsverzeichnis 1. Analyse der MySQL-Architekt...
1. Mobile Auswahl der Formulartexteingabe: Wenn i...
Vorwort Kommen wir gleich zur Sache. Die folgende...
Vorwort Hallo zusammen, hier ist der CSS-Assisten...
Ich verwende hier das Ubuntu 16.04-System. Instal...
Inhaltsverzeichnis K8S Master Grundlegende Archit...
1. Grundlagen der Linux-Firewall Das Linux-Firewa...
Automatisierter Build bedeutet, Docker Hub zu ver...
XMeter API bietet einen umfassenden Online-Schnit...
Der übergeordnete Knoten des übergeordneten Knoten...
<br />Es ist nicht länger als zwei Jahre her...
Inhaltsverzeichnis JS erhält den Inhalt der TXT-D...
Schritt 1: Stow installieren In diesem Beispiel v...
Einige Monate nachdem ich 2005 in die Branche eing...