Ich suche Hilfe, um zu verstehen, was passiert, wenn die folgende Befehlszeile ausgeführt wird:
root@prodn$ service mysqld stop
Ja, der MySQL-Server wird heruntergefahren, sodass der Zugriff darauf erst verfügbar ist, wenn der Dienst erneut gestartet wird. Gibt es jedoch noch etwas, das passiert, wenn der Dienst gestoppt wird? Verzeihen Sie meinen Anfängern hier, aber wenn mysqld neu gestartet wird, bedeutet dies, dass Protokolle geleert, Speicher freigegeben, Caches geleert usw. wurden?
Der Grund, den ich frage, ist der folgende:
Unsere Data Warehouse-Datenbank ist eine MySQL-Datenbank und hat in den letzten 4 Monaten durchschnittlich 8,5 Stunden gedauert.
Letzten Mittwoch habe ich den MySQL-Dienst beendet und ihn nach 30 Minuten neu gestartet. Seitdem stelle ich eine massive Verbesserung der Gesamtleistung fest - SELECT / INSERT / UPDATE / DELETE-Prozesse waren effizienter. DW beendete fast 4 Stunden zuvor mit der gleichen Anzahl von Datenzeilen
Mit jedem Tag werden jedoch 15 bis 20 Minuten zur Zielzeit hinzugefügt. Ich vermute also, dass ich den Dienst wöchentlich neu starten muss.
Gibt es eine Erklärung für dieses Verhalten? Ich weiß nicht, welche anderen Fragen relevant sind, aber es wäre großartig zu wissen, was passiert, wenn der mysqld
Dienst neu gestartet wird.
Kann jemand bitte etwas Licht ins Dunkel bringen?
quelle
Antworten:
Wenn Sie Probleme haben
service mysql stop
, passiert viel mehr als nur das Abschalten von DB Connectivity. Der Link im Kommentar von @ethrbunny erklärt bereits, was passiert.Ich möchte mich auf einen bestimmten Aspekt konzentrieren: den InnoDB-Pufferpool. InnoDB muss die schmutzigen Seiten des InnoDB-Pufferpools leeren. Wenn Sie wissen möchten, wie viel, führen Sie dies vor dem Herunterfahren aus:
Hier erfahren Sie, wie viele Daten aus dem InnoDB-Pufferpool gelöscht werden müssen.
Bitte beachten Sie, dass InnoDB viele bewegliche Teile im Systemtabellenbereich (der Datei
ibdata1
) enthält. Klicken Sie hier, um die bildliche Darstellung der gesamten InnoDB-Infrastruktur anzuzeigen .Einige Transaktionsinformationen sind so geschrieben, dass die Crash-Wiederherstellung beim Ausführen ausgeführt wird
service mysql start
.OPTIONAL
Sie können alle Daten löschen und alle Transaktionen sauber von ibdata1 und den Transaktionsprotokollen (
ib_logfile0
,ib_logfile1
) festschreiben , indem Sie dies ausführenvor dem Laufen
Versuche es !!!
UPDATE 2013-04-24 07:17 EDT
Da Sie MyISAM als Hauptspeicher-Engine haben, geschieht nur das Löschen von Indexänderungen in alle
.MYI
Dateien, für die Änderungen ausstehen.Ich möchte auch empfehlen, dass Sie mysqld beim nächsten Herunterfahren vorher in einer anderen Sitzung ausführen:
und sehen Sie sich die Nachrichten an, die vorbeigehen, und sehen Sie, wie mysqld mit einer Speicher-Engine umgeht. Wenn Sie absolut keine InnoDB-Tabellen verwenden, sollten Sie darüber nachdenken, InnoDB mit zu deaktivieren
Dies führt zu einem schnelleren Start und möglicherweise zu einem schnelleren Herunterfahren.
quelle