Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Tipps für die Bereitstellung von MySQL-Datenbankleistung – Teil Eins

Das Datenbank-Backend wirkt sich auf die Anwendung aus, was wiederum die Unternehmensleistung beeinträchtigen kann. Wenn das passiert, wollen die Verantwortlichen in der Regel eine schnelle Lösung. Es gibt viele verschiedene Möglichkeiten, die Leistung in MySQL zu verbessern. Als sehr beliebte Wahl für viele Organisationen ist es ziemlich üblich, eine MySQL-Installation mit der Standardkonfiguration zu finden. Dies ist jedoch möglicherweise nicht für Ihre Arbeitslast und Ihre Einrichtungsanforderungen geeignet.

In diesem Blog helfen wir Ihnen, Ihre Datenbankarbeitslast und die Dinge, die ihr Schaden zufügen können, besser zu verstehen. Kenntnisse im Umgang mit begrenzten Ressourcen sind für jeden, der die Datenbank verwaltet, unerlässlich, insbesondere wenn Sie Ihr Produktionssystem auf MySQL DB ausführen.

Um sicherzustellen, dass die Datenbank wie erwartet funktioniert, beginnen wir mit den kostenlosen MySQL-Überwachungstools. Wir werden uns dann die zugehörigen MySQL-Parameter ansehen, die Sie optimieren können, um die Datenbankinstanz zu verbessern. Wir werden uns auch die Indizierung als Faktor im Datenbank-Performance-Management ansehen.

Um eine optimale Nutzung der Hardwareressourcen zu erreichen, werfen wir einen Blick auf die Kernel-Optimierung und andere wichtige Betriebssystemeinstellungen. Abschließend schauen wir uns trendige Setups auf Basis von MySQL Replication an und wie diese im Hinblick auf Performance-Lags untersucht werden können.

Identifizieren von MySQL-Leistungsproblemen

Diese Analyse hilft Ihnen, den Zustand und die Leistung Ihrer Datenbank besser zu verstehen. Die unten aufgeführten Tools können dabei helfen, jede Transaktion zu erfassen und zu verstehen, sodass Sie die Leistung und den Ressourcenverbrauch im Auge behalten.

PMM (Percona-Überwachung und -Management)

Das Überwachungs- und Verwaltungstool von Percona ist eine Open-Source-Sammlung von Tools für MySQL-, MongoDB- und MariaDB-Datenbanken (vor Ort oder in der Cloud). PPM kann kostenlos verwendet werden und basiert auf der bekannten Grafana- und Prometheus-Zeitreihen-DB. Es bietet eine gründliche zeitbasierte Analyse für MySQL. Es bietet vorkonfigurierte Dashboards, die helfen, Ihre Datenbank-Workload zu verstehen.

PMM verwendet ein Client/Server-Modell. Sie müssen sowohl den Client als auch den Server herunterladen und installieren. Für den Server können Sie Docker Container verwenden. Es ist so einfach wie das Ziehen des Docker-Images des PMM-Servers, das Erstellen eines Containers und das Starten von PMM.

PMM-Server-Image abrufen

docker pull percona/pmm-server:2

2: Pulling from percona/pmm-server

ab5ef0e58194: Downloading  2.141MB/75.78MB

cbbdeab9a179: Downloading  2.668MB/400.5MB

PMM-Container erstellen

docker create \

   -v /srv \

   --name pmm-data \

   percona/pmm-server:2 /bin/true

Container ausführen

docker run -d \

   -p 80:80 \

   -p 443:443 \

   --volumes-from pmm-data \

   --name pmm-server \

   --restart always \

   percona/pmm-server:2

Sie können auch überprüfen, wie es ohne Installation aussieht. Eine Demo von PMM ist hier verfügbar.

Ein weiteres Tool, das Teil des PMM-Toolsets ist, ist Query Analytics (QAN). Das QAN-Tool behält die Ausführungszeit von Abfragen im Auge. Sie können sogar Details zu SQL-Abfragen abrufen. Es bietet auch eine historische Ansicht der verschiedenen Parameter, die für die optimale Leistung eines MySQL-Datenbankservers entscheidend sind. Dies hilft oft zu verstehen, ob Änderungen im Code Ihre Leistung beeinträchtigen könnten. Beispielsweise wurde ohne Ihr Wissen ein neuer Code eingeführt. Eine einfache Verwendung wäre, aktuelle SQL-Abfragen anzuzeigen und Probleme hervorzuheben, um Ihnen zu helfen, die Leistung Ihrer Datenbank zu verbessern.

