Thursday 2 February 2017

Mysql Exponentieller Gleitender Durchschnitt

In meinem letzten Vortrag bei Surge und Percona Live-über adaptive Fehlererkennung (Dias), behauptete ich, dass hartkodierte Schwellenwerte für die Alarmierung über Fehlerzustände sind in der Regel am besten für dynamische oder adaptive Schwellenwerte zu vermeiden. (Ich ging tatsächlich viel weiter als das und sagte, dass es möglich ist, Fehler mit großer Zuversicht in vielen Systemen wie MySQL, ohne Festlegung aller Schwellen zu erkennen.) In diesem Beitrag möchte ich ein wenig mehr über die gleitenden Durchschnitte für die ich verwendet zu erklären Bestimmung des normalen Verhaltens in den Beispielen I gegeben. Es gibt zwei offensichtliche Kandidaten für gleitende Mittelwerte: geradlinige gleitende Mittelwerte und exponentiell gewichtete gleitende Mittelwerte. Ein einfacher gleitender Durchschnitt berechnet lediglich den Mittelwert (Mittelwert) über die letzten N Abtastwerte der Daten. In meinem Fall habe ich 60 Proben verwendet. Dies erfordert das Halten eines Arrays der vorhergehenden N Abtastwerte und das Aktualisieren des Durchschnitts für jeden Abtastwert. Ein exponentieller gleitender Durchschnitt erfordert keine Probenhaltung. Der Durchschnitt ist eine einzelne Zahl und Sie haben einen sogenannten Glättungsfaktor. Für jede neue Probe multiplizieren Sie den alten Durchschnitt mit 1 und fügen Sie ihn dann zu den neuen Sample-Zeiten hinzu: avg: (1-alpha) avg alphasample. Beide Techniken haben ihre Nachteile. Beide erfordern eine Aufwärmperiode, zum Beispiel. Offensichtlich, im Falle eines 60-Probe-Fenster bewegen, benötigen Sie 60 Proben, bevor Sie beginnen können. Der exponentielle gleitende Durchschnitt kann aus dem Mittelwert der ersten 10 Proben, nach meiner Erfahrung, grundiert werden. Beide Techniken hingen auch in gewissem Maße von der Entwicklung der Proben ab. Wenn theres eine drastische Änderung im Muster, nehmen sie eine Weile, um aufzuholen. Heres eine Handlung von einigen realen Daten und die beiden Techniken. Klicken Sie hier, um ein größeres Bild zu sehen. Die blaue Linie ist die abgetastete Daten, die rote Linie ist ein exponentieller gleitender Durchschnitt mit einem durchschnittlichen 60-Sekunden-Speicher, und die gelbe Linie ist ein 60-Sekunden-gleitender Durchschnitt. Beachten Sie, dass die rote Linie dazu neigt, schneller zu korrigieren und dem aktuellen Verhalten der blauen Linie treuer zu bleiben. Dies ist ein Vorteil der exponentiellen gleitenden Durchschnitt, wenn das ist, was Sie wünschen. Es ist nicht in diesen Daten offensichtlich, aber der einfache gleitende Durchschnitt hat einen weiteren Nachteil. Angenommen, es gibt eine Spitze von sehr hohen Werten in den abgetasteten Daten für ein paar Sekunden. Für die nächsten 60 Sekunden wird diese Spitze innerhalb des Fensters sein und den gleitenden Durchschnitt aufblasen. Wenn es aus dem Fenster weggeworfen wird, verursacht es den gleitenden Durchschnitt plötzlich fallen. Ich habe festgestellt, dass dies in einigen Fällen problematisch sein. Sein besonders offensichtlich, wenn youre, das die Standardabweichung der Proben (oder anderer empfindlicher Statistiken) über dem bewegten Fenster berechnet. Der exponentielle gleitende Durchschnitt hat nicht dieses Problem, weil diese Spitze nie aus dem Fenster heraus bewegt. Sein Einfluss ist für immer, aber im Laufe der Zeit, wird es allmählich kleiner, in einer glatten Weise. So erhalten Sie nicht abrupt Spikes im aktuellen Durchschnitt basierend auf, was vor 60 Sekunden passiert. Dies ist nur Kratzer auf der Oberfläche der Techniken Ive erforscht auf einem großen Satz von Tagen bis Wochen von Daten von Zehntausenden von realen Servern. Wie ich Zeit bekomme, Ill versuchen, mehr darüber schreiben in der future. MySQL Foren. Anfänger. Moving Average mit mysql Datum: 2. August 2005 10.14 Wie mache ich ein 3-Monats-Durchschnitt mit Mysql habe ich zerlegt und vereinfacht die SQL-Abfrage auf die folgenden: SELECT b. LastDayOfMonth, (SELECT Avg (t2.SumSumNoOfDaysOpen) FROM t AS t2 WHERE t2.LastDayOfMonth Zwischen DATEADD (b. LastDayOfMonth, INTERVAL 3 Monat) und b. LastDayOfMonth) AS MovingAverageOver3Months FROM t AS b 1146 - Tabelle sql3.b doesnt existieren hier Tabelle Tabelle t LastDayOfMonth SumCountID SumSumNoOfDaysOpen 2003-07- 31 00:00:00 1 70 2003-08-31 00:00:00 0 0 2003-09-30 00:00:00 0 0 2003-10-31 00:00:00 0 0 2003-11-30 00 : 00: 00 2 170 2003-12-31 00:00:00 0 0 2004-01-31 00:00:00 0 0 2004-02-29 00:00:00 2 178 2004-03-31 00:00 : 00 0 0 2004-04-30 00:00:00 2 32 2004-05-31 00:00:00 0 0 2004-06-30 00:00:00 1 98 2004-07-31 00:00:00 0 0 2004-08-31 00:00:00 3 166 2004-09-30 00:00:00 5 388 2004-10-31 00:00:00 3 229 2004-11-30 00:00:00 1 72 2004-12-31 00:00:00 0 0 2005-01-31 00:00:00 2 109 2005-02-28 00:00:00 0 0 2005-03-31 00:00:00 1 126 2005- 04-30 00:00:00 2 231 2005-05-31 00:00:00 0 0 2005-06-30 00:00:00 0 0 2005-07-31 00:00:00 1 139 Zusätzliche Anmerkung: I (Sum (t2.SumSumNoOfDaysOpen)) (sum (t2.SumCountID)), sobald ich diese korrigiert. Exponentielle gleitende Durchschnitt in T-SQL Exponential gleitende Mittelwerte sind ähnlich wie gewichtete gleitende Durchschnittswerte in diesem Sie weisen den Veränderungen vor langer Zeit weniger Gewicht zu und mehr Gewicht auf die jüngsten Veränderungen. Die gewichteten gleitenden Mittelwerte sind linear, aber exponentielle gleitende Mittelwerte sind exponentiell. Das heißt, das Gewicht kann als Kurve ausgedrückt werden: Es gibt eine große Möglichkeit, exponentielle gleitende Mittelwerte in T-SQL zu berechnen, indem Sie ein undokumentiertes Feature über Variablen und laufende Summen in SQL Server verwenden. In diesem Blogpfosten werde ich zeigen, wie man diese Methode verwendet, um exponentiellen gleitenden Durchschnitt in T-SQL zu berechnen, aber ich werde auch eine Methode vorstellen, die Standardfunktionen in SQL Server verwendet. Leider bedeutet das, mit einer Schleife. In den Beispielen werde ich einen 9 Tage exponentiellen gleitenden Durchschnitt berechnen. Die Beispiele verwenden die Datenbank TAdb. Ein Skript zur Erstellung von TAdb finden Sie hier. Exponential Moving Average (EMA): Laufende Totals-Methode Die Theorie hinter den laufenden Total Features in Updates wird ausführlich von Jeff Moden in seinem Artikel Solving the Running Total und Ordinal Rang Probleme beschrieben. Weitere Ressourcen, die diese Methode zur Berechnung von EMA beschreiben, sind der Blogpfosten, der die gleitenden Durchschnitte mit T-SQL von Gabriel Priester berechnet und dem Forumsbeitrag Exponential Moving Average Challenge. Beide auf SQL Server Central. Grundsätzlich können Sie in T-SQL sowohl Variablen als auch Spalten in einer update - Anweisung aktualisieren. Die Aktualisierungen werden Zeile für Zeile intern von SQL Server ausgeführt. Dieses Zeilen-für-Zeile-Verhalten macht die Berechnung einer laufenden Summe möglich. Dieses Beispiel zeigt, wie es funktioniert: Beachten Sie, dass 8220ColumnRunningTotal8221 eine laufende Summe von 8220ColumnToSum8221 ist. Mit dieser Methode können wir EMA9 mit diesem T-SQL berechnen: Die Berechnung von EMA ist recht einfach. Wir verwenden die aktuelle Zeile und die vorherige, aber mit mehr Gewicht auf die aktuelle Zeile. Das Gewicht wird nach der Formel 2 (19) berechnet, wobei 822098221 der Parameter für die Länge der EMA ist. Zur Berechnung von EMA9 für Zeile 10 oben ist die Berechnung: In diesem Fall erhält die aktuelle Zeile 20 des Gewichts (2 (19) 0,2) und die vorherige Zeile erhält 80 des Gewichts (1-2 (19) 0,8). Sie finden diese Berechnung in der Anweisung oben in der CASE-Anweisung: Exponential Moving Average (EMA): Looping-Methode Soweit ich weiß, mit Ausnahme der laufenden Summenmethode oben skizziert, gibt es keine Möglichkeit, EMA mit einer setbasierten SQL-Anweisung zu berechnen . Daher verwendet die T-SQL unten eine while-Schleife, um EMA9 zu berechnen: Die Ergebnisse sind die gleichen wie in den laufenden Summen Beispiel oben. Leistung Wie erwartet, ist die set based running sumals-Version viel schneller als die Loop-Version. Auf meiner Maschine lag die setbasierte Lösung bei ca. 300 ms, verglichen mit ca. 1200 bei der Loop-Version. Die Schleifenversion entspricht jedoch mehr den SQL-Standards. Also die Wahl zwischen den Methoden hängt von what8217s am wichtigsten für Sie, Leistung oder Standards. Der exponentielle gleitende Durchschnitt kann in der Trendanalyse verwendet werden, wie bei den anderen Arten von gleitenden Durchschnitten, dem Simple Moving Average (SMA) und dem gewichteten gleitenden Durchschnitt (WMA). Es gibt auch andere Berechnungen in der technischen Analyse, die die EMA, MACD zum Beispiel verwendet. Dieser Blog-Beitrag ist Teil einer Serie über technische Analyse, TA, in SQL Server. Siehe die anderen Beiträge hier. Geschrieben von Tomas Lind Tomas Lind - Consulting als SQL Server DBA und Datenbankentwickler bei High Coast Database Solutions AB.


No comments:

Post a Comment