Ereignisse können die Ausführung von SQL-Code einmalig oder in bestimmten Zeitabständen festlegen. Normalerweise werden komplexe SQL-Anweisungen mithilfe gespeicherter Prozeduren gekapselt und dann werden die gespeicherten Prozeduren regelmäßig aufgerufen, um bestimmte Aufgaben abzuschließen. Für Ereignisse ist keine Serververbindung erforderlich, sondern sie werden über einen separaten Ereignisplanungs-Thread initialisiert. Ereignisse haben keine Eingabeparameter und keine Rückgabewerte, denn ohne Verbindung gibt es keine Eingabe oder Ausgabe. Nach der Aktivierung können Sie die ausgeführten Anweisungen über das Serverprotokoll anzeigen, es ist jedoch schwierig herauszufinden, von welchem konkreten Ereignis sie stammen. Sie können auch die Tabelle INFORMATION_SCHEMA.EVENTS abfragen, um den Status eines Ereignisses zu erfahren, beispielsweise den Zeitpunkt seiner letzten Ausführung. Ähnlich wie bei gespeicherten Prozeduren müssen auch bei Ereignissen ähnliche Aspekte berücksichtigt werden. Erstens verursachen Ereignisse zusätzliche Arbeit für den MySQL-Server. Obwohl das Ereignis selbst nur eine geringe Nutzlast aufweist, können die vom Ereignis aufgerufenen SQL-Anweisungen erhebliche Auswirkungen auf die Leistung haben. Darüber hinaus treten bei Ereignissen dieselben Probleme auf wie bei gespeicherten Prozeduren, die durch die anweisungsbasierte Replikation verursacht werden. Gute Anwendungsgebiete für Ereignisse sind Aufgaben wie etwa regelmäßige Wartungsaufgaben, das Neuaufbauen von Caches, die Erstellung von Datenstatistiken und das Speichern von Statuswerten zur Überwachung und Diagnose. Das folgende Beispiel erstellt ein Ereignis, das eine gespeicherte Prozedur aufruft, um jede Woche eine Tabellenoptimierung für eine angegebene Datenbank auszuführen: EREIGNIS ERSTELLEN optimize_somedb PLANMÄSSIG JEDE WOCHE TUN Rufen Sie optimize_tables('somedb') auf; Sie können angeben, ob das Ereignis wiederholt werden soll. In manchen Fällen ist das in Ordnung, in anderen jedoch nicht. Anhand des obigen Beispiels möchten Sie möglicherweise den Befehl OPTIMIZE TABLE auf allen Replikaten ausführen. Es muss jedoch beachtet werden, dass die Leistung des gesamten Servers beeinträchtigt wird, wenn alle Replikate diesen Vorgang gleichzeitig ausführen (z. B. durch Sperren der Tabelle). Darüber hinaus kann die Ausführung periodischer Ereignisse viel Zeit in Anspruch nehmen und es ist sogar möglich, dass ein neues Ereignis ausgeführt wird, bevor das nächste Ereignis abgeschlossen ist. MySQL kann diese Situation nicht verhindern, daher müssen Sie Ihren eigenen Code schreiben, um den gegenseitigen Ausschluss derselben Aufgaben zu implementieren. Dies kann durch die Verwendung von Sperren erreicht werden: EREIGNIS ERSTELLEN optimize_somedb PLANMÄSSIG JEDE WOCHE TUN BEGINNEN DECLARE CONTINUE HANDLER FÜR SQLEXCEPTION ANFANG ENDE; WENN GET_LOCK('somedb', 0) DANN Rufen Sie optimize_tables('some_db') auf; ENDE, WENN; Machen Sie RELEASE_LOCK('somedb'); ENDE Der scheinbar „redundante“ Continue-Handler stellt sicher, dass die Sperre auch dann aufgehoben wird, wenn eine Ausnahme auftritt. Obwohl Ereignisse nichts mit Verbindungen zu tun haben, haben sie doch mit Threads zu tun. Der MySQL-Server verfügt über einen Hauptthread zur Ereignisverteilung, der in der Serverkonfiguration aktiviert werden kann: SETZE GLOBAL event_handler := 1; Sobald dieser Thread aktiviert ist, führt er die im Scheduler angegebenen Ereignisse aus. Sie können das Fehlerprotokoll auf dem Server anzeigen, um Informationen zur Ereignisausführung zu erhalten. Obwohl der Ereignisplaner ein Single-Thread-System ist, können die Ereignisse selbst gleichzeitig ausgeführt werden. Jedes Mal, wenn ein Ereignis ausgeführt wird, erstellt der Server einen neuen Prozess. Innerhalb des Ereignisses können Sie CONNECTION_ID() aufrufen, um einen eindeutigen Wert zu erhalten (auch wenn keine tatsächliche Verbindung besteht). Was tatsächlich zurückgegeben wird, ist die Thread-ID. Prozesse und Threads werden zerstört, nachdem das Ereignis ausgeführt wurde. Sie können es über „SHOW PROCESSLIST“ anzeigen und es wird in der Spalte „Befehl“ als „Verbinden“ angezeigt. Obwohl der Prozess den Thread erstellt, der das Ereignis tatsächlich ausführt, wird der Thread nach Abschluss des Ereignisses zerstört und nicht im Cache abgelegt, sodass der Statuszähler „Threads_created“ keinen Anstieg verzeichnet. Fazit: Im Vergleich zu geplanten Aufgaben auf Anwendungs- oder Betriebssystemebene sind Ereignisse effizienter und kostengünstiger, da kein SQL-Verbindungsaufbauprozess erforderlich ist. Anwendbar auf SQL-Skriptaufgaben, die regelmäßig ausgeführt werden müssen, wie z. B. Datentabellenoptimierung, Generieren statistischer Berichtsdaten usw. Es ist jedoch zu beachten, dass das Ereignis selbst Parallelitätsprobleme aufweisen kann, die durch Sperren gelöst werden können. Wenn ein Ereignis wiederholt ausgeführt werden muss, sollten Sie gleichzeitig keine zu komplexen und zeitaufwändigen Aufgaben ausführen. Oben finden Sie Einzelheiten dazu, wie MySQL Ereignisse verwendet, um geplante Aufgaben abzuschließen. Weitere Informationen dazu, wie MySQL Ereignisse verwendet, um geplante Aufgaben abzuschließen, finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: React Router 5.1.0 verwendet useHistory, um die Seitensprungnavigation zu implementieren
>>: Grafische Schritte zur Zabbix-Überwachung des VMware Exsi-Hosts
Befehl zum Hinzufügen einer Route: 1.Route hinzuf...
Einführung: Manchmal müssen wir zur Entwicklung e...
Das img-Tag in XHTML sollte wie folgt geschrieben...
FireFox ist ein weit verbreiteter Browser mit zah...
Wie kann ich nach dem Bearbeiten einer Datei in L...
Die Funktionen der drei Attribute Flex-Grow, Flex...
Standardmäßig sind MySQL-Zeichentypen nicht case-...
Dokumenthinweise mit dem Attribut show-header <...
Inhaltsverzeichnis Eine Kastanie zum Abdecken Par...
Im Forum fragen Internetnutzer oft: „Kann ich den...
Inhaltsverzeichnis 1. Geben Sie unterschiedliche ...
Vorwort Wenn CSS die Grundfertigkeit der Front-En...
Zunächst können Sie den Unterschied zwischen den ...
Apache Tomcat ist eine Open-Source-Software, die ...
Dieser Artikel dokumentiert die Installation von ...