{"id":55734,"date":"2020-01-27T00:00:00","date_gmt":"2020-01-26T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie"},"modified":"2020-02-18T14:03:52","modified_gmt":"2020-02-18T11:03:52","slug":"highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","title":{"rendered":"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Vi vil se p\u00e5, hvordan Zabbix fungerer med TimescaleDB som backend. Vi viser, hvordan man starter fra bunden, og hvordan man migrerer fra PostgreSQL. Vi vil ogs\u00e5 fremvise sammenlignende ydeevnetests af de to konfigurationer.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/fb4f7ea4585b6dcdafec9d0d1e3a71e4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHighLoad++ Sibirien 2019. Sal \"Tomsk\". 24. juni, 16:00. Resum\u00e9 og <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5390\">pr\u00e6sentation<\/a><\/noindex>. Den n\u00e6ste HighLoad++ konference finder sted den 6. og 7. april 2020 i Sankt Petersborg. Detaljer og billetter <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">via linket<\/a><\/noindex>.<\/p>\n<p><b>Andrej Gushchin (herefter \u2013 AG):<\/b> \u2013 Jeg er ingeni\u00f8r i teknisk support for ZABBIX (herefter \u2013 \"Zabbix\"), tr\u00e6ner. Jeg har arbejdet i over 6 \u00e5r i teknisk support og har direkte erfaring med ydeevne. I dag vil jeg tale om den ydeevne, TimescaleDB kan tilbyde, n\u00e5r man sammenligner med almindelig PostgreSQL 10. Der vil ogs\u00e5 v\u00e6re nogle introduktioner om, hvordan det hele fungerer.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>De vigtigste ydeevneudfordringer: fra indsamling til rensning af data<\/h3>\n<p>\nLad os starte med, at der er specifikke ydeevneudfordringer, som hvert overv\u00e5gningssystem m\u00f8der. Den f\u00f8rste ydeevneudfordring er hurtig indsamling og behandling af data.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/a2cb78b549a55c3b59d7fcdb8b8865b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEt godt overv\u00e5gningssystem skal hurtigt og til tiden indsamle alle data, behandle dem i henhold til triggerbetingelser, det vil sige behandle dem efter visse kriterier (som varierer fra system til system) og gemme dem i databasen, s\u00e5 disse data kan bruges senere.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/a3ce55c3aec3eb93948150684838a5b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen anden ydeevneudfordring er opbevaring af historik. At opbevare i databasen og have hurtig og nem adgang til de metrikker, der er indsamlet over en bestemt periode. Det vigtigste er, at disse data er lette at f\u00e5 fat i, s\u00e5 de kan bruges i rapporter, diagrammer, triggere og i nogle t\u00e6rskelv\u00e6rdier til alarmer osv.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/325363d79f0270d620f956eeb8ab3402.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen tredje ydeevneudfordring er rensning af historik, det vil sige n\u00e5r der kommer en dag, hvor du ikke beh\u00f8ver at gemme detaljerede metrikker, der er indsamlet i 5 \u00e5r (eller endda m\u00e5neder eller to m\u00e5neder). Nogle netv\u00e6rksnoder er blevet fjernet, eller nogle hosts er ikke l\u00e6ngere n\u00f8dvendige, fordi de er for\u00e6ldede og ikke l\u00e6ngere indsamles. Alt dette skal renses, s\u00e5 din database ikke vokser til en stor st\u00f8rrelse. Og generelt er rensning af historik ofte en alvorlig test for opbevaringssystemet \u2013 det p\u00e5virker ofte ydeevnen meget.<\/p>\n<h3>Hvordan l\u00f8ser man cacheproblemer?<\/h3>\n<p>\nJeg vil nu tale specifikt om \u00abZabbix\u00bb. I \u00abZabbix\u00bb er den f\u00f8rste og anden opkald l\u00f8st ved hj\u00e6lp af caching.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/d5510b31553ee8e63a0c240789d51622.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIndsamling og behandling af data \u2013 vi bruger RAM til at gemme alle disse data. Der vil nu blive fortalt mere om disse data.<\/p>\n<p>Der er ogs\u00e5 en vis caching p\u00e5 databasesiden for de vigtigste foresp\u00f8rgsler \u2013 til grafer og andre ting.<\/p>\n<p>Caching p\u00e5 selve Zabbix-serveren: vi har ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Hvad er det?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/241a131145eccd280a7411c43b2cdce4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nConfigurationCache er den prim\u00e6re cache, hvor vi gemmer metrics, hosts, dataelementer, triggere; alt hvad der er n\u00f8dvendigt for at behandle pr\u00e6behandling, indsamle data, hvilke hosts der skal indsamles fra, og hvor ofte. Alt dette gemmes i ConfigurationCache for ikke at skulle henvende sig til databasen og skabe un\u00f8dvendige foresp\u00f8rgsler. Efter serverens opstart opdaterer vi denne cache (skaber) og opdaterer det j\u00e6vnligt (afh\u00e6ngigt af konfigurationens indstillinger).<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/474ac0db2e46aa945a0da62197f72987.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Caching i Zabbix. Dataindsamling<\/h3>\n<p>\nHer er diagrammet ret omfattende:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/a6ad9dbd5deebac5440433a47c693fcf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHovedkomponenterne i diagrammet \u2013 de er disse indsamler:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/feb932586302e2284bd44595caf9ee1b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet er selve indsamleprocesserne, forskellige \u00abpollere\u00bb, der er ansvarlige for forskellige typer indsamlinger. De indsamler data via icmp, ipmi, forskellige protokoller og sender det hele til pr\u00e6behandling.<\/p>\n<h3>PreProcessing HistoryCache<\/h3>\n<p>\nHvis vi ogs\u00e5 har beregnede dataelementer (dem, der er bekendt med \u00abZabbix\u00bb, ved det), det vil sige beregnede, aggregationsdataelementer \u2013 vi henter dem direkte fra ValueCache. Hvordan den fyldes, vil jeg fort\u00e6lle om senere. Alle disse indsamler bruger ConfigurationCache til at f\u00e5 deres opgaver og sender derefter til pr\u00e6behandling.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/3948ee1167c52856949c25e2043be974.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPr\u00e6behandling bruger ogs\u00e5 ConfigurationCache til at modtage pr\u00e6behandlingstrin, behandler disse data p\u00e5 forskellige m\u00e5der. Fra version 4.2 er det flyttet til proxyen. Det er meget praktisk, fordi selve pr\u00e6behandlingen er en ret tung operation. Og hvis du har en meget stor \u00abZabbix\u00bb, med mange dataelementer og h\u00f8j indsamlingfrekvens, letter det arbejdet betydeligt.<\/p>\n<p>N\u00e5r vi har behandlet disse data p\u00e5 en eller anden m\u00e5de ved hj\u00e6lp af pr\u00e6behandling, gemmer vi dem i HistoryCache for yderligere behandling. Dette afslutter dataindsamlingen. Vi g\u00e5r til hovedprocessen.<\/p>\n<h3>Arbejdet History syncer<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/66539e4184d041ed84f797080226ba24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen prim\u00e6re proces i \u00abZabbix\u00bb (da det er en monolitisk arkitektur) \u2013 History syncer. Dette er den prim\u00e6re proces, der h\u00e5ndterer atomisk behandling af hver datapunkt, det vil sige hver v\u00e6rdi:<\/p>\n<ul>\n<li>en v\u00e6rdi kommer ind (den hentes fra HistoryCache);<\/li>\n<li>tjekker i Configuration syncer: er der nogle triggere til beregning \u2013 beregner dem;<br \/>\nhvis der er \u2013 opretter begivenheder, opretter eskalering for at generere en notifikation, hvis det er n\u00f8dvendigt i henhold til konfigurationen;<\/li>\n<li>registrerer triggere til efterf\u00f8lgende behandling, aggregering; hvis du aggregerer over den sidste time osv., husker denne v\u00e6rdi ValueCache for ikke at skulle g\u00e5 til historik tabellen; dermed fyldes ValueCache med de n\u00f8dvendige data til beregning af triggere, beregnede elementer osv.;<\/li>\n<li>derefter registrerer History syncer alle data i databasen;<\/li>\n<li>databasen gemmer dem p\u00e5 disk \u2013 her slutter behandlingsprocessen.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Databaser. Caching<\/h3>\n<p>\nP\u00e5 DB-siden, n\u00e5r du vil se grafer eller nogle rapporter om begivenheder, er der forskellige caches. Men inden for denne pr\u00e6sentation vil jeg ikke ber\u00f8re dem.<\/p>\n<p>For MySQL er der Innodb_buffer_pool, og ogs\u00e5 en r\u00e6kke forskellige caches, der ogs\u00e5 kan konfigureres.<br \/>\nMen disse er de prim\u00e6re:<\/p>\n<ul>\n<li>shared_buffers;<\/li>\n<li>effective_cache_size;<\/li>\n<li>shared_pool.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/925e7abb21cfaa2516ff2b33ab161dc0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJeg har angivet, at der er bestemte caches for alle databaser, som g\u00f8r det muligt at holde de data, der ofte er n\u00f8dvendige til foresp\u00f8rgsler, i hukommelsen. De har deres egne teknologier til dette.<\/p>\n<h3>Om databaseydelse<\/h3>\n<p>\nDer er en konkurrencepr\u00e6get milj\u00f8, hvor \u00abZabbix\u00bb-serveren indsamler data og gemmer dem. Ved genstart l\u00e6ser den ogs\u00e5 fra historien for at fylde ValueCache osv. Du kan ogs\u00e5 have scripts og rapporter, der bruger \u00abZabbix\u00bb-API, som er bygget p\u00e5 webgr\u00e6nsefladen. \u00abZabbix\u00bb-API g\u00e5r ind i databasen og henter de n\u00f8dvendige data for at f\u00e5 grafer, rapporter eller en liste over begivenheder, de seneste problemer.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/10a55cb1af660aace3172a572bea6692.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEt meget popul\u00e6rt visualiseringsv\u00e6rkt\u00f8j \u2013 er Grafana, som vores brugere anvender. Det kan tilg\u00e5s direkte b\u00e5de via \u00abZabbix\u00bb-API og databasen. Det skaber ogs\u00e5 en vis konkurrence for at hente data: en mere finjusteret, god ops\u00e6tning af databasen er n\u00f8dvendig for at sikre hurtig levering af resultater og test.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/8a008e55dbee5635d386cec2fc1c40f5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Rydning af historik. I Zabbix findes der en Housekeeper<\/h3>\n<p>\nDen tredje funktion, der anvendes i 'Zabbix', er rydning af historik med hj\u00e6lp fra Housekeeper. 'Housekeeper' overholder alle indstillinger, hvilket betyder, at vi i datavarianter angiver, hvor meget der skal opbevares (i dage), hvor l\u00e6nge trends skal opbevares, og dynamikken i \u00e6ndringerne.<\/p>\n<p>Jeg n\u00e6vnte ikke TrendCache, som vi beregner i realtid: data kommer ind, vi aggregerer dem over en time (prim\u00e6rt tal fra den seneste time), det gennemsnitlige\/minimale antal, og vi registrerer dette \u00e9n gang i timen i tabellen for \u00e6ndringsdynamik ('Trends'). 'Housekeeper' aktiveres og sletter data fra databasen med almindelige SELECTs, hvilket ikke altid er effektivt.<\/p>\n<p>Hvordan forst\u00e5r man, at det ikke er effektivt? Du kan p\u00e5 grafikkerne for de interne processers ydeevne se dette billede:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/f413ec989491d4186a05c779978e2f6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDu har History syncer, som konstant er optaget (den r\u00f8de graf). Og den 'orange' graf, der l\u00f8ber ovenover. Dette er 'Housekeeper', som aktiveres og venter p\u00e5, at databasen skal slette alle de r\u00e6kker, som den har angivet.<\/p>\n<p>Lad os tage en vilk\u00e5rlig Item ID: det skal fjerne de sidste 5000; selvf\u00f8lgelig via indekserne. Men normalt er datas\u00e6ttet stort \u2013 databasen l\u00e6ser det stadig fra disken og indl\u00e6ser det i cachen, og det er en meget dyr operation for databasen. Afh\u00e6ngigt af dens st\u00f8rrelse kan det f\u00f8re til visse ydeevneproblemer.<\/p>\n<p>Du kan deaktivere 'Housekeeper' p\u00e5 en simpel m\u00e5de \u2013 vi har det velkendte webinterface. Indstillingen i Administration general (indstillinger for 'Housekeeper') og vi deaktiverer intern housekeeping for intern historik og trends. F\u00f8lgelig h\u00e5ndterer 'Housekeeper' ikke l\u00e6ngere dette:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/c9dc3ca86e7fd0c1229f6b9bc5d31270.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHvad kan man g\u00f8re n\u00e6ste gang? Du har deaktiveret det, og dine grafer er blevet justeret... Hvilke problemer kan der opst\u00e5 herefter? Hvad kan hj\u00e6lpe?<\/p>\n<h3>Partitionering<\/h3>\n<p>\nNormalt konfigureres dette forskelligt p\u00e5 hver relationel database, som jeg har n\u00e6vnt. P\u00e5 MySQL findes der sin egen teknologi. Men generelt er de meget ens, n\u00e5r man taler om PostgreSQL 10 og MySQL. Selvf\u00f8lgelig er der mange interne forskelle i, hvordan det hele er implementeret, og hvordan det p\u00e5virker ydeevnen. Men generelt f\u00f8rer oprettelsen af en ny partition ofte ogs\u00e5 til visse problemer.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/729114d61794314e19383f09ee9b5d61.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAfh\u00e6ngigt af dit setup (hvor mange data du genererer p\u00e5 en dag), s\u00e6tter man som regel det mindste - det er 1 dag\/partition, og for \u201etrends\u201c, \u00e6ndringernes dynamik - 1 m\u00e5ned \/ ny partition. Dette kan \u00e6ndre sig, hvis du har et meget stort setup.<\/p>\n<p>Lad mig straks fort\u00e6lle om st\u00f8rrelsen p\u00e5 setup'et: op til 5.000 nye v\u00e6rdier pr. sekund (nvps som det kaldes) - dette betragtes som et lille \u201esetup\u201c. Mellemstore - fra 5.000 til 25.000 v\u00e6rdier pr. sekund. Alt over dette er store og meget store installationer, som kr\u00e6ver omhyggelig tuning af databasen.<\/p>\n<p>P\u00e5 meget store installationer kan 1 dag v\u00e6re suboptimalt. Jeg har personligt set MySQL-partitioner p\u00e5 40 gigabyte om dagen (og de kan v\u00e6re st\u00f8rre). Dette er en meget stor m\u00e6ngde data, som kan f\u00f8re til problemer. Det skal reduceres.<\/p>\n<h3>Hvorfor er partitionering n\u00f8dvendig?<\/h3>\n<p>\nHvad partitionering giver, tror jeg, alle ved - det er sektionering af tabeller. Ofte er det separate filer p\u00e5 disken og sporing af foresp\u00f8rgsler. Den v\u00e6lger mere optimalt \u00e9n partition, hvis det falder ind under normal partitionering.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/4920fb3415733799f0a90b1bc7af0114.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFor \u201eZabbix\u201c anvendes det i s\u00e6rdeleshed efter interval, det vil sige vi bruger timestamps (almindelige tal, tid siden begyndelsen af \u00e6raen). Du angiver begyndelsen af dagen \/ slutningen af dagen, og dette udg\u00f8r partitionen. Derfor, hvis du foresp\u00f8rger data fra for to dage siden, hentes alt fra databasen hurtigere, fordi det kun er n\u00f8dvendigt at indl\u00e6se \u00e9n fil i cachen og udlevere den (og ikke en stor tabel).<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/f5ee4e0b471eb5ebe701615aa617d66d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMange databaser fremskynder ogs\u00e5 inds\u00e6ttelse (inds\u00e6ttelse i \u00e9n child-tabel). Mens jeg taler abstrakt, er dette ogs\u00e5 muligt. Partitionering hj\u00e6lper ofte.<\/p>\n<h3>Elasticsearch til NoSQL<\/h3>\n<p>\nFor nylig, i version 3.4, implementerede vi en l\u00f8sning til NoSQL. Vi tilf\u00f8jede muligheden for at skrive til Elasticsearch. Du kan skrive forskellige typer: v\u00e6lg - enten tal, eller nogle symboler; vi har string-tekst, logfiler kan du skrive til Elasticsearch... Derfor vil webgr\u00e6nsefladen ogs\u00e5 henvende sig til Elasticsearch. Det fungerer fremragende i visse tilf\u00e6lde, men i \u00f8jeblikket kan det bruges.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/24fe7d19c9e42474cd786ba59846c18c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>TimescaleDB. Hyper-tabeller<\/h3>\n<p>\nFor 4.4.2, we noticed one thing about TimescaleDB. What is it? It's an extension for PostgreSQL, meaning it has a native PostgreSQL interface. Additionally, this extension allows for significantly more efficient handling of timeseries data and offers automatic partitioning. Here's how it looks:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/de921f06453476215b6240ab9da6fae1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThis is a hypertable \u2013 a concept in Timescale. This is the hypertable you create, which contains chunks. Chunks are partitions, essentially child tables, if I\u2019m not mistaken. This is really efficient.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/719eb3f5d8c9f57544dfc4010850610c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>TimescaleDB and PostgreSQL<\/h3>\n<p>\nAs the makers of TimescaleDB assure, they employ a more optimal query processing algorithm, particularly for inserts, which maintains near-constant performance even as the size of the dataset increases. Thus, after 200 million rows, regular PostgreSQL starts to degrade severely, losing performance almost to zero, while Timescale allows inserts to be performed as efficiently as possible, regardless of data volume.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/a613d505a9dfe6008551ce981da7b24e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>How to install TimescaleDB? It's simple!<\/h3>\n<p>\nThe documentation provides detailed instructions \u2013 you can install it from packages for any systems... It relies on official PostgreSQL packages. You can also compile it manually. It turned out I had to compile it for the database myself.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/6767927fa92260103d318f9aa70ef5b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn Zabbix, we just activate the Extension. I believe those who have used Extensions in PostgreSQL know... You simply activate the Extension and create it for the Zabbix database you are using.<\/p>\n<p>And the last step\u2026<\/p>\n<h3>TimescaleDB. Migration of history tables<\/h3>\n<p>\nYou need to create a hypertable. For this, there is a special function \u2013 Create hypertable. The first parameter is the table that needs to be created as a hypertable in this database.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/47350f79fd9829c12685c1df8f0ff9a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe field by which to create, and chunk_time_interval (this is the interval of chunks (partitions to be used). 86,400 corresponds to one day. <\/p>\n<p>Parameter migrate_data: if you set it to true, it will move all current data into the pre-created chunks.<\/p>\n<p>I used migrate_data myself \u2013 it takes a considerable amount of time, depending on the size of your database. I had more than a terabyte \u2013 the creation took over an hour. In some test cases, I deleted historical data for text (history_text) and string (history_str) to avoid transferring them \u2013 they were not particularly interesting to me.<\/p>\n<p>Og den sidste opdatering, vi laver i vores db_extention: vi installerer timescaledb, s\u00e5 databasen og is\u00e6r vores \"Zabbix\" forst\u00e5r, at der er en db_extention. Den aktiverer det og bruger den korrekte syntaks og foresp\u00f8rgsler til databasen ved at benytte de \"funktioner\", der er n\u00f8dvendige for TimescaleDB.<\/p>\n<h3>Serverkonfiguration<\/h3>\n<p>\nJeg brugte to servere. Den f\u00f8rste server er en virtuel maskine, der er ret lille, med 20 processorer og 16 gigabyte RAM. Jeg har konfigureret den med PostgreSQL 10.8:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/990805374a2380a5c645c578404489bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOperativsystemet var Debian, filsystemet \u2013 xfs. Jeg lavede minimale indstillinger for udelukkende at bruge denne database, bortset fra at 'Zabbix' vil bruge det. P\u00e5 samme maskine k\u00f8rte Zabbix-serveren, PostgreSQL og belastningsagenterne.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/a6efa9ab9cd58f0061d04f13fe31018c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJeg brugte 50 aktive agenter, der anvendte LoadableModule, til hurtigt at generere forskellige resultater. De genererede strenge, tal og s\u00e5 videre. Jeg fyldte databasen med en stor m\u00e6ngde data. Oprindeligt indholdt konfigurationen 5.000 datakilder per v\u00e6rt, og hver datakilde indeholdt en trigger \u2013 for at skabe en realistisk ops\u00e6tning. Nogle gange kr\u00e6ver brugen endda mere end \u00e9n trigger.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/d5a3c306402e08bf2532eb6203a4aab4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJeg regulerede opdateringsintervallet og belastningen ved ikke kun at bruge 50 agenter (jeg tilf\u00f8jede flere), men ogs\u00e5 ved hj\u00e6lp af dynamiske datakilder og s\u00e6nkede opdateringsintervallet til 4 sekunder.<\/p>\n<h3>Ydelsestest. PostgreSQL: 36.000 NVP'er<\/h3>\n<p>\nF\u00f8rste k\u00f8rsel, f\u00f8rste ops\u00e6tning havde jeg p\u00e5 ren PostgreSQL 10 p\u00e5 dette udstyr (35.000 v\u00e6rdier per sekund). Generelt, som det kan ses p\u00e5 sk\u00e6rmen, tager datainds\u00e6ttelsen br\u00f8kdele af et sekund \u2013 alt fungerer godt og hurtigt, SSD-diskene (200 gigabyte). Det eneste, jeg kan n\u00e6vne, er, at 20 GB hurtig bliver fyldt.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/6803a64fedd26093b9117a036d2993ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer vil komme mange flere s\u00e5danne grafikker. Det er standard pr\u00e6stationsdashboard for Zabbix-serveren.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/081cc11c6bf42db3f8f16b6cc4e6ee0c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen f\u00f8rste grafik \u2013 antallet af v\u00e6rdier per sekund (bl\u00e5, \u00f8verst til venstre), 35.000 v\u00e6rdier i dette tilf\u00e6lde. Det er (\u00f8verst i midten) belastningen af samlingsprocesser, og det er (\u00f8verst til h\u00f8jre) belastningen fra interne processer: history syncers og housekeeper, som her (nederst i midten) blev udf\u00f8rt i en betydelig tid.<\/p>\n<p>Denne graf (nede i midten) viser brugen af ValueCache \u2013 hvor mange hits ValueCache har for triggers (flere tusinde v\u00e6rdier per sekund). En anden vigtig graf er den fjerde (nede til venstre), som viser brugen af HistoryCache, som jeg har n\u00e6vnt, der fungerer som en buffer f\u00f8r inds\u00e6ttelse i DB.<\/p>\n<h3>Ydelsestest. PostgreSQL: 50.000 NVP'er<\/h3>\n<p>\nDern\u00e6st \u00f8gede jeg belastningen til 50.000 v\u00e6rdier per sekund p\u00e5 det samme udstyr. Ved indl\u00e6sning af 'Housekeeper' blev 10.000 v\u00e6rdier allerede skrevet p\u00e5 2-3 sekunder med beregningen. Det er faktisk vist p\u00e5 det n\u00e6ste screenshot:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/80824da986dbee2f8d5ebe0ead4fbcfd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n'Housekeeper' begynder allerede at forstyrre arbejdet, men generelt er belastningen p\u00e5 history syncers stadig p\u00e5 niveauet 60 % (den tredje graf, \u00f8verst til h\u00f8jre). HistoryCache begynder allerede under 'Housekeeper's arbejde at fyldes aktivt (nede til venstre). Den var omkring en halv gigabyte og fyldtes med 20%.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/9e1bcd4f3b9f3e8a1c9a36b2083ec61b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Ydelsestest. PostgreSQL: 80.000 NVP'er<\/h3>\n<p>\nDerefter \u00f8gede jeg til 80.000 v\u00e6rdier per sekund:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/13ae1589d6b9d35b4dda9c6c7d989cc2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet var cirka 400.000 dataelementer, 280.000 triggers. Inds\u00e6ttelsen, som du kan se, havde en ganske h\u00f8j belastning p\u00e5 history syncers (der var 30 af dem). Jeg fortsatte med at \u00e6ndre forskellige parametre: history syncers, cache\u2026 P\u00e5 dette udstyr begyndte belastningen p\u00e5 history syncers at stige til maksimum, praktisk talt 'i hylden' \u2013 tilsvarende gik HistoryCache i en meget h\u00f8j belastning:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/0ec528256c8fa7b16e1c7c95c8119535.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI hele denne tid overv\u00e5gende jeg alle systemparametre (hvordan CPU'en blev brugt, RAM) og opdagede, at diskudnyttelsen var maksimal \u2013 jeg havde opn\u00e5et den maksimale kapacitet for denne disk p\u00e5 dette udstyr, p\u00e5 denne virtuelle maskine. 'Postgres' begyndte ved s\u00e5dan intensitet at frigive data ret aktivt, og disken kunne ikke f\u00f8lge med til skrivning, l\u00e6sning\u2026<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/0809dbd7638e7ee003ea24c611984a0c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJeg tog en anden server, som allerede havde 48 CPU'er og 128 gigabyte RAM:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/53410b502a4574aac5d40f1a2a6d3f42.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJeg 'tunede' ogs\u00e5 den \u2013 satte History syncer (60 stk.) og opn\u00e5ede acceptabel ydeevne. Faktisk er vi ikke 'i hylden', men det er nok gr\u00e6nsen for ydeevne, hvor der allerede skal g\u00f8res noget ved det.<\/p>\n<h3>Ydelsestest. TimescaleDB: 80.000 NVP'er<\/h3>\n<p>\nMit hovedm\u00e5l var at bruge TimescaleDB. P\u00e5 hver graf ses et dyk:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/b0064068895a34b93b5aa6771aba05cb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDisse nedbrud er netop datamigrering. Efter dette har profilen for belastning af history-syncere p\u00e5 'Zabbix'-serveren, som du kan se, \u00e6ndret sig betydeligt. Den tillader praktisk talt at inds\u00e6tte data tre gange hurtigere og bruger mindre HistoryCache \u2013 dermed vil data blive leveret til dig rettidigt. Igen, 80.000 v\u00e6rdier pr. sekund \u2013 det er en ret h\u00f8j hastighed (selvf\u00f8lgelig ikke for 'Yandex'). Generelt er dette en ret stor ops\u00e6tning, med \u00e9n server.<\/p>\n<h3>Ydelsestest af PostgreSQL: 120.000 NVP'er<\/h3>\n<p>\nDerefter forbedrede jeg antal datapunkter til en halv million og fik en beregnet v\u00e6rdi p\u00e5 125.000 pr. sekund:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/7d0cf2ef7c6691c1bbf4b90afd34e4bb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOg jeg fik s\u00e5danne grafer:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/9c09333a50e016921a8a5b70e00397a1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrincipielt er dette en fungerende ops\u00e6tning, den kan k\u00f8re i l\u00e6ngere tid. Men da jeg kun havde en disk p\u00e5 1,5 terabyte, brugte jeg den op p\u00e5 et par dage. Det vigtigste var, at der samtidig blev oprettet nye partitioner i TimescaleDB, og dette skete helt uset for ydeevnen, hvilket ikke kan siges om MySQL.<\/p>\n<p>Normalt oprettes partitioner om natten, fordi det blokerer for indl\u00e6sning og arbejde med tabellerne, hvilket kan f\u00f8re til degradering af servicen. I dette tilf\u00e6lde er det ikke tilf\u00e6ldet! Hovedopgaven var at teste mulighederne for TimescaleDB. Resultatet blev: 120.000 v\u00e6rdier pr. sekund.<\/p>\n<p>Der findes ogs\u00e5 eksempler i 'communities':<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/66aa6b1d4c559d12082e4d91b6a1ca10.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn person aktiverede ogs\u00e5 TimescaleDB, og belastningen p\u00e5 io.weight faldt p\u00e5 processoren; og brugen af interne proces-elementer blev ogs\u00e5 reduceret takket v\u00e6re aktiveringen af TimescaleDB. Disse er almindelige HDD'er, dvs. en normal virtuel maskine p\u00e5 almindelige diske (ikke SSD)!<\/p>\n<p>For mindre ops\u00e6tninger, der er begr\u00e6nset af diskens ydeevne, virker TimescaleDB, som jeg mener, som en rigtig god l\u00f8sning. Det tillader en ret god fortsat drift, inden man migrerer til hurtigere hardware til databasen.<\/p>\n<p>Jeg inviterer jer alle til vores arrangementer: Konference \u2013 i Moskva, Summit \u2013 i Riga. Brug vores kanaler \u2013 'Telegram', forum, IRC. Hvis du har sp\u00f8rgsm\u00e5l, s\u00e5 kom til vores stand, s\u00e5 kan vi tale om alt.<\/p>\n<h3>Sp\u00f8rgsm\u00e5l fra publikum<\/h3>\n<p>\nSp\u00f8rgsm\u00e5l fra publikum (herefter \u2013 A): \u2013 Hvis TimescaleDB er s\u00e5 nemt at konfigurere, og det giver et s\u00e5 stort pr\u00e6stationsboost, er det s\u00e5 m\u00e5ske bedst at bruge det som en god praksis til at konfigurere \u00abZabbix\u00bb med \u00abPostgres\u00bb? Og er der nogen faldgruber eller ulemper ved denne l\u00f8sning, eller kan jeg bare tage \u00abPostgres\u00bb, installere \u00abTimescale\u00bb og bruge det uden at bekymre mig om problemer?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/314845a019724806283a957b15d857cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>AG:<\/b> \u2013 Ja, jeg vil sige, at det er en god anbefaling at bruge \u00abPostgres\u00bb med det samme sammen med TimescaleDB-udvidelsen. Som jeg allerede har n\u00e6vnt, er der mange gode anmeldelser, selvom denne \u00abfunktion\u00bb er eksperimentel. Men faktisk viser tests, at det er en fremragende l\u00f8sning (med TimescaleDB), og jeg tror, det vil udvikle sig! Vi f\u00f8lger med i, hvordan denne udvidelse udvikler sig, og vil justere det, der er n\u00f8dvendigt.<\/p>\n<p>Vi har endda i udviklingen bygget videre p\u00e5 en af deres kendte \u00abfunktioner\u00bb: der kunne man arbejde lidt anderledes med chunks. Men s\u00e5 fjernede de det i den n\u00e6ste udgave, og vi m\u00e5tte ikke l\u00e6ngere bygge p\u00e5 den kode. Jeg ville anbefale at bruge denne l\u00f8sning p\u00e5 mange ops\u00e6tninger. Hvis du bruger MySQL\u2026 fungerer enhver l\u00f8sning fint for mellemstore ops\u00e6tninger.<\/p>\n<p><b>A:<\/b> \u2013 P\u00e5 de seneste diagrammer, der kommer fra community'et, var der et diagram med \u00abHousekeeper\u00bb:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/d01549b6b9b97d8bdf5372efe05d9039.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHan fortsatte med at arbejde. Hvad g\u00f8r \u00abHousekeeper\u00bb med TimescaleDB?<\/p>\n<p><b>AG:<\/b> \u2013 Lige nu kan jeg ikke sige det pr\u00e6cist \u2013 jeg vil kigge p\u00e5 koden og give dig en mere detaljeret svar. Han bruger foresp\u00f8rgsler fra TimescaleDB ikke til at slette chunks, men p\u00e5 en eller anden m\u00e5de aggregere. Indtil videre er jeg ikke klar til at svare p\u00e5 dette tekniske sp\u00f8rgsm\u00e5l. P\u00e5 standen vil vi f\u00e5 det pr\u00e6ciseret i dag eller i morgen.<\/p>\n<p><b>A:<\/b> \u2013 Jeg har et lignende sp\u00f8rgsm\u00e5l \u2013 om ydeevnen ved sletning i \u00abTimescale\u00bb.<br \/>\nA (svar fra publikum): \u2013 N\u00e5r du sletter data fra tabellen, hvis du g\u00f8r det via delete, skal du gennemg\u00e5 tabellen \u2013 slette, rydde, markere alt til fremtidig vakuum. I \u00abTimescale\u00bb, da du har chunks, kan du droppe. Groft sagt siger du bare til filen, der ligger i big data: \u00abSlet!\u00bb<\/p>\n<p>\u00abTimescale\u00bb forst\u00e5r simpelthen, at den chunk ikke l\u00e6ngere eksisterer. Da det integreres i foresp\u00f8rgselsplanl\u00e6ggeren, fanger det dine betingelser i select'en eller i andre operationer og forst\u00e5r med det samme, at denne chunk ikke l\u00e6ngere er der \u2013 \u00abJeg g\u00e5r ikke derhen igen!\u00bb (data mangler). Det er alt! Det vil sige, at scanning af tabellen erstattes af sletning af bin\u00e6rfilen, s\u00e5 det er hurtigt.<\/p>\n<p><b>A:<\/b> \u2013 Vi har allerede ber\u00f8rt emnet omkring ikke-SQL. S\u00e5 vidt jeg forst\u00e5r, har \u00abZabbix\u00bb ikke meget brug for at \u00e6ndre data, og alt dette er lidt ligesom en log. Kan man bruge specialiserede databaser, som ikke kan \u00e6ndre deres data, men som til geng\u00e6ld er meget hurtigere til at gemme, akkumulere og returnere \u2013 Clickhouse, for eksempel noget kafka-lignende?.. Kafka er jo ogs\u00e5 en log! Kan man integrere dem p\u00e5 en eller anden m\u00e5de?<\/p>\n<p><b>AG:<\/b> \u2013 Eksport kan g\u00f8res. Vi har en bestemt \u00abfunktion\u00bb fra version 3.4: du kan skrive i filer alle historiske filer, events og alt andet; og derefter sende det til enhver anden database med en eller anden behandler. Faktisk er der mange, der omskriver og skriver direkte til databasen. History-synkere skriver dette direkte til filer, roterer disse filer og s\u00e5 videre, og det kan du overf\u00f8re til \u00abClickhouse\u00bb. Jeg kan ikke sige noget om planer, men muligvis vil yderligere st\u00f8tte af NoSQL-l\u00f8sninger (som \u00abClickhouse\u00bb) forts\u00e6tte.<\/p>\n<p><b>A:<\/b> \u2013 Alts\u00e5, kan man helt undg\u00e5 PostgreSQL?<\/p>\n<p><b>AG:<\/b> \u2013 Selvf\u00f8lgelig, den sv\u00e6reste del i \u00abZabbix\u00bb er de historiske tabeller, som skaber st\u00f8rst problemer, og events. I dette tilf\u00e6lde, hvis du ikke vil opbevare events i lang tid og opbevarer historien med trends i et andet hurtigt lager, s\u00e5 vil der generelt ikke v\u00e6re nogen problemer, t\u00e6nker jeg.<\/p>\n<p><b>A:<\/b> \u2013 Kan du vurdere, hvor meget hurtigere alt vil fungere, hvis vi g\u00e5r over til \u00abClickhouse\u00bb, for eksempel?<\/p>\n<p><b>AG:<\/b> \u2013 Jeg har ikke testet. Jeg mener, at man kan opn\u00e5 i hvert fald de samme resultater ret nemt, idet \u00abClickhouse\u00bb har sit eget interface, men jeg kan ikke sige det entydigt. Det er bedst at teste. Alt afh\u00e6nger af konfigurationen: hvor mange hosts du har, og s\u00e5 videre. Inds\u00e6ttelse er \u00e9n ting, men man skal ogs\u00e5 hente disse data \u2013 med Grafana eller noget lignende.<\/p>\n<p><b>A:<\/b> \u2013 S\u00e5 det drejer sig om lige konkurrence, og ikke et stort forspring for disse hurtige databaser?<\/p>\n<p><b>AG:<\/b> \u2013 Jeg tror, n\u00e5r vi integrerer, vil der v\u00e6re mere pr\u00e6cise tests.<\/p>\n<p><b>A:<\/b> \u2013 Hvad skete der med den gode gamle RRD? Hvad fik os til at skifte til SQL-databaser? Oprindeligt blev alle m\u00e5linger indsamlet i RRD.<\/p>\n<p><b>AG:<\/b> \u2013 I \"Zabbix\" var RRD muligvis kun i en meget gammel version. Der har altid v\u00e6ret SQL-databaser \u2013 den klassiske tilgang. Den klassiske tilgang er MySQL, PostgreSQL (som allerede eksisterer i lang tid). Vi har et f\u00e6lles interface til SQL-databaser, og vi har stort set aldrig brugt RRD.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andreas Gushchin (Zabbix): h\u00f8j ydeevne og indf\u00f8dt partitionering\" src=\"\/wp-content\/uploads\/2020\/01\/ac5f02494c63983601cc09c0b22e722b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"umRk94j5M8o\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/umRk94j5M8o\/hqdefault.jpg\" alt=\"Afspil video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Lidt reklame \ud83d\ude42<\/h3>\n<p>\nTak fordi du bliver hos os. Kan du lide vores artikler? \u00d8nsker du at se flere interessante materialer? St\u00f8t os ved at bestille eller anbefale os til dine bekendte, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">cloud VPS til udviklere fra 4,99 $<\/a><\/noindex>, <b>en unik analog til entry-level servere, som vi har designet til dig:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Alt om VPS (KVM) E5-2697 v3 (6 kerner) 10 GB DDR4 480 GB SSD 1 Gbps fra 19 $ eller hvordan man deler serveren korrekt?<\/a><\/noindex> (tilg\u00e6ngelige muligheder med RAID1 og RAID10, op til 24 kerner og op til 40 GB DDR4).<\/p>\n<p><b>Dell R730xd til halv pris i datacenteret Equinix Tier IV i Amsterdam?<\/b> Kun hos os <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB fra 199 $<\/a><\/noindex> i Holland! <b>Dell R420 - 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - fra 99 $!<\/b><\/b> L\u00e6s om hvordan <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">man bygger enterprise-infrastruktur ved hj\u00e6lp af Dell R730xd E5-2650 v4 servere til 9000 euro for en br\u00f8kdel af prisen?<\/a><\/noindex><br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/485470\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Zabbix \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 TimescaleDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 backend. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043a\u0430\u043a \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 PostgreSQL. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439. HighLoad++ Siberia 2019. \u0417\u0430\u043b \u00ab\u0422\u043e\u043c\u0441\u043a\u00bb. 24 \u0438\u044e\u043d\u044f, 16:00. \u0422\u0435\u0437\u0438\u0441\u044b \u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55734","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Zabbix \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 TimescaleDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 backend. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043a\u0430\u043a \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 PostgreSQL.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47HighLoad++, \u0410\u043d\u0434\u0440\u0435\u0439 \u0413\u0443\u0449\u0438\u043d (Zabbix): \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Zabbix \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 TimescaleDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 backend. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043a\u0430\u043a \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 PostgreSQL.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-01-26T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:52+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47HighLoad++, Andrey Gushchin (Zabbix): h\u00f8j ydeevne og native partitionering | ProHoster","description":"Vi vil se p\u00e5 Zabbix's arbejde med TimescaleDB som backend. Vi viser, hvordan man starter fra bunden og hvordan man migrerer fra PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47HighLoad++, \u0410\u043d\u0434\u0440\u0435\u0439 \u0413\u0443\u0449\u0438\u043d (Zabbix): \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster","og:description":"\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 Zabbix \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 TimescaleDB \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 backend. \u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0443\u043b\u044f \u0438 \u043a\u0430\u043a \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 PostgreSQL.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-01-26T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:52+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55734","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:37:39","updated":"2022-09-28 01:51:35","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/55734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=55734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/55734\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=55734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=55734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=55734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}