Wir werden die Arbeit von Zabbix mit der TimescaleDB-Datenbank als Backend betrachten. Wir zeigen, wie man sie von Grund auf startet und wie man von PostgreSQL migriert. AuĂerdem werden wir vergleichende Leistungstests der beiden Konfigurationen anstellen.

HighLoad++ Sibirien 2019. Raum âTomskâ. 24. Juni, 16:00. Thesen und . Die nĂ€chste HighLoad++-Konferenz findet am 6. und 7. April 2020 in St. Petersburg statt. Details und Tickets .
Andrei GuĆĄÄin (im Folgenden â AG): â Ich bin Ingenieur im technischen Support von ZABBIX (im Folgenden â âZabbixâ), Trainer. Ich arbeite seit ĂŒber 6 Jahren im technischen Support und hatte direkten Kontakt mit der Leistung. Heute werde ich ĂŒber die Leistung sprechen, die TimescaleDB im Vergleich zu herkömmlichem PostgreSQL 10 bieten kann. Auch ein gewisser einfĂŒhrender Teil â darĂŒber, wie es ĂŒberhaupt funktioniert.
Die gröĂten Herausforderungen in der Leistung: von der Datensammlung bis zur Datenbereinigung
Beginnen wir damit, dass es bestimmte Leistungsherausforderungen gibt, denen jedes Ăberwachungssystem gegenĂŒbersteht. Die erste Herausforderung der Leistung besteht darin, Daten schnell zu sammeln und zu verarbeiten.

Ein gutes Ăberwachungssystem sollte schnell und rechtzeitig alle Daten erfassen, sie gemÀà den TriggerausdrĂŒcken verarbeiten, das heiĂt nach bestimmten Kriterien (in verschiedenen Systemen ist dies unterschiedlich) und in der Datenbank speichern, um diese Daten spĂ€ter zu verwenden.

Die zweite Herausforderung der Leistung besteht darin, die Historie zu speichern. Die Daten in der Datenbank zu speichern und schnellen sowie bequemen Zugriff auf diese Metriken zu haben, die ĂŒber einen bestimmten Zeitraum gesammelt wurden. Am wichtigsten ist, dass diese Daten leicht abrufbar sind und fĂŒr Berichte, Grafiken, Trigger, Schwellenwerte fĂŒr Benachrichtigungen usw. verwendet werden können.

Die dritte Herausforderung der Leistung besteht darin, die Historie zu bereinigen, das heiĂt, wenn der Tag kommt, an dem Sie bestimmte detaillierte Metriken, die ĂŒber 5 Jahre gesammelt wurden (sogar Monate oder zwei Monate), nicht mehr speichern mĂŒssen. Einige Knoten im Netzwerk wurden gelöscht oder einige Hosts sind nicht mehr erforderlich, da die Metriken veraltet sind und nicht mehr gesammelt werden. All dies muss gereinigt werden, damit Ihre Datenbank nicht auf eine groĂe GröĂe anwĂ€chst. Und im Allgemeinen ist die Bereinigung der Historie oft eine ernsthafte PrĂŒfung fĂŒr den Speicher â sie wirkt sich oft erheblich auf die Leistung aus.
Wie lösen wir die Probleme mit dem Caching?
Ich werde jetzt konkret ĂŒber «Zabbix» sprechen. In «Zabbix» werden die ersten und zweiten Aufrufe durch Caching gelöst.

Datensammlung und -verarbeitung â wir verwenden den Arbeitsspeicher, um all diese Daten zu speichern. Jetzt wird ĂŒber diese Daten genauer berichtet.
Auch auf der Seite der Datenbank gibt es ein gewisses Caching fĂŒr grundlegende Abfragen â fĂŒr Diagramme und andere Dinge.
Caching auf der Seite des Zabbix-Servers: Wir haben ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Was ist das?

ConfigurationCache ist der Hauptcache, in dem wir Metriken, Hosts, Datenelemente, Trigger speichern; alles, was fĂŒr die Verarbeitung von Preprocessing, Datensammlung benötigt wird, von welchen Hosts gesammelt werden soll und in welcher HĂ€ufigkeit. All dies wird im ConfigurationCache gespeichert, um nicht immer auf die Datenbank zugreifen und ĂŒberflĂŒssige Anfragen erstellen zu mĂŒssen. Nach dem Start des Servers aktualisieren wir diesen Cache (erstellen ihn) und aktualisieren ihn regelmĂ€Ăig (je nach Konfigurationseinstellungen).

