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
Problembeschreibung: Der Benutzer hat die Anforde...
Es gibt zwei Arten von MySQL-Installationsdateien...
Vor langer Zeit habe ich einen Blogbeitrag mit de...
Vorwort: Mit der kontinuierlichen Entwicklung der...
Installation der Msyql-Datenbank. Zu Ihrer Inform...
Hinweis: Diese Demo wurde in der Miniprogrammumge...
Der erste Cutter in China github.com/chokcoco Hie...
Inhaltsverzeichnis Join-Syntax: 1. InnerJOIN: (In...
Inhaltsverzeichnis 1: Handschriftliche Seitennumm...
Inhaltsverzeichnis 1. Konzept Speicherverwaltungs...
Vorwort In den Anfangsphasen einiger Projekte wer...
Farbe ist eines der wichtigsten Elemente jeder We...
In diesem Artikel finden Sie das Installations- u...
1. Einleitung Der Unterschied zwischen Zeilensper...
1. Es gibt im Allgemeinen zwei Methoden zur Steue...