PMM bietet zeitpunktbezogene und historische Sichtbarkeit der MySQL-Datenbankleistung. Dashboards können an Ihre spezifischen Anforderungen angepasst werden. Sie können sogar ein bestimmtes Panel erweitern, um die gewünschten Informationen über ein vergangenes Ereignis zu finden.

Kostenlose Datenbanküberwachung mit ClusterControl

ClusterControl bietet eine Echtzeitüberwachung der gesamten Datenbankinfrastruktur. Es unterstützt verschiedene Datenbanksysteme, beginnend mit MySQL, MariaDB, PerconaDB, MySQL NDB Cluster, Galera Cluster (sowohl Percona als auch MariaDB), MongoDB, PostgreSQL und TimescaleDB. Die Überwachungs- und Bereitstellungsmodule können kostenlos verwendet werden.

ClusterControl besteht aus mehreren Modulen. In der kostenlosen ClusterControl Community Edition können wir verwenden:

Leistungsberater bieten spezifische Ratschläge zur Behandlung von Datenbank- und Serverproblemen, wie z B. Leistung, Sicherheit, Protokollverwaltung, Konfiguration und Kapazitätsplanung. Betriebsberichte können verwendet werden, um die Compliance über Hunderte von Instanzen hinweg sicherzustellen. Überwachung ist jedoch nicht Management. ClusterControl verfügt über Funktionen wie Sicherungsverwaltung, automatische Wiederherstellung/Failover, Bereitstellung/Skalierung, fortlaufende Upgrades, Sicherheit/Verschlüsselung, Load-Balancer-Verwaltung und so weiter.

Überwachung &Berater

Die ClusterControl Community Edition bietet eine kostenlose Datenbanküberwachung, die eine einheitliche Ansicht aller Ihrer Bereitstellungen in Rechenzentren bietet und Ihnen ermöglicht, einzelne Knoten aufzuschlüsseln. Ähnlich wie bei PMM können wir Dashboards finden, die auf Echtzeitdaten basieren. Mit hochauflösenden Metriken für eine bessere Genauigkeit, vorkonfigurierten Dashboards und einer breiten Palette von Benachrichtigungsdiensten von Drittanbietern für Warnungen wissen, was gerade passiert.

Lokale und Cloud-Systeme können von einem einzigen Punkt aus überwacht und verwaltet werden . Intelligente Integritätsprüfungen werden für verteilte Topologien implementiert, z. B. Erkennung der Netzwerkpartitionierung durch Nutzung der Ansicht des Load Balancers auf die Datenbankknoten.

ClusterControl Workload Analytics in einer der Überwachungskomponenten, die Ihnen dabei leicht helfen können Verfolgen Sie Ihre Datenbankaktivitäten. Es bietet Klarheit bei Transaktionen/Abfragen von Anwendungen. Leistungsausnahmen werden nie erwartet, aber sie treten auf und sind in einem Meer von Daten leicht zu übersehen. Bei der Ausreißererkennung werden alle Abfragen erfasst, die plötzlich viel langsamer als gewöhnlich ausgeführt werden. Es verfolgt den gleitenden Durchschnitt und die Standardabweichung für Abfrageausführungszeiten und erkennt/warnt, wenn die Differenz zwischen den Werten den Mittelwert um zwei Standardabweichungen überschreitet.

Wie wir aus dem unteren Bild ersehen können, konnten wir einige Abfragen abfangen, die zwischen einem Tag dazu neigen, die Ausführungszeit zu einer bestimmten Zeit zu ändern.

Um ClusterControl zu installieren, klicken Sie hier und laden Sie das Installationsskript herunter. Das Installationsskript kümmert sich um die notwendigen Installationsschritte.

Sie sollten sich auch die ClusterControl-Demo ansehen, um es in Aktion zu sehen.