Caching in Zabbix. Datensammlung
Hier ist das Schema ausreichend groĂ:

Die Hauptakteure im Schema sind diese Sammler:

Das sind die eigentlichen Sammelprozesse, verschiedene «Poller», die fĂŒr unterschiedliche Arten von Abfragen verantwortlich sind. Sie sammeln Daten ĂŒber ICMP, IPMI, verschiedene Protokolle und leiten alles an das Preprocessing weiter.
PreProcessing HistoryCache
AuĂerdem, wenn wir berechnete Datenelemente haben (wer mit «Zabbix» vertraut ist, weiĂ das), gibt es berechnete, aggregierte Datenelemente â wir beziehen sie direkt aus dem ValueCache. Wie er gefĂŒllt wird, werde ich spĂ€ter erlĂ€utern. Alle diese Sammler nutzen ConfigurationCache, um ihre Aufgaben zu erhalten, und leiten sie dann zum Preprocessing weiter.

Das Preprocessing nutzt ebenfalls ConfigurationCache, um die Schritte zu erhalten, bearbeitet diese Daten auf vielfĂ€ltige Weise. Seit Version 4.2 wurde es auf einen Proxy ausgelagert. Das ist sehr praktisch, da das Preprocessing selbst eine recht anspruchsvolle Aufgabe ist. Und wenn Sie ein sehr groĂes «Zabbix» mit einer groĂen Anzahl von Datenelementen und einer hohen Abfragerate haben, erleichtert das die Arbeit erheblich.
Dementsprechend, nachdem wir diese Daten auf irgendeine Weise mit Hilfe des Preprocessings bearbeitet haben, speichern wir sie im HistoryCache, um sie weiter zu verarbeiten. Damit endet die Datensammlung. Wir kommen zum Hauptprozess.
Arbeit des History Syncers

Der wichtigste Prozess in âZabbixâ (da es sich um eine monolithische Architektur handelt) ist der History Syncer. Dies ist der Hauptprozess, der sich mit der atomaren Verarbeitung jedes Datenelements beschĂ€ftigt, also jedes Wertes.
- ein Wert kommt (er entnimmt ihn aus dem HistoryCache);
- ĂŒberprĂŒft im Configuration Syncer: Gibt es Trigger fĂŒr Berechnungen â er berechnet sie;
wenn ja â erstellt er Ereignisse, erstellt eine Eskalation, um eine Benachrichtigung zu erzeugen, wenn dies gemÀà der Konfiguration erforderlich ist; - speichert Trigger fĂŒr die spĂ€tere Verarbeitung, Aggregation; wenn Sie aggregieren, z. B. in der letzten Stunde, merkt sich dieser Wert den ValueCache, um nicht auf die Historientabelle zugreifen zu mĂŒssen; so wird der ValueCache mit den notwendigen Daten gefĂŒllt, die zur Berechnung der Trigger, der berechneten Elemente usw. benötigt werden;
- darĂŒber hinaus speichert der History Syncer alle Daten in der Datenbank;
- die Datenbank schreibt sie auf die Festplatte â damit endet der Verarbeitungsprozess.
Datenbanken. Caching
Auf der Datenbankseite, wenn Sie Grafiken oder Berichte ĂŒber Ereignisse sehen möchten, gibt es verschiedene Caches. Aber im Rahmen dieses Vortrags werde ich nicht darĂŒber sprechen.
FĂŒr MySQL gibt es den Innodb_buffer_pool und eine Menge anderer Caches, die ebenfalls konfiguriert werden können.
Aber das sind die Hauptsachen:
- shared_buffers;
- effective_cache_size;
- shared_pool.

Ich habe fĂŒr alle Datenbanken aufgefĂŒhrt, dass es bestimmte Caches gibt, die es ermöglichen, die hĂ€ufig benötigten Daten im Arbeitsspeicher zu halten. Dort haben sie ihre eigenen Technologien dafĂŒr.
Zur Datenbankleistung
Dementsprechend gibt es ein wettbewerbsfĂ€higes Umfeld, das heiĂt, der âZabbixâ-Server sammelt Daten und schreibt sie. Beim Neustart liest er ebenfalls aus der Historie, um den ValueCache zu fĂŒllen usw. Gleichzeitig können Sie Skripte und Berichte haben, die die âZabbixâ-API verwenden, die auf der webbasierten BenutzeroberflĂ€che basiert. Die âZabbixâ-API greift auf die Datenbank zu und erhĂ€lt die benötigten Daten fĂŒr Grafiken, Berichte oder eine Liste von Ereignissen, den letzten Problemen.

