Heim >Datenbank >MySQL-Tutorial >MYSQL Advanced für Big Data Learning
Kostenlose Lernempfehlung: MySQL-Video-Tutorial System
1.3 Datenbankspeicher-Engine Auswahl
1.4 Datenbankparameterkonfiguration1.5 Datenbankstrukturdesign und SQL-Anweisungen (Schlüssel)2 Hardwareaspekte
2.1 CPU-Ressourcen und verfügbare Speichergröße
Design der Datenbanktabellenstruktur
Schreiben und Optimieren von SQL-Anweisungen
Im Folgenden finden Sie eine detaillierte Beschreibung jedes Aspekts. 2. Hardware-Aspekte Die CPU ist so hoch wie möglich, aber aufgrund der Kosten oder verschiedener Faktoren sind wir oft gezwungen, nur eine davon auszuwählen. Wie sollten wir also die beste Lösung auswählen? Daher müssen wir beim Kauf einer CPU auf mehrere Punkte achten:
Die Größe des Speichers wirkt sich direkt auf die Leistung der Datenbank aus. Der Speicher ist derzeit viel effizienter als die Festplatte. Daher kann das Zwischenspeichern von Daten im Speicher die Serverleistung erheblich verbessern.
2.1.2.1 Häufig verwendete MySQL-Speicher-EnginesEs gibt zwei häufig verwendete Speicher-Engines: MyISAM und InnoDB.
MyISAM
: Der Index wird im Speicher abgelegt und die Daten werden auf der Festplatte gespeichert.
InnoDB:
Sowohl Indizes als auch Daten werden im Speicher gespeichert, wodurch die Betriebseffizienz der Datenbank verbessert wird.
2.1.2.2 Tipps
2.2 Festplattenkonfiguration und -auswahl
SpeicherkapazitätÜbertragungsgeschwindigkeit
Zugriffszeit
SpindelgeschwindigkeitPhysische Größe2.2.2.2 RAID-Level
2.2.2.2.1 RAID 0
RAID 0 ist der früheste RAID-Modus, auch Data Striping genannt. Es ist die einfachste Form unter den Komponenten-Festplatten-Arrays. Es erfordert nur mehr als 2 Festplatten. Es ist kostengünstig und kann die Leistung und den Durchsatz der gesamten Festplatte verbessern. RAID 0 bietet keine Redundanz- oder Fehlerwiederherstellungsfunktionen, ist aber mit den niedrigsten Implementierungskosten verbunden. Unter Berücksichtigung der Datenwiederherstellungs- und Zuverlässigkeitsfaktoren ist RAID 0 jedoch zur teuersten Konfiguration geworden, da es bei RAID 0 keine Redundanz gibt und die Wahrscheinlichkeit einer Datenbeschädigung höher ist als bei einer einzelnen Festplatte. Denn Datenschäden auf jeder Festplatte führen zu Datenverlust. Beispielsweise ist die Wahrscheinlichkeit einer Beschädigung eines RAID 0, das aus drei Festplatten besteht, dreimal höher als bei einer einzelnen Festplatte. Daher eignet sich RAID 0 für Situationen, in denen keine einzelnen Daten verloren gehen, wie zum Beispiel: eine Standby-Datenbank, die jederzeit von anderen Datenbanken geklont werden kann, oder einige Datenbanken, die nur einmal verwendet werden müssen. Einfach ausgedrückt besteht RAID 0 darin, Festplatten in Reihe zu verbinden, um eine größere Festplatte zu bilden, wie zum Beispiel:
Und im gleichzeitigen Prozess kann die dreifache Leistung einer einzelnen Festplatte erreicht werden.
2.2.2.2.2 RAID 1
RAID 1 wird auch „Festplattenspiegelung“ genannt. Das Prinzip besteht darin, die Daten einer Festplatte auf eine andere Festplatte zu spiegeln werden auf eine andere Festplatte geschrieben. Generieren Sie Image-Dateien auf begrenzten Festplatten, um die Zuverlässigkeit und Reparierbarkeit des Systems zu maximieren, ohne die Leistung zu beeinträchtigen.
Nach dem Austausch einer neuen Festplatte nimmt die Datensynchronisierung viel Zeit in Anspruch. Der Datenzugriff wird dadurch zwar nicht beeinträchtigt, die Leistung des Systems wird jedoch beeinträchtigt. RAID 1 kann in vielen Fällen eine gute Leseleistung und redundante Daten zwischen verschiedenen Festplatten bieten, sodass die Datenredundanz sehr gut ist. RAID 1 kann besser lesen als RAID 0 und eignet sich daher besser zum Speichern von Protokollen oder ähnlichen Aufgaben.
2.2.2.2.3 RAID 5 – Gemeinsame RAID-Gruppe
RAID 5 wird auch als Distributed Parity Disk Array bezeichnet. Die
Daten werden über verteilte Paritätsblöcke auf mehrere Festplatten verteilt
, sodass bei einem Datenausfall auf der Festplatte diese aus den Paritätsblöcken wiederhergestellt werden können. Wenn jedoch zwei Festplatten ausfallen, können die Daten des gesamten Volumes nicht wiederhergestellt werden.
Das größte Problem bei RAID 5 besteht darin, dass die Festplatte ausfällt, da die Daten anderen Festplatten neu zugewiesen werden müssen, was die Leistung der Festplatte erheblich beeinträchtigt. Daher ist es am besten, bei erneutem Lesen RAID 5 zu verwenden. 2.2.2.2.4 RAID 10 – Häufig verwendete RAID-Gruppen
RAID 10 wird auch als Sliced Mirror bezeichnet. Es führt zuerst RAID 1 auf den Festplatten und dann RAID 0 auf den beiden Sätzen von RAID 1-Festplatten durch, sodass es im Vergleich zu RAID 5 eine gute Leistung beim Lesen und Schreiben aufweist und einfacher und schneller wiederhergestellt werden kann.
Wenn bei RAID 10 eine Festplatte beschädigt ist, hat dies schwerwiegende Auswirkungen auf die Leistung, da während des Lese- und Schreibvorgangs zwei benachbarte Festplatten gleichzeitig gelesen werden können. Wenn eine beschädigt ist, ist dies möglich nur von einer einzelnen Festplatte lesen, sodass unsere Leistung im schlimmsten Fall um 50 % sinkt.
Level | Funktionen | Redundanz | Anzahl der Festplatten | Lesen | Schreiben |
---|---|---|---|---|---|
RAID 0 | Billig, schnell, gefährlich | Nein | N | Schnell | Schnell |
RAID 1 | Schnelles Lesen, einfach und sicher | Ja | 2 | Schnell | Langsam |
RAID 5 | Sicher, kostengünstig | Es gibt | N+1 | schnell | Hängt von der langsamsten Festplatte ab |
RAID 10 | teuer, schnell, sicher | Es gibt | 2N | schnell | schnell |
2.2.3 Solid-State-Speicher SSD und PCIe-Karten verwenden
Solid-State-Speicher wird auch Flash-Speicher genannt.
Eigenschaften:
SSD-Funktionen:
Solid-State-Storage-PCIe-Kartenfunktionen:
Nutzungsszenarien von Solid-State-Speichern
2.2.4 Verwendung von Netzwerkspeicher NAS und SAN
SAN (Strorage Area Network) und NAS (Network-Attached Storage) sind zwei Methoden zum Anschließen externer Dateispeichergeräte an den Server.
SAN:
Das SAN-Gerät ist über Glasfaser mit dem Server verbunden. Der Zugriff auf das Gerät erfolgt über die Blockschnittstelle und der Server kann es als Festplatte verwenden.
Funktionen von SAN:
NAS:
NAS-Geräte nutzen Netzwerkverbindungen und der Zugriff erfolgt über dateibasierte Protokolle wie NFS oder SMB.
2.2.4.1 Szenarien für die Verwendung von Netzwerkspeicher
Geeignet für die Datenbanksicherung.
2.2.4.2 Einschränkungen der Netzwerkleistung
Die Einschränkungen der Netzwerkleistung sind hauptsächlich Latenz und Bandbreite.
2.2.4.3 Der Einfluss des Netzwerks auf die Leistung
2.3 Zusammenfassung
CPU:
Die Größe des Speichers ist wichtig für die Leistung, also machen Sie ihn so groß wie möglich
Kernelbezogene Parameter (/etc/sysctl.conf)
net.core.somaxconn = 65535
net.core.somaxconn = 65535
net.core.netdev_max_backlog=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
、net.ipv4.tcp_tw_recycle = 1
net.core.wmem_default = 87380
、net.core.wmem_max = 16777216
、net.core.r0mem_default = 87380
、net.core.rmem_max = 16777216
net.ipv4.tcp_keepalive_time = 120
、net.ipv4.tcp_keepalive_intvl = 30
、net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time
是表示tcp发送tcp_keepalive探测消息的时间的间隔,单位为秒, 用于确认tcp连接是否有效。net.ipv4.tcp_keepalive_intvl
用于当探测这个tcp连接没有反应后,重新发送探测消息的时间间隔,单位为秒,net.ipv4.tcp_keepalive_probes
表示在认定tcp连接失效之前,需要发送多少个tcp_keepalive探测消息。这三个参数的默认值对于一个平常系统来说稍微有点大了,所以这里分别对它们改为了小了一些。kernel.shmmax = 4294967295
vm.swappiness = 0
free -m
在系统中查看可以看到类似下面的内容,其中swap就是交换分区。当操作系统因为没有足够的内存时就会将一些虚拟内存写到磁盘的交换区中这样就会发生内存交换。增加资源限制(/etc/security/limit.conf)limit.conf
Für einen Port im Abhörstatus verfügt er über eine eigene Abhörwarteschlange. Dieser Parameter bestimmt die maximale Länge der Abhörwarteschlange für jeden Port. Der Standardwert dieses Parameters ist möglicherweise relativ klein, was für große Server nicht ausreicht. Er wird im Allgemeinen auf einen Wert von 2048 oder höher geändert. net.core.netdev_max_backlog=65535
net.ipv4.tcp_max_syn_backlog=65535
Der Backlog-Parameter bestimmt die Anzahl der Datenpakete, die auf jeder Netzwerkschnittstelle empfangen werden. Die maximale Anzahl von Paketen, die an die Warteschlange gesendet werden dürfen, wenn die Rate schneller ist als die des Kernel-Prozessors, und ein weiterer Parameter bestimmt die maximale Anzahl solcher Anfragen, die noch keine Verbindung von der anderen Partei erhalten haben, die beibehalten werden kann die Warteschlange. Verbindungen, die diesen Wert überschreiten, werden möglicherweise verworfen. Erhöhen Sie daher gleichzeitig die Größe. net.ipv4.tcp_fin_timeout = 10
Dieser Parameter wird verwendet, um die Timeout-Zeit des Wartezustands der TCP-Verbindungsverarbeitung zu steuern. Bei Systemen mit relativ häufigen Verbindungen befindet sich normalerweise eine große Anzahl von Verbindungen im Wartezustand. Die Einstellung dieses Parameters dient dazu, die Zeitüberschreitung der Verbindung zu verkürzen und das TCP-Recycling zu beschleunigen. Es gibt auch zwei Parameter, die sich auf TCP-Verbindungen auswirken:
net.ipv4.tcp_tw_reuse = 1
, net.ipv4.tcp_tw_recycle = 1
🎜 Diese drei Parameter sind es hauptsächlich Beschleunigt das TCP-Recycling. Wenn in einem Hochlastsystem die TCP-Verbindung voll ist, tritt ein Datenbankverbindungsfehler von 500 auf. Daher sind diese drei Parameter sehr wichtig. 🎜net.core.wmem_default = 87380
, net.core.wmem_max = 16777216
, net.core.r0mem_default = 87380
, net.core.rmem_max = 16777216
🎜 Die oben genannten 4 Parameter bestimmen die Standard- und Maximalwerte der Empfangs- und Sendepuffergrößen der TCP-Verbindung. Für die Datenbank sollten die Werte dieser Parameter etwas größer angepasst werden. 🎜net.ipv4.tcp_keepalive_time = 120
, net.ipv4.tcp_keepalive_intvl = 30
, net.ipv4.tcp_keepalive_probes = 3
🎜 Die oben genannten drei Parameter werden verwendet, um die Menge der durch fehlgeschlagene Verbindungen belegten TCP-Systemressourcen zu reduzieren und die Effizienz des Ressourcenrecyclings zu beschleunigen. net.ipv4.tcp_keepalive_time
stellt das Zeitintervall dar, in dem TCP tcp_keepalive-Erkennungsnachrichten sendet , in Sekundeneinheiten, wird verwendet, um zu bestätigen, ob die TCP-Verbindung gültig ist. net.ipv4.tcp_keepalive_intvl
wird verwendet, um die Erkennungsnachricht erneut zu senden, nachdem festgestellt wurde, dass die TCP-Verbindung nicht geantwortet hat. Gibt an, wie viele tcp_keepalive-Erkennungsnachrichten gesendet werden müssen, bevor die TCP-Verbindung fehlschlägt. Die Standardwerte dieser drei Parameter sind für ein normales System etwas zu groß, daher werden sie hier auf kleinere Werte geändert. 🎜kernel.shmmax = 4294967295
🎜 Dieser Parameter ist einer der wichtigsten Parameter in den Linux-Kernel-Parametern und wird verwendet, um den Maximalwert eines einzelnen Shared-Memory-Segments zu definieren. 🎜Hinweis: vm.swappiness = 0
🎜 Dieser Parameter hat erhebliche Auswirkungen auf die Leistung, wenn nicht genügend Arbeitsspeicher vorhanden ist. Dieser Parameter weist den Linux-Systemkern an, den Swap-Bereich nicht zu verwenden, es sei denn, der virtuelle Speicher ist vollständig voll. 🎜Linux-Systemspeicher-Swap-Partition: 🎜 Wenn das Linux-System installiert ist, gibt es eine spezielle Festplattenpartition, die System-Swap-Partition genannt wird . Wenn wir free -m
verwenden, um das System anzuzeigen, sehen wir etwas Ähnliches wie das Folgende, wobei swap die Swap-Partition ist. Wenn das Betriebssystem nicht über genügend Speicher verfügt, schreibt es etwas virtuellen Speicher in den Swap-Bereich der Festplatte und es kommt zu einem Speicheraustausch. 🎜 Das vollständige Deaktivieren der Swap-Partition auf dem Linux-System, auf dem sich der MySQL-Dienst befindet, birgt die folgenden zwei Risiken: Ressourcenlimits erhöhen (/ etc/security/limit .conf) 🎜limit.conf
Diese Datei ist eigentlich die Konfigurationsdatei von Linx PAM, dem Plug-in-Authentifizierungsmodul. 🎜 Eine der wichtigeren Parameterkonfigurationen ist die Begrenzung der Anzahl geöffneter Dateien. 🎜🎜🎜 Fazit: Erhöhen Sie die Anzahl der geöffneten Dateien auf 65535, um sicherzustellen, dass genügend Dateihandles geöffnet werden können. 🎜 Hinweis: Änderungen an dieser Datei müssen neu gestartet werden, damit sie wirksam werden. 🎜
Festplattenplanungsrichtlinie (/sys/block/devname/queue/scheduler)
Sie können den Befehl cat /sys/block/sda/queue/scheduler
verwenden, um die von der aktuellen Festplatte verwendete Planungsrichtlinie anzuzeigen . Der folgende noop anticipatory termine [cfq]
ist die standardmäßige cfq-Planungsrichtlinie des Systems. cat /sys/block/sda/queue/scheduler
查看当前磁盘所使用的调度策略。下面的noop anticipatory deadline [cfq]
为系统默认的cfq调度策略。
在MySQL数据库服务下,cfq并不合适,是由于在MySQL工作过程中,cfq会在队列中插入一些不必要的请求,导致很差的响应时间。
除了cfq调度策略,还有以下几种策略:
noop(电梯式调度策略):
deadline(截止时间调度策略):
anticipatory(预料I/O调度策略):
我们可以输入以下命令来改变磁盘的调度策略:echo schedulerName > /sys/block/sda/queue/scheduler
如:echo deadline > /sys/block/sda/queue/scheduler
4 文件系统对性能的影响
推荐使用XFS文件系统,在EXT3和EXT4下需要配置以下参数:
EXT3/4系统的挂载参数(/etc/fstab):
data=writeback | ordered | journal
writeback
表示只有元数据写入到日志,元数据写入和数据写入并不是同步的。这是一种最快的配置,因为InnoDB原本有自己的事务日志,所以通常是InnoDB最好的选择。ordered
只会记录元数据,但提供了一些一致性的保证,在写元数据之前,会先写数据,使它们保持一致,这个选项比writeback
稍微慢一点,但出现崩溃会更加安全。journal
提供了原子日志的行为,在数据写入到最终的日志之前,将记录到日志中。这个选项对于InnoDB显然是没有必要的,也是三种中最慢的一种。noatime
、nodiratime
/dev/sda1/ext4
中的一些配置:noatime,nodiratime,data=writeback 1 1
Unter dem MySQL-Datenbankdienst ist cfq nicht geeignet, da cfq während des Arbeitsprozesses von MySQL einige unnötige Anforderungen in die Warteschlange einfügt, was zu einer schlechten Antwortzeit führt. noop (Aufzugsplanungsstrategie): Frist (Terminplanungsstrategie):
vorausschauend (erwartete E/A-Planungsstrategie):
Wir können den folgenden Befehl eingeben, um die Festplattenplanungsrichtlinie zu ändern: echo SchedulerName > /sys/block/sda/queue/scheduler
For Beispiel: echo Deadline > /sys/block/sda/queue/scheduler
4 Die Auswirkung des Dateisystems auf die Leistung
Es wird empfohlen, das XFS-Dateisystem zu verwenden Konfigurationen sind unter EXT3- und EXT4-Parametern erforderlich:
data=writeback | bestellt |. Dieser Parameter hat drei optionale Werte: <code>writebackCode> bedeutet, dass nur Metadaten in das Protokoll geschrieben werden und das Schreiben von Metadaten und Daten nicht synchronisiert ist. Dies ist die schnellste Konfiguration und normalerweise die beste Wahl für InnoDB, da InnoDB ursprünglich über ein eigenes Transaktionsprotokoll verfügt. <code>ordered
zeichnet nur Metadaten auf, bietet jedoch einige Konsistenzgarantien. Vor dem Schreiben von Metadaten werden die Daten zuerst geschrieben, um sie konsistent zu machen. Diese Option ist etwas langsamer. aber sicherer vor Unfällen. journal
stellt das Verhalten der atomaren Protokollierung bereit, bei der Daten im Protokoll aufgezeichnet werden, bevor sie in das endgültige Protokoll geschrieben werden. Diese Option ist für InnoDB offensichtlich unnötig und die langsamste der drei. 🎜noatime
, nodiratime
🎜 Diese beiden Optionen werden verwendet, um die Zugriffszeit der Datei und den Zeitpunkt des Lesens des Verzeichnisses aufzuzeichnen. Durch das Festlegen dieser beiden Parameter können einige Schreibvorgänge reduziert werden. Das System muss beim Lesen von Dateien und Verzeichnissen keine Schreibvorgänge ausführen, um die oben genannten beiden Zeiten aufzuzeichnen. 🎜 Im Folgenden sind einige Konfigurationen in der Datei /dev/sda1/ext4
aufgeführt: 🎜noatime,nodiratime,data=writeback 1 1
🎜🎜🎜🎜5 MySQL-Architektur 🎜🎜🎜 Die oberste Schicht der Architektur wird als Client bezeichnet. Diese Schicht stellt den Client dar, der über das MySQL-Verbindungsprotokoll wie PHP, JAVA, C API, .Net, ODBC, JDBC usw. eine Verbindung zu MySQL herstellen kann Hier ist diese Ebene nicht nur für die MySQL-Architektur gültig. Die meisten CS-Architekturdienste übernehmen diese Architektur. Diese Schicht übernimmt hauptsächlich einige Funktionen wie Verbindungsverarbeitung, Autorisierungsauthentifizierung und Sicherheit. Jeder mit MySQL verbundene Client hat einen Thread im Serverprozess. Die Abfrage dieser Verbindung wird nur in diesem Thread ausgeführt. Wie bereits erwähnt, verwendet jede Verbindungsabfrage nur einen CPU. 🎜 In der zweiten Schicht dieses Systems befinden sich dann die meisten Kern-MySQL-Dienste in dieser Schicht, wie in der folgenden Abbildung dargestellt. 🎜🎜🎜 Unsere häufig verwendeten DDL- oder DML-Anweisungen werden auf dieser Ebene definiert. Aber wir müssen uns nur eines merken. Alle speicherübergreifenden Engine-Funktionen werden in dieser Schicht implementiert, da diese Schicht auch als Serviceschicht bezeichnet wird. 🎜 Die dritte Schicht unseres Struktursystems ist die Speicher-Engine-Schicht. MySQL ist eine sehr hervorragende Open-Source-Datenbank, die eine Reihe von Speicher-Engine-Schnittstellen definiert. Solange sie die Anforderungen der Speicher-Engine erfüllt, können wir eine MySQL-Datenbank entwickeln . Wählen Sie eine Speicher-Engine, die Ihren Anforderungen vollständig entspricht, wie beispielsweise unsere häufig verwendete InnoDB. Derzeit werden viele Speicher-Engines von MySQL unterstützt, wie in der Abbildung unten dargestellt: 🎜🎜🎜🎜Hinweis🎜: Die Speicher-Engine ist eher für Tabellen gedacht als für Bibliotheken (Verschiedene Tabellen in einer Bibliothek können unterschiedliche Speicher-Engines verwenden) 🎜 Nachfolgend wählen wir einige der am häufigsten verwendeten Speicher-Engines für eine kurze Erklärung aus. Die von MySQL verwendete Speicher-Engine hat einen direkten Einfluss auf die Leistung der Datenbank. Ich hoffe, Sie können einige Funktionen der Speicher-Engine sorgfältig lesen und die Speicher-Engine erst verwenden, wenn Sie fertig sind. 🎜Weitere verwandte kostenlose Lernempfehlungen: MySQL-Tutorial(Video)
Das obige ist der detaillierte Inhalt vonMYSQL Advanced für Big Data Learning. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!