Sie können auch ein Docker-Image mit ClusterControl erhalten.

$ docker pull severalnines/clustercontrol

Weitere Informationen hierzu finden Sie in diesem Artikel.

Indizierung der MySQL-Datenbank

Ohne einen Index führt die Ausführung derselben Abfrage dazu, dass jede Zeile nach den erforderlichen Daten durchsucht wird. Das Erstellen eines Indexes für ein Feld in einer Tabelle erstellt eine zusätzliche Datenstruktur, bei der es sich um den Feldwert und einen Zeiger auf den Datensatz handelt, auf den er sich bezieht. Mit anderen Worten, die Indizierung erzeugt eine Abkürzung mit viel schnelleren Abfragezeiten für umfangreiche Tabellen. Ohne Index muss MySQL mit der ersten Zeile beginnen und dann die gesamte Tabelle durchlesen, um die relevanten Zeilen zu finden.

Im Allgemeinen funktioniert die Indizierung am besten mit den Spalten, die Gegenstand der WHERE-Klauseln in Ihren häufig ausgeführten Abfragen sind.

Tabellen können mehrere Indizes haben. Die Verwaltung von Indizes erfordert zwangsläufig die Möglichkeit, die vorhandenen Indizes in einer Tabelle aufzulisten. Die Syntax zum Anzeigen eines Index ist unten.

Um Indizes auf MySQL-Tabellen zu prüfen, führen Sie Folgendes aus:

SHOW INDEX FROM table_name;

Da Indizes nur verwendet werden, um die Suche nach einem passenden Feld innerhalb der Datensätze zu beschleunigen, liegt es nahe, dass das Indexieren von Feldern, die nur für die Ausgabe verwendet werden, einfach eine Verschwendung von Speicherplatz wäre. Ein weiterer Nebeneffekt ist, dass Indizes Einfüge- oder Löschvorgänge verlängern können und daher vermieden werden sollten, wenn sie nicht benötigt werden.

Auslagerung von MySQL-Datenbanken

Auf Servern, auf denen MySQL der einzige laufende Dienst ist, empfiehlt es sich, vm.swapiness =1 zu setzen. Die Standardeinstellung ist auf 60 gesetzt, was für ein Datenbanksystem nicht geeignet ist.

vi /etc/sysctl.conf
vm.swappiness = 1

Transparente Riesenseiten

Wenn Sie Ihr MySQL auf RedHat ausführen, vergewissern Sie sich, dass Transparent Huge Pages deaktiviert ist.

Dies kann mit folgendem Befehl überprüft werden:

cat /proc/sys/vm/nr_hugepages
0

(0 bedeutet, dass transparente riesige Seiten deaktiviert sind.)

MySQL-I/O-Scheduler 

In den meisten Distributionen sollten Noop- oder Deadline-I/O-Scheduler standardmäßig aktiviert sein. Um dies zu überprüfen, führen Sie

aus
cat /sys/block/sdb/queue/scheduler 

MySQL-Dateisystemoptionen

Es wird empfohlen, Journaled File Systeme wie xfs, ext4 oder btrfs zu verwenden. MySQL funktioniert gut mit all diesen und die Unterschiede werden eher mit der unterstützten maximalen Dateigröße einhergehen.

  • XFS (maximale Dateisystemgröße 8EB, maximale Dateigröße 8EB)
  • XT4 (maximale Dateisystemgröße 8 EB, maximale Dateigröße 16 TB)
  • BTRFS (maximale Dateisystemgröße 16EB, maximale Dateigröße 16EB)

Die Standard-Dateisystemeinstellungen sollten funktionieren.

NTP-Daemon

Es hat sich bewährt, den NTP-Zeitserver-Dämon auf Datenbankservern zu installieren. Verwenden Sie einen der folgenden Systembefehle.

#Red Hat
yum install ntp
#Debian
sudo apt-get install ntp

Fazit

Das ist alles für Teil eins. Im nächsten Artikel werden wir mit den Betriebssystemeinstellungen von MySQL-Variablen und nützlichen Abfragen fortfahren, um den Status der Datenbankleistung zu erfassen.