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
Die Kodierung von Webseiten wird im Englischen als...
Inhaltsverzeichnis vue2.x vue3.x Verwendung des T...
Einfache Funktion: Klicken Sie auf das Plug-In-Sy...
1. Konvertierung des Übermittlungsformats für die...
Vorwort: Als Junior-Programmierer träume ich davo...
Rand paralleler Boxen (Überlappung doppelter Ränd...
Dieser Artikel fasst die Hinweise zur Installatio...
Der Originalcode lautet: <div Klasse = "K...
Erfahren Sie, wie Sie Ihre eigene Website auf Apa...
Inhaltsverzeichnis 1. MySQL-Kompilierung und -Ins...
Inhaltsverzeichnis Vorwort Konzept Stabilisierung...
Aus Kodierungsgründen werden beim Hochladen oder ...
Der experimentelle Code lautet wie folgt: </hea...
1. Vertikaler Tisch und horizontaler Tisch Vertik...
Inhaltsverzeichnis Komponenten - Zeitleiste Benut...