🎜🎜Die Dateigröße kann nicht einfach verkleinert werden🎜🎜Sie können die Systemdatei über den Befehl Tabelle optimieren
verkleinern🎜🎜🎜🎜Es wird erstellt ein IO-Engpass🎜🎜Es können Daten zur Dateiaktualisierung gleichzeitig an mehrere Dateien gesendet werden🎜🎜🎜🎜Empfehlung:
- Verwenden Sie einen unabhängigen Tabellenbereich für Innodb
Methode zum Übertragen von Tabellen, die ursprünglich im Systemtabellenbereich vorhanden waren, in einen unabhängigen Tabellenbereich.
Schritte:
- Verwenden Sie mysqldump, um alle Datenbanktabellendaten zu exportieren.
- Stoppen Sie den MySQL-Dienst, ändern Sie Parameter und löschen Sie Innodb-bezogene Dateien.
- Starten Sie den MySQL-Dienst neu, erstellen Sie den Innodb-Systemtabellenbereich neu 5.2.2 Funktionen der Innodb-Speicher-Engine Protokollimplementierung Die Haltbarkeit der Transaktion besteht aus zwei Teilen: Einer davon ist der persistente Arbeitsprotokollpuffer im Speicher, dessen Größe durch innodb_log_buffer_size bestimmt wird, und der andere ist die rekonstruierte Protokolldatei, bei der es sich um den ib_logflie handelt, den wir in der Datei sehen systembezogene Dokumente. Undo Log erkennt die Atomizität von Transaktionen und führt Rollback-Vorgänge durch, wenn Transaktionen fehlschlagen. Das Redo-Log wird nacheinander gelesen und geschrieben, und das Undo-Log wird nach dem Zufallsprinzip gelesen und geschrieben. Wenn möglich, können die Daten zur Verbesserung der Leistung auf einem Solid-State-Laufwerk gespeichert werden.
- Innodb unterstützt Sperren auf Zeilenebene. Sperren auf Zeilenebene unterscheiden sich. Das Merkmal von Sperren auf Zeilenebene besteht darin, dass sie die Parallelität weitgehend unterstützen können. Sperren auf Zeilenebene werden von der Speicher-Engine-Ebene implementiert . 5.2.3 Innodb-Statusprüfung Innodb unterstützt bereits die Volltextindizierung und räumliche Funktionen.
5.2.4 (Erweitert) Was ist eine Sperre
5.2.3.1 Was ist eine Sperre?
- Die Hauptfunktion von Sperren besteht darin, den gleichzeitigen Zugriff auf gemeinsam genutzte Ressourcen zu verwalten.
- Sperren werden verwendet, um Transaktionsisolation zu erreichen.
5.2.3.2 Arten von Sperren:
Gemeinsame Sperren (auch Lesesperren genannt). (Auch Write Lock genannt)
5.2.3.3 Kompatibilitätsbeziehung zwischen Schreibschloss und Lesesperre (Kompatibilität für eine Zeile)
show engine innodb status
Write Lockread Lock
Write Lock - Nicht kompatibel
- Nicht kompatibel
Lesesperre
- Nicht kompatibel
- Kompatibel
In tatsächlichen Situationen können die Ergebnisse von den Ergebnissen in der obigen Tabelle abweichen, hauptsächlich weil der Sperrmechanismus in Innodb sehr komplex ist und es viele Sperren gibt, die sich auf das Endergebnis auswirken. 5.2.3.4 Sperrgranularität: Sperren auf Tabellenebene In einer Transaktion muss darauf gewartet werden, dass die Sperre einer anderen Transaktion freigegeben wird, und die von ihr belegten Ressourcen bilden eine Blockierung.
Deadlock: Deadlock bezieht sich auf eine Ausnahme, die auftritt, wenn zwei oder mehr Transaktionen die Ressourcen belegen, auf die die andere Partei während der Ausführung der Transaktion wartet. Wie aus der Definition hervorgeht, belegen mehrere blockierte Transaktionen die Ressourcen, auf die die blockierte Transaktion wartet, und ein Deadlock liegt vor, wenn mehrere blockierte Transaktionen die Ressourcen belegen, auf die die jeweils andere wartet.
5.3 CSV-Speicher-Engine-
- Die CSV-Speicher-Engine kann CSV-Dateien als MySQL-Tabellendateien verarbeiten. Die Datenspeichermethode der CSV-Speicher-Engine ist sehr einzigartig Wenn wir die Tabelle in MyISAM oder Innodb speichern, können wir die Datendateien nicht direkt anzeigen, da diese beiden Dateien im Binärformat gespeichert sind, während die CSV-Speicher-Engine im Binärformat gespeichert ist. Das heißt, wir können die Datei über den Befehl anzeigen, z. B. mehr, oder den Befehl vi verwenden, um die Tabelle in der CSV-Speicher-Engine anzuzeigen und zu bearbeiten. Solange sie dem Format und den Anforderungen der CSV-Datei entspricht. Wir müssen uns keine Sorgen über beschädigte Daten machen.
Wenn wir die CSV-Speicher-Engine-Tabelle in MySQL erstellen, sollten wir die Dateien in den 3 Dateisystemen sehen können. Diese drei Dateinamen basieren alle auf dem Tabellennamen, haben jedoch jeweils die Suffixe csv, csm und frm. Die CSV-Datei ist die Datendatei in der CSV-Speicher-Engine. Die CSM-Datei speichert die Metadaten der Tabelle sowie den Tabellenstatus und das Datenvolumen. In der FRM-Datei werden Informationen zur Tabellenstruktur gespeichert.
5.3.1 Funktionen der CSV-Speicher-Engine
Die größte Funktion ist die Datenspeicherung im CSV-Format Jede Spalte in CSV ist durch ,
getrennt und der Inhalt des Textes ist eingeschlossen in doppelten Anführungszeichen, wie unten gezeigt:
Alle Spalten müssen ungleich NULL sein
Beim Erstellen einer Tabelle müssen alle Spalten ungleich NULL sein und können nicht als NULL-Werte gespeichert werden
Unterstützt keine Indizes Nicht für große Tabellen geeignet
Kann Datendateien direkt bearbeiten. Textdateiinhalt speichern. php.cn/upload/article/000/000/052/e6a22a66b92309eb34516846e0267a53-2.png" alt="Bildbeschreibung hier einfügen"/>
- 所有列必须都是不能为NULL的
在建表的时候所有的列都必须是非空的,不能存储为NULL的值
- 不支持索引
不适合大表,不适合在线处理
- 可以对数据文件直接编辑
保存文本文件内容
5.3.2 CSV存储引擎的适用场景
CSV存储引擎适合作为数据交换的中间表
5.4 Archive存储引擎
5.4.1 文件系统存储特点
Archive存储引擎会缓存所有的写,并且利用zlib对插入的行进行压缩,因此Archive存储引擎相对于MyISAM存储引擎的表更加节省磁盘I/O,对于同样数量级的数据,Archive存储引擎相对于MyISAM和Innodb更加节省存储空间。一个几T的Innodb的表存储在Archive存储引擎当中,可能只需要几百兆的存储空间。
Archive存储引擎的表的数据是以ARZ为后缀的一个文件,和其他引擎一样,也存在一个以frm为后缀的系统文件,用于存储表的结构信息。
5.4.2 Archive存储引擎的特点
- 只支持
insert
和select
- 5.4.1 Dateisystem-Speicherfunktionen
schreibt und verwendet zlib, um eingefügte Zeilen zu komprimieren. Daher spart die Archivspeicher-Engine im Vergleich zu den Tabellen der MyISAM-Speicher-Engine Datenträger-E/A MyISAM-Tabellen sparen mehr Speicherplatz. Eine mehrere Terabyte große Innodb-Tabelle, die in der Archivspeicher-Engine gespeichert ist, benötigt möglicherweise nur einige hundert Megabyte Speicherplatz. Die Tabellendaten der Archivspeicher-Engine sind eine Datei mit dem Suffix ARZ. Wie bei anderen Engines gibt es auch eine Systemdatei mit dem Suffix frm, die zum Speichern der Strukturinformationen der Tabelle verwendet wird. 5.4.2 Funktionen der Archiv-Speicher-Engine 5.4.3 Nutzungsszenarien für die Archivspeicher-Engine
Szenario 1: Protokoll- und Datenerfassungsdaten
Da das Archiv das Ändern und Löschen nicht unterstützt, ändert unser ORDB die Daten auf jeden Fall, für einige Lagertypanwendungen oder einige spezielle Tabellen jedoch immer noch nützlich, wie z. B. Protokollierungstabellen oder Datenerfassungstabellen. Da sie große Datenmengen sammeln müssen, ist die Archivspeicher-Engine besser geeignet. Da die Archivspeicher-Engine unter allen Engines über den kleinsten Speicherplatz verfügt, ist zu beachten, dass die Archivspeicher-Engine diese Daten auch in Datenerfassungs- oder Protokollierungsanwendungen nicht aktualisieren kann, z. B. beim Aufzeichnen von Protokollen oder wenn Sie die Daten in einer Datensammlung ändern Wenn Sie eine Anwendung verwenden, können Sie die Archivspeicher-Engine möglicherweise nicht verwenden.
5.5 Speicher-Engine
5.5.1 Dateisystem-Speicherfunktionen
Die Speicher-Engine wird auch als HEAP-Speicher-Engine bezeichnet. Dies bedeutet, dass die Datentabelle gelöscht wird. Sobald der MySQL-Dienst neu gestartet wird, verschwinden alle Daten der Speicher-Engine, die Struktur bleibt jedoch bestehen bleibt erhalten, da beim Erstellen einer Tabelle unter der Speicherspeicher-Engine nur eine FRM-Systemdatei generiert wird, die zum Speichern der Tabellenstruktur verwendet wird. Aus diesem Grund gehen beim Neustart des MySQL-Servers Daten verloren, die Tabellenstruktur jedoch nicht.
Anhand der Dateispeichereigenschaften können wir erkennen, dass die E/A-Effizienz der Speicherspeicher-Engine viel höher ist als die von MyISAM, da nur der Index von MyISAM im Speicher gespeichert wird und die Daten vom Betriebssystem zwischengespeichert werden Während die Speicher-Engine Daten und Indizes im Speicher speichert, werfen wir einen Blick auf die Funktionen der Speicher-Engine.
5.5.2 Funktionsmerkmale von Memory Wenn Sie eine Bereichsabfrage durchführen, können Sie den HASH-Index nicht verwenden. Daher müssen wir beim Erstellen der Tabelle aufpassen. Wenn die Tabelle eine große Anzahl gleichwertiger Abfragen erfordert, verwenden Sie den HASH-Index und für Bereichsabfragen den BTree-Index. Verschiedene Indextypen können einen großen Einfluss auf die Leistung haben. Alle Felder haben eine feste Länge varchar(10) = char(10)
Dies erfordert, dass wir bei der Definition der Tabellenstruktur die Mindestanforderungen an die Feldlänge erfüllen, da sonst viel Speicher verschwendet wird. Unterstützt keine großen Felder wie BLOG und TEXT
- Speicher-Engine verwendet Sperren auf TabellenebeneDie maximale Größe wird durch den Parameter max_heap_table_size bestimmtDer Standardwert dieses Parameters beträgt nur 16 Megabyte, wenn wir speichern möchten Eine große Datenmenge in der Tabelle der Speicher-Engine muss geändert werden. Diese Parameteränderung hat keine Auswirkungen auf die vorhandene Tabelle der Speicher-Engine. Wenn Sie sie auf die vorhandene Tabelle anwenden müssen, müssen Sie dies tun Erstellen Sie die vorhandene Tabelle neu.
- 5.5.3 Leicht verwechselbare Konzepte im Speicher
- Speicher-Engine-Tabelle:
Kann in allen Systemen verwendet werden, es handelt sich nicht um eine temporäre Tabelle. - Temporäre Tabelle:
Es gibt zwei Arten von temporären Tabellen, die vom System verwendet werden, wenn der Abfrageoptimierer die Abfrage optimiert. Das System verwendet die temporäre Tabelle, wenn der Grenzwert überschritten wird Große BLOB- oder TEXT-Felder), verwenden Sie die temporäre MyISAM-Tabelle und verwenden Sie die Speichertabelle, ohne das Limit zu überschreiten. - Die andere ist eine temporäre Tabelle, die mit dem Befehl
temporäre Tabelle erstellen
erstellt wurde. Die erstellte Tabelle kann jede Speicher-Engine verwenden.
Egal um welche Art temporäre Tabelle es sich handelt, sie ist nur intern sichtbar.
5.5.4 Speichernutzungsszenarien
Wird zum Nachschlagen oder Zuordnen von Tabellen verwendet, z. B. Postleitzahlen- und Regionskorrespondenztabellen.
Wird zum Speichern von Zwischentabellen verwendet, die während der Datenanalyse generiert wurden.
Wird zum Zwischenspeichern der Ergebnisse der periodischen Aggregation verwendet Datentabellecreate temporary table
建立的临时表,建立的表可以使用任何存储引擎。
无论是哪种临时表,只对内部可见。
5.5.4 Memory的使用场景
- 用于查找或者映射表,例如邮编和地区的对应表
- 用于保存数据分析中产生的中间表
- 用于缓存周期聚合数据的结果表
Memory数据易丢失,所以要求数据可再生。
5.6 Federated存储引擎
5.6.1 Federated的特点
- 提供了访问远程MySQL服务器上表的方法
由于Federated存储引擎只是在本地建立了到远程服务器的一个连接,所以可以说我们所要访问的表全部还是放在远程服务器上,在本地并不存储数据。每次访问Federated存储引擎表的时候,查询都会被发送到远程服务器上运行,并从远程的MySQL服务器上获取相关的数据。
- 本地不存储数据,数据全部放到远程服务器上
- 本地需要保存表结构和远程服务器的连接信息
因此也会在系统中存在一个frm文件,用于存于远程信息以及如何连接远程表的相关信息。
5.6.2 Federated如何使用
Federated存储引擎可以实现SQL Server连接服务器的功能,但是由于本身的性能并不太好,通常可以通过复制等实现相同的目的,所以在当前的MySQL版本中,Federated存储引擎默认是禁止的。如果需要使用Federated存储引擎,则需要在/usr/local/mysql/my.cnf
中加入federated=1
,接着重启MySQL服务器,我们可以通过show engine
来确认当前MySQL服务器是否支持Federated存储引擎。
而在create table
语句中使用下面的连接字符串,
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
远程服务器绑定连接:
grant select,update,insert,delete on remote.remote_fet to fred_link@'127.0.0.1' identified by '123456'
Speicherdaten gehen leicht verloren, daher müssen die Daten reproduzierbar sein. 5.6 Federated Storage Engine
5.6.1 Funktionen von Federated Man kann sagen, dass alle Tabellen, auf die wir zugreifen möchten, immer noch auf dem Remote-Server abgelegt sind und keine Daten lokal gespeichert sind. Bei jedem Zugriff auf eine Federated Storage Engine-Tabelle wird die Abfrage zur Ausführung an den Remote-Server gesendet und die relevanten Daten werden vom Remote-MySQL-Server abgerufen. -
Keine Daten werden lokal gespeichert, alle Daten werden auf dem Remote-Server abgelegt
Die Tabellenstruktur und die Verbindungsinformationen des Remote-Servers müssen lokal gespeichert werden Daher gibt es im System auch eine FRM-Datei zum Remote-Speichern Informationen und Informationen zum Herstellen einer Verbindung zur Remote-Tabelle.
5.6.2 Verwendung von Federated
🎜🎜Die Federated-Storage-Engine kann die Funktion einer SQL Server-Verbindung zum Server realisieren. Aufgrund ihrer eigenen Leistung kann jedoch normalerweise derselbe Zweck erreicht werden Replikation usw., daher ist in der aktuellen MySQL-Version die Federated Storage Engine standardmäßig deaktiviert. Wenn Sie die Federated Storage Engine verwenden müssen, müssen Sie federated=1
zu /usr/local/mysql/my.cnf
hinzufügen und dann den MySQL-Server neu starten. Wir können show engine
übergeben, um zu bestätigen, ob der aktuelle MySQL-Server die Federated Storage Engine unterstützt. 🎜 Und verwenden Sie die folgende Verbindungszeichenfolge in der create table
-Anweisung: 🎜mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
🎜 Remote Server Bindungsverbindung: 🎜grant select,update,insert,delete on remote.remote_fet to fred_link@'127.0.0.1' identifiziert durch '123456'
🎜 Sie können die relevanten Informationen des Remote-Servers ermitteln, die abgefragt werden sollen und einige Informationen zu verwandten Datenbanktabellen. 🎜🎜🎜5.6.3 Anwendbare Szenarien von Federated🎜🎜🎜🎜Gelegentliche statistische Analyse und manuelle Abfrage🎜 Aufgrund der langsamen Leistung von Federated ist es nur für gelegentliche statistische Analysen und manuelle Abfragen geeignet. 🎜🎜🎜🎜6 So wählen Sie die richtige Speicher-Engine aus🎜🎜🎜Referenzbedingungen: 🎜
- Transaktionen
- Backup
- Crash-Recovery
- Einzigartige Funktionen von Speicher-Engines
Vermeiden Sie die Vermischung von Speicher-Engines.