Auch eine sehr beliebte Lösung zur Visualisierung ist Grafana, die von unseren Nutzern verwendet wird. Es kann sowohl direkt ĂŒber die âZabbixâ-API als auch ĂŒber die Datenbank eingreifen. Es schafft ebenfalls einen gewissen Wettbewerb um den Datenzugriff: Eine feinere, gute Datenbankkonfiguration ist erforderlich, um schnelle Ergebnisse und Tests zu gewĂ€hrleisten.

Geschichte löschen. In Zabbix gibt es den Housekeeper
Ein dritter Aufruf, der in "Zabbix" verwendet wird, ist das Löschen der Geschichte mithilfe des Housekeepers. Der "Housekeeper" beachtet alle Einstellungen, das heiĂt, in unseren Datenelementen ist angegeben, wie lange (in Tagen) die Daten gespeichert werden sollen, wie lange Trends und Ănderungsdynamiken gespeichert werden.
Ich habe nichts ĂŒber den TrendCache gesagt, den wir in Echtzeit berechnen: Daten kommen herein, wir aggregieren sie ĂŒber eine Stunde (hauptsĂ€chlich handelt es sich um Zahlen der letzten Stunde), die durchschnittliche/minimale Anzahl und schreiben dies einmal pro Stunde in die Ănderungsdynamikstabelle ("Trends"). Der "Housekeeper" wird gestartet und löscht die Daten mit normalen Selects aus der DB, was nicht immer effizient ist.
Wie erkennt man, dass das ineffizient ist? Sie können in den Performancegrafiken der internen Prozesse folgendes Bild sehen:

Ihr History syncer ist stÀndig beschÀftigt (rote Grafik). Und die "orange" Linie, die oben verlÀuft, ist der "Housekeeper", der gestartet wird und darauf wartet, dass die DB alle Zeilen löscht, die er festgelegt hat.
Nehmen wir eine beliebige Item-ID: Die letzten 5000 mĂŒssen gelöscht werden; natĂŒrlich nach Indizes. Aber normalerweise ist das Dataset recht groĂ â die Datenbank liest dies trotzdem von der Festplatte und hebt es in den Cache, und das ist eine sehr kostspielige Operation fĂŒr die DB. Je nach GröĂe kann dies zu bestimmten Performanceproblemen fĂŒhren.
Der "Housekeeper" lĂ€sst sich einfach deaktivieren â wir haben die allen bekannten WeboberflĂ€che. Die Einstellung in der Administration general (Einstellungen fĂŒr den "Housekeeper") deaktiviert das interne Housekeeping fĂŒr die interne Geschichte und die Trends. Folglich verwaltet der "Housekeeper" dies nicht mehr:

Was kann man als NÀchstes tun? Sie haben ihn deaktiviert, Ihre Grafiken haben sich eingependelt... Welche Probleme können in diesem Fall noch auftreten? Was kann helfen?
Partitionierung
Normalerweise wird dies auf jeder relationalen Datenbank, die ich aufgezĂ€hlt habe, auf unterschiedliche Weise eingerichtet. MySQL hat seine eigene Technologie. Aber insgesamt sind sie sehr Ă€hnlich, wenn wir ĂŒber PostgreSQL 10 und MySQL sprechen. NatĂŒrlich gibt es viele interne Unterschiede, wie das alles umgesetzt wird und wie sich das auf die Performance auswirkt. Aber insgesamt fĂŒhrt das Anlegen einer neuen Partition oft ebenfalls zu bestimmten Problemen.

Je nach Ihrem Setup (wie viele Daten Sie an einem Tag generieren) wird normalerweise das Minimum festgelegt â das sind 1 Tag/Partition, und fĂŒr âTrendsâ, VerĂ€nderungen â 1 Monat/neue Partition. Dies kann sich Ă€ndern, wenn Ihr Setup sehr groĂ ist.
Lassen Sie mich gleich zu den GröĂen des Setups sagen: Bis zu 5.000 neue Werte pro Sekunde (nvps, wie man so schön sagt) gelten als kleines âSetupâ. MittelgroĂ sind 5 bis 25 Tausend Werte pro Sekunde. Alles darĂŒber hinaus ist bereits groĂe und sehr groĂe Installationen, die eine sehr sorgfĂ€ltige Datenbankkonfiguration erfordern.
Bei sehr groĂen Installationen ist 1 Tag möglicherweise nicht optimal. Ich habe persönlich auf MySQL Partitionen von 40 Gigabyte pro Tag (und mehr) gesehen. Dies ist ein sehr groĂes Datenvolumen, das zu Problemen fĂŒhren kann. Es muss reduziert werden.
Warum ist Partitionierung notwendig?
Was Partitionierung bietet, denke ich, wissen alle â das ist die Zerlegung von Tabellen. Oft sind das separate Dateien auf der Festplatte und span-abfragen. Es wĂ€hlt eine Partition optimaler aus, wenn es in die normale Partitionierung passt.

FĂŒr âZabbixâ wird insbesondere nach Reichweite, das heiĂt nach Zeitstempel (eine gewöhnliche Zahl, Zeit seit Beginn der Epoche) partitioniert. Sie setzen den Beginn des Tages/Ende des Tages, und dies bildet die Partition. Entsprechend, wenn Sie auf Daten von vor zwei Tagen zugreifen, wird alles schneller aus der Datenbank abgerufen, weil nur eine Datei in den Cache geladen und ausgegeben werden muss (nicht eine groĂe Tabelle).

Viele DBs arbeiten auch bei Inserts (EinfĂŒgungen in eine Child-Tabelle) schneller. WĂ€hrend ich abstrakt spreche, ist das auch möglich. Partitionierung hilft oft.
Elasticsearch fĂŒr NoSQL
Neu in 3.4 haben wir eine Lösung fĂŒr NoSQL implementiert. Wir haben die Möglichkeit hinzugefĂŒgt, in Elasticsearch zu schreiben. Sie können bestimmte Typen wĂ€hlen: entweder Zahlen oder bestimmte Zeichen; wir haben String-Text, Logs können Sie in Elasticsearch schreiben⊠Entsprechend wird das Web-Interface auch auf Elasticsearch zugreifen. Das funktioniert in manchen FĂ€llen hervorragend, kann aber momentan genutzt werden.

TimescaleDB. Hypertabellen
FĂŒr 4.4.2 haben wir auf eine Sache geachtet, wie TimescaleDB. Was ist das? Es ist eine Erweiterung fĂŒr PostgreSQL, das bedeutet, es hat eine native PostgreSQL-Schnittstelle. DarĂŒber hinaus ermöglicht diese Erweiterung eine viel effizientere Arbeit mit Zeitserien-Daten und hat ein automatisches Partionierungssystem. So sieht das aus:

Das ist ein Hypertable â ein Konzept in Timescale. Das ist die Hypertabelle, die Sie erstellen, und darin befinden sich Chunks. Chunks sind Partitionen, dies sind Kind-Tabellen, wenn ich mich nicht irre. Das ist wirklich effizient.

TimescaleDB und PostgreSQL
Die Hersteller von TimescaleDB versichern, dass sie einen besseren Algorithmus zur Bearbeitung von Anfragen verwenden, insbesondere von Inserts, der es ermöglicht, eine nahezu konstante Leistung bei wachsendem Datensatzvolumen zu gewĂ€hrleisten. Nach 200 Millionen Zeilen beginnt ein gewöhnliches PostgreSQL-System, erheblich langsamer zu werden und verliert seine Leistung fast auf null, wĂ€hrend Timescale es ermöglicht, Inserts so effizient wie möglich bei beliebiger Datenmenge einzufĂŒgen.

Wie installiere ich TimescaleDB? Ganz einfach!
In der Dokumentation gibt es es, es ist beschrieben â Sie können es aus den Paketen fĂŒr alle installieren⊠Es hĂ€ngt von den offiziellen PostgreSQL-Paketen ab. Man kann es manuell kompilieren. So kam es, dass ich fĂŒr die Datenbank kompilieren musste.

In Zabbix aktivieren wir einfach die Extension. Ich denke, dass diejenigen, die die Extension in PostgreSQL verwendet haben⊠Sie aktivieren einfach die Extension, erstellen sie fĂŒr die Zabbix-Datenbank, die Sie nutzen.
Und der letzte SchrittâŠ
TimescaleDB. Migration von Historientabellen
Sie mĂŒssen einen Hypertable erstellen. DafĂŒr gibt es eine spezielle Funktion â Create hypertable. Im ersten Parameter geben Sie die Tabelle an, die in dieser Datenbank benötigt wird (fĂŒr die die Hypertabelle erstellt werden soll).

Feld, nach dem erstellt werden soll, und chunk_time_interval (dies ist der Chunk-Zeitintervall (Partitionen, die verwendet werden sollen). 86.400 â das ist ein Tag.
Parameter migrate_data: Wenn Sie ihn auf true setzen, werden alle aktuellen Daten in die zuvor erstellten Chunks verschoben.
Ich habe selbst migrate_data verwendet â es dauert eine betrĂ€chtliche Zeit, je nach GröĂe Ihrer Datenbank. Ich hatte mehr als ein Terabyte â die Erstellung dauerte mehr als eine Stunde. In einigen FĂ€llen habe ich wĂ€hrend der Tests historische Daten fĂŒr den Text (history_text) und den String (history_str) gelöscht, um sie nicht zu ĂŒbertragen â sie waren mir tatsĂ€chlich nicht interessant.
Und das letzte Update nehmen wir in unserer db_extension vor: Wir installieren TimescaleDB, damit die DB und insbesondere unser âZabbixâ verstehen, dass es eine db_extension gibt. Diese aktiviert es und verwendet die Syntax und Abfragen zur DB korrekt, indem es die bereits erforderlichen âFeaturesâ fĂŒr TimescaleDB nutzt.
Serverkonfiguration
Ich habe zwei Server verwendet. Der erste Server ist eine ziemlich kleine virtuelle Maschine mit 20 Prozessoren und 16 Gigabyte RAM. Ich habe darauf PostgreSQL 10.8 eingerichtet:

Das Betriebssystem war Debian, das Dateisystem â xfs. Ich habe minimale Einstellungen vorgenommen, um genau diese Datenbank zu verwenden, abgesehen davon, dass auch âZabbixâ selbst verwendet wird. Auf demselben Rechner waren der âZabbixâ-Server, PostgreSQL und Lastagenten installiert.

Ich habe 50 aktive Agenten verwendet, die LoadableModule nutzen, um schnell verschiedene Ergebnisse zu generieren. Diese erzeugten Zeilen, Zahlen und so weiter. Ich habe die DB mit einer groĂen Menge Daten gefĂŒllt. Die anfĂ€ngliche Konfiguration umfasste 5.000 Datenelemente pro Host, und ungefĂ€hr jedes Datenelement hatte einen Trigger â um eine reale Konfiguration zu erstellen. Manchmal ist sogar mehr als ein Trigger erforderlich.

Ich habe das Update-Intervall geregelt, indem ich nicht nur 50 Agenten verwendet habe (ich habe weitere hinzugefĂŒgt), sondern auch mit Hilfe dynamischer Datenelemente und das Update-Intervall auf 4 Sekunden reduziert.
Leistungstest. PostgreSQL: 36.000 NVPs
Der erste Lauf, die erste Konfiguration war auf einer reinen PostgreSQL 10-Installation auf dieser Hardware (35.000 Werte pro Sekunde). Im Allgemeinen, wie auf dem Bildschirm sichtbar, dauert das EinfĂŒgen von Daten Bruchteile einer Sekunde â alles lĂ€uft gut und schnell, SSD-Festplatten (200 Gigabyte). Das Einzige, was ist, dass 20 GB ziemlich schnell gefĂŒllt werden.

Es wird weiterhin viele solcher Diagramme geben. Dies ist das Standard-Dashboard fĂŒr die Leistung des âZabbixâ-Servers.

Das erste Diagramm â die Anzahl der Werte pro Sekunde (blau, oben links), 35.000 Werte in diesem Fall. Dies (oben in der Mitte) ist die Auslastung der Sammlungsprozesse, und dies (oben rechts) ist die Auslastung der internen Prozesse: History Syncers und Housekeeper, der hier (unten in der Mitte) eine betrĂ€chtliche Zeit in Anspruch nahm.
Dieses Diagramm (unten in der Mitte) zeigt die Nutzung des ValueCache â wie viele ValueCache-Treffer fĂŒr Trigger (einige tausend Werte pro Sekunde). Ein weiteres wichtiges Diagramm ist das vierte (unten links), das die Nutzung des HistoryCache zeigt, von dem ich gesprochen habe, der ein Puffer vor dem EinfĂŒgen in die DB ist.
Leistungstest. PostgreSQL: 50 Tausend NVPs
Danach habe ich die Belastung auf 50 Tausend Werte pro Sekunde auf derselben Hardware erhöht. Beim Laden mit dem âHauskeeperâ wurden 10 Tausend Werte bereits in 2-3 Sekunden mit Berechnung geschrieben. Das wird im nĂ€chsten Screenshot gezeigt:

Der âHauskeeperâ fĂ€ngt an, die Arbeit zu stören, aber insgesamt liegt die Auslastung der History-Sync-Server noch bei 60 % (drittes Diagramm, oben rechts). Der HistoryCache beginnt wĂ€hrend der Arbeit des âHauskeepersâ aktiv gefĂŒllt zu werden (unten links). Er lag bei etwa einem halben Gigabyte und fĂŒllte sich um 20%.

Leistungstest. PostgreSQL: 80 Tausend NVPs
Ich habe die Belastung auf 80 Tausend Werte pro Sekunde erhöht:

Das waren etwa 400 Tausend Datenelemente, 280 Tausend Trigger. Wie Sie sehen können, war die EinfĂŒgebelastung der History-Sync-Server (es gab 30 StĂŒck) bereits ziemlich hoch. Danach habe ich verschiedene Parameter erhöht: History-Sync-Server, Cache... Auf dieser Hardware begann die Auslastung der History-Sync-Server, sich dem Maximum zu nĂ€hern, praktisch âin die Höheâ â entsprechend stieg die Auslastung des HistoryCache sehr stark an:

WĂ€hrend dieser ganzen Zeit habe ich alle Systemparameter ĂŒberwacht (wie CPU und RAM genutzt werden) und festgestellt, dass die Festplattenauslastung maximal war â ich hatte die maximale KapazitĂ€t dieser Festplatte auf dieser Hardware, auf dieser virtuellen Maschine, erreicht. PostgreSQL begann bei solcher IntensitĂ€t, Daten ziemlich aktiv abzulehnen, und die Festplatte konnte nicht schnell genug schreiben und lesen...

Ich habe einen anderen Server genommen, der bereits 48 Prozessoren und 128 Gigabyte RAM hatte:

AuĂerdem habe ich ihn âaufgerĂŒstetâ â ich habe 60 History-Sync-Server installiert und eine akzeptable Leistung erreicht. TatsĂ€chlich sind wir nicht âin die Höheâ, aber das ist wahrscheinlich schon das Leistungslimit, wo man damit etwas unternehmen muss.
Leistungstest. TimescaleDB: 80 Tausend NVPs
Ich hatte die Hauptaufgabe â TimescaleDB zu nutzen. In jedem Diagramm ist ein Einbruch zu sehen:

Diese AusfĂ€lle entsprechen genau der Migration von Daten. Danach hat sich das Profil des History-Sinkers auf dem 'Zabbix'-Server, wie Sie sehen, deutlich verĂ€ndert. Es erlaubt, Daten fast dreimal schneller einzufĂŒgen und benötigt weniger HistoryCache â entsprechend werden Ihnen die Daten rechtzeitig bereitgestellt. Wieder einmal: 80.000 Werte pro Sekunde â das ist eine ziemlich hohe Rate (natĂŒrlich nicht fĂŒr 'Yandex'). Insgesamt handelt es sich um ein recht groĂes Setup mit einem Server.
Leistungstest von PostgreSQL: 120.000 NVPs
Dann habe ich die Anzahl der Datenelemente auf eine halbe Million erhöht und einen berechneten Wert von 125.000 pro Sekunde erhalten:

Und ich habe solche Grafiken erhalten:

Im Prinzip ist dies ein funktionierendes Setup, es kann eine recht lange Zeit arbeiten. Aber da ich nur eine Festplatte mit 1,5 Terabyte hatte, habe ich sie in ein paar Tagen verbraucht. Das Wichtigste ist, dass zur gleichen Zeit neue Partitionen auf TimescaleDB erstellt wurden und das fĂŒr die Leistung vollkommen unauffĂ€llig war, was man von MySQL nicht sagen kann.
Normalerweise werden Partitionen nachts erstellt, da dies das EinfĂŒgen und die Arbeit mit Tabellen insgesamt blockiert und zu einer Verschlechterung des Services fĂŒhren kann. In diesem Fall ist das nicht der Fall! Die Hauptaufgabe war es â die Möglichkeiten von TimescaleDB zu ĂŒberprĂŒfen. Es ergab sich eine Zahl von 120.000 Werten pro Sekunde.
Es gibt auch Beispiele in der 'Community':

Eine Person hat ebenfalls TimescaleDB aktiviert und die Belastung durch die Verwendung von io.weight ist auf dem Prozessor gesunken; auch die Nutzung interner Prozesse wurde durch die Aktivierung von TimescaleDB verringert. Dabei handelt es sich um normale HDDs, also um eine normale virtuelle Maschine auf normalen Festplatten (nicht SSD)!
FĂŒr einige kleine Setups, die an der Leistung der Festplatte scheitern, scheint mir TimescaleDB eine sehr gute Lösung zu sein. Es wird es recht gut ermöglichen, bis zur Migration auf schnellere Hardware fĂŒr die Datenbank weiter zu arbeiten.
Ich lade Sie alle zu unseren Veranstaltungen ein: Conference â in Moskau, Summit â in Riga. Nutzen Sie unsere KanĂ€le â 'Telegram', Forum, IRC. Wenn Sie Fragen haben â kommen Sie zu unserem Stand, wir können ĂŒber alles sprechen.
Fragen aus dem Publikum
Frage aus dem Publikum (im Folgenden â A): â Wenn TimescaleDB so einfach einzurichten ist und so viel Leistungsteigerung bietet, wĂ€re es dann vielleicht eine gute Idee, dies als beste Praxis fĂŒr die Einrichtung von "Zabbix" mit "Postgres" zu verwenden? Gibt es irgendwelche potenziellen Fallen oder Nachteile dieser Lösung, oder kann ich, wenn ich mich fĂŒr "Zabbix" entschieden habe, beruhigt "Postgres" nehmen, direkt "Timescale" installieren, es nutzen und mir keine Sorgen um irgendwelche Probleme machen?

AG: â Ja, ich wĂŒrde sagen, dass dies eine gute Empfehlung ist: Verwenden Sie "Postgres" gleich mit der Erweiterung TimescaleDB. Wie ich bereits erwĂ€hnt habe, gibt es viele gute RĂŒckmeldungen, obwohl dieses "Feature" experimentell ist. Aber die Tests zeigen tatsĂ€chlich, dass es eine hervorragende Lösung (mit TimescaleDB) ist, und ich denke, dass es sich weiterentwickeln wird! Wir beobachten, wie sich diese Erweiterung entwickelt, und werden anpassen, was notwendig ist.
Selbst wĂ€hrend der Entwicklung haben wir uns auf eines ihrer bekannten "Features" gestĂŒtzt: dort konnte man mit Chunks etwas anders arbeiten. Aber dann haben sie es in der nĂ€chsten Version entfernt, und wir mussten uns nicht mehr auf diesen Code stĂŒtzen. Ich wĂŒrde empfehlen, diese Lösung in vielen Setups zu verwenden. Wenn Sie MySQL verwenden... FĂŒr mittlere Setups funktioniert jede Lösung ganz gut.
A: â In den letzten Diagrammen, die von der Community stammen, gab es ein Diagramm mit "Housekeeping":

Es hat weiter funktioniert. Was macht "Housekeeping" im Fall von TimescaleDB?
AG: â Im Moment kann ich das nicht genau sagen â ich werde den Code anschauen und genauer darauf eingehen. Es verwendet Anfragen von TimescaleDB nicht zum Löschen von Chunks, sondern aggregiert irgendwie. Ich bin nicht bereit, diese technische Frage jetzt zu beantworten. Wir werden es heute oder morgen am Stand klĂ€ren.
A: â Ich habe eine Ă€hnliche Frage â zur Leistung der Löschoperation in "Timescale".
A (Antwort aus dem Publikum): â Wenn Sie Daten aus einer Tabelle löschen, und wenn Sie das ĂŒber delete tun, mĂŒssen Sie die Tabelle durchgehen â löschen, aufrĂ€umen, alles fĂŒr die zukĂŒnftige Vakuumierung markieren. In "Timescale" können Sie, da Sie Chunks haben, diese einfach entsorgen. Grob gesagt, sagen Sie nur zur Datei, die in den Big Data liegt: âLöschen!â
âTimescaleâ versteht einfach, dass es diesen Chunk nicht mehr gibt. Da es in den Abfrageplaner integriert ist, erfasst es Ihre Bedingungen im Select oder in anderen Operationen und erkennt sofort, dass es diesen Chunk nicht mehr gibt â âIch gehe dort nicht mehr hin!â (Daten fehlen). Das ist alles! Das bedeutet, das Scannen der Tabelle wird durch das Löschen der BinĂ€rdatei ersetzt, deshalb ist das schnell.
A: â Wir haben das Thema NoSQL bereits angesprochen. Soweit ich verstehe, ist es fĂŒr âZabbixâ nicht unbedingt nötig, Daten zu modifizieren, denn das ist alles eher eine Art Log. Kann man spezialisierte Datenbanken verwenden, die ihre Daten nicht Ă€ndern können, aber dabei viel schneller speichern, sammeln und bereitstellen â Clickhouse zum Beispiel, oder etwas Kafka-Ă€hnliches? .. Kafka ist doch auch ein Log! Kann man die irgendwie integrieren?
AG: â Einen Export kann man machen. Wir haben ab Version 3.4 eine bestimmte âFunktionâ: Sie können alle historischen Dateien, Events und alles andere in Dateien schreiben; und dann mit einem Handler an jede andere Datenbank senden. TatsĂ€chlich machen viele das und schreiben direkt in die Datenbank. Die Histogramm-Synchronisatoren schreiben das alles in Dateien, rotieren diese Dateien usw., und das können Sie in âClickhouseâ ĂŒbertragen. Ich kann nichts zu den PlĂ€nen sagen, aber vielleicht wird die weitere UnterstĂŒtzung von NoSQL-Lösungen (wie âClickhouseâ) fortgesetzt.
A: â Also, kann man im Grunde ganz auf PostgreSQL verzichten?
AG: â NatĂŒrlich, der schwierigste Teil bei âZabbixâ sind die historischen Tabellen, die die meisten Probleme verursachen, und die Events. In diesem Fall, wenn Sie Events nicht lange speichern und die Historie mit Trends in einem anderen schnellen Speicher aufbewahren, denke ich, dass es im Allgemeinen keine Probleme geben wird.
A: â Können Sie einschĂ€tzen, wie viel schneller alles funktionieren wird, wenn man auf âClickhouseâ umschaltet?
AG: â Ich habe das nicht getestet. Ich denke, dass man mindestens dieselben Zahlen relativ einfach erreichen kann, wenn man bedenkt, dass âClickhouseâ seine eigene Schnittstelle hat, aber ich kann nicht eindeutig sagen. Es ist besser, es zu testen. Alles hĂ€ngt von der Konfiguration ab: wie viele Hosts Sie haben usw. Das EinfĂŒgen ist das eine, aber man muss diese Daten auch abholen â entweder mit Grafana oder etwas anderem.
A: â Also geht es um einen gleichwertigen Wettbewerb und nicht um einen groĂen Vorteil dieser schnellen Datenbanken?
AG: â Ich denke, wenn wir integrieren, wird es genauere Tests geben.
A: â Wo ist das alte, gute RRD hingekommen? Was hat dazu gefĂŒhrt, dass auf SQL-Datenbanken umgestiegen wurde? UrsprĂŒnglich wurden alle Metriken ja auf RRD gesammelt.
AG: â In "Zabbix" gab es RRD vielleicht in einer sehr alten Version. SQL-Datenbanken waren immer vorhanden â der klassische Ansatz. Der klassische Ansatz sind MySQL, PostgreSQL (existiert schon seit sehr langer Zeit). Wir haben die gemeinsame Schnittstelle fĂŒr SQL-Datenbanken und RRD praktisch nie genutzt.


Ein wenig Werbung đ
Danke, dass Sie bei uns bleiben. Gefallen Ihnen unsere Artikel? Möchten Sie mehr interessante Inhalte sehen? UnterstĂŒtzen Sie uns, indem Sie eine Bestellung aufgeben oder uns Freunden empfehlen, , ein einzigartiges Ăquivalent zu Einsteigerservern, das wir fĂŒr Sie entwickelt haben: (es sind Optionen mit RAID1 und RAID10 bis zu 24 Kernen und bis zu 40GB DDR4 verfĂŒgbar).
Dell R730xd ist im Equinix Tier IV Rechenzentrum in Amsterdam doppelt so gĂŒnstig? Nur bei uns in den Niederlanden! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â ab $99! Lesen Sie, wie
Quelle: habr.com
