{"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\/hu\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","title":{"rendered":"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Megvizsg\u00e1ljuk a Zabbix \u00e9s a TimescaleDB adatb\u00e1zis backend kapcsolat\u00e1t. Megmutatjuk, hogyan lehet a null\u00e1r\u00f3l ind\u00edtani \u00e9s hogyan lehet migr\u00e1lni a PostgreSQL-r\u00f3l. Teljes\u00edtm\u00e9ny\u00f6sszehasonl\u00edt\u00f3 teszteket is bemutatunk k\u00e9t konfigur\u00e1ci\u00f3 k\u00f6z\u00f6tt.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/fb4f7ea4585b6dcdafec9d0d1e3a71e4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHighLoad++ Szib\u00e9ria 2019. Terem: \u201eTomsk\u201d. J\u00fanius 24, 16:00. El\u0151ad\u00e1si v\u00e1zlatok \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/siberia\/2019\/abstracts\/5390\">el\u0151ad\u00e1s<\/a><\/noindex>. A k\u00f6vetkez\u0151 HighLoad++ konferenci\u00e1t 2020. \u00e1prilis 6-7-\u00e9n tartj\u00e1k Szentp\u00e9terv\u00e1ron. R\u00e9szletek \u00e9s jegyek <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">a linken<\/a><\/noindex>.<\/p>\n<p><b>Andre Gussin (a tov\u00e1bbiakban: AG):<\/b> \u2013 \u00c9n a ZABBIX (a tov\u00e1bbiakban: \u201eZabbix\u201d) technikai t\u00e1mogat\u00f3 m\u00e9rn\u00f6ke vagyok, oktat\u00f3. T\u00f6bb mint 6 \u00e9ve dolgozom a technikai t\u00e1mogat\u00e1sban, \u00e9s k\u00f6zvetlen\u00fcl tapasztaltam a teljes\u00edtm\u00e9nyt. Ma arr\u00f3l fogok besz\u00e9lni, hogy mit ny\u00fajthat a TimescaleDB teljes\u00edtm\u00e9nye a hagyom\u00e1nyos PostgreSQL 10-hez k\u00e9pest. Az el\u0151ad\u00e1s elej\u00e9n n\u00e9mi bevezet\u0151t is tartok arr\u00f3l, hogyan m\u0171k\u00f6dik ez egy\u00e1ltal\u00e1n.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>A teljes\u00edtm\u00e9ny f\u0151 kih\u00edv\u00e1sai: az adatok gy\u0171jt\u00e9s\u00e9t\u0151l a tiszt\u00edt\u00e1sig<\/h3>\n<p>\nKezdj\u00fck azzal, hogy l\u00e9teznek bizonyos teljes\u00edtm\u00e9nyi kih\u00edv\u00e1sok, amelyekkel minden megfigyel\u0151 rendszernek szembe kell n\u00e9znie. Az els\u0151 teljes\u00edtm\u00e9nyi kih\u00edv\u00e1s a gyors adatgy\u0171jt\u00e9s \u00e9s -feldolgoz\u00e1s.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/a2cb78b549a55c3b59d7fcdb8b8865b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEgy j\u00f3 megfigyel\u0151 rendszernek gyorsan \u00e9s id\u0151szer\u0171en kell megkapnia az \u00f6sszes adatot, azokat a riaszt\u00e1si kifejez\u00e9seknek megfelel\u0151en kell feldolgoznia, azaz bizonyos krit\u00e9riumok szerint (k\u00fcl\u00f6nb\u00f6z\u0151 rendszerekben m\u00e1s \u00e9s m\u00e1s m\u00f3don), \u00e9s el kell mentenie az adatb\u00e1zisba, hogy ezeket az adatokat k\u00e9s\u0151bb fel lehessen haszn\u00e1lni.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/a3ce55c3aec3eb93948150684838a5b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA m\u00e1sodik teljes\u00edtm\u00e9nyi kih\u00edv\u00e1s a t\u00f6rt\u00e9nelem t\u00e1rol\u00e1sa. Az adatb\u00e1zisban t\u00e1rolni azokat az adatokat, \u00e9s gyors, k\u00e9nyelmes hozz\u00e1f\u00e9r\u00e9st biztos\u00edtani azokhoz a metrik\u00e1khoz, amelyeket egy bizonyos id\u0151szak alatt gy\u0171jt\u00f6ttek. A legfontosabb, hogy ezek az adatok k\u00f6nnyen el\u00e9rhet\u0151k legyenek, felhaszn\u00e1lhass\u00e1k \u0151ket jelent\u00e9sekben, grafikonokon, riaszt\u00e1sokban vagy b\u00e1rmilyen k\u00fcsz\u00f6b\u00e9rt\u00e9kben, \u00e9rtes\u00edt\u00e9sekhez stb.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/325363d79f0270d620f956eeb8ab3402.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA harmadik teljes\u00edtm\u00e9nyi kih\u00edv\u00e1s a t\u00f6rt\u00e9nelem tiszt\u00edt\u00e1sa, azaz amikor el\u00e9rkezik az a nap, amikor nem kell bizonyos r\u00e9szletes metrik\u00e1kat t\u00e1rolni, amelyek 5 \u00e9v alatt \u00f6sszegy\u0171ltek (m\u00e9g h\u00f3napok vagy k\u00e9t h\u00f3nap is). Bizonyos h\u00e1l\u00f3zati csom\u00f3pontok t\u00f6rl\u0151dnek, vagy bizonyos hosztok, a metrik\u00e1k m\u00e1r nem sz\u00fcks\u00e9gesek, mert elavultakk\u00e1 v\u00e1ltak \u00e9s m\u00e1r nem gy\u0171jtik \u0151ket. Ezt mind el kell t\u00e1vol\u00edtani, hogy az adatb\u00e1zis ne n\u0151j\u00f6n t\u00fal nagyra. Val\u00f3j\u00e1ban a t\u00f6rt\u00e9nelem tiszt\u00edt\u00e1sa gyakran komoly pr\u00f3b\u00e1t jelent a t\u00e1rol\u00f3 sz\u00e1m\u00e1ra \u2013 gyakran nagyon jelent\u0151sen befoly\u00e1solja a teljes\u00edtm\u00e9nyt.<\/p>\n<h3>Hogyan oldhat\u00f3ak meg a gyors\u00edt\u00f3t\u00e1raz\u00e1si probl\u00e9m\u00e1k?<\/h3>\n<p>\nMost az \u201eZabbix\u201d-r\u00f3l fogok besz\u00e9lni. A \u201eZabbix\u201d-ban az els\u0151 \u00e9s m\u00e1sodik h\u00edv\u00e1sok cache-el\u00e9ssel lettek megoldva.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/d5510b31553ee8e63a0c240789d51622.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz adatok gy\u0171jt\u00e9se \u00e9s feldolgoz\u00e1sa \u2013 RAM-ot haszn\u00e1lunk az \u00f6sszes adat t\u00e1rol\u00e1s\u00e1ra. Most ezekr\u0151l az adatokr\u00f3l r\u00e9szletesebben fogunk besz\u00e9lni.<\/p>\n<p>Az adatb\u00e1zis oldal\u00e1n is van bizonyos caching a f\u0151 lek\u00e9rdez\u00e9sekhez \u2013 a grafikonokhoz \u00e9s m\u00e1s dolgokhoz.<\/p>\n<p>Caching a Zabbix-server oldal\u00e1n: van ConfigurationCache, ValueCache, HistoryCache, TrendsCache. Mik ezek?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/241a131145eccd280a7411c43b2cdce4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA ConfigurationCache a f\u0151 cache, amiben a metrik\u00e1kat, hosztokat, adatpontokat, riaszt\u00e1sokat t\u00e1roljuk; mindent, ami a preprosesszinghez, az adatok gy\u0171jt\u00e9s\u00e9hez, a gy\u0171jt\u00e9si hosztokhoz \u00e9s a gy\u0171jt\u00e9si gyakoris\u00e1ghoz sz\u00fcks\u00e9ges. Mindezeket a ConfigurationCache-ben t\u00e1roljuk, hogy ne kelljen az adatb\u00e1zishoz fordulni, \u00e9s ne gener\u00e1ljunk felesleges lek\u00e9rdez\u00e9seket. A szerver ind\u00edt\u00e1sa ut\u00e1n friss\u00edtj\u00fck ezt a cache-t (l\u00e9trehozzuk) \u00e9s id\u0151szakonk\u00e9nt friss\u00edtj\u00fck (a konfigur\u00e1ci\u00f3 be\u00e1ll\u00edt\u00e1sait\u00f3l f\u00fcgg\u0151en).<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/474ac0db2e46aa945a0da62197f72987.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Caching a Zabbixban. Adatok gy\u0171jt\u00e9se<\/h3>\n<p>\nItt a s\u00e9ma el\u00e9g nagy:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/a6ad9dbd5deebac5440433a47c693fcf.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA s\u00e9ma f\u0151 elemei \u2013 ezek a gy\u0171jt\u0151k:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/feb932586302e2284bd44595caf9ee1b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzek maguk a gy\u0171jt\u00e9si folyamatok, k\u00fcl\u00f6nf\u00e9le \u201epollerek\u201d, amelyek k\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpus\u00fa gy\u0171jt\u00e9sek\u00e9rt felel\u0151sek. Ezek begy\u0171jtik az adatokat ICMP, IPMI \u00e9s k\u00fcl\u00f6nb\u00f6z\u0151 protokollok alapj\u00e1n, majd \u00e1tadj\u00e1k azt a preprosesszingnek.<\/p>\n<h3>PreProcessing HistoryCache<\/h3>\n<p>\nTov\u00e1bb\u00e1, ha van sz\u00e1m\u00edtott adatpontunk (akik ismerik a \u201eZabbix\u201d-ot, tudj\u00e1k), teh\u00e1t sz\u00e1m\u00edtott, aggreg\u00e1lt adatpontok, \u2013 ezeket k\u00f6zvetlen\u00fcl a ValueCache-b\u0151l vessz\u00fck. Arr\u00f3l, hogy hogyan t\u00f6lt\u0151dik ez fel, k\u00e9s\u0151bb besz\u00e9lek. Mindezek a gy\u0171jt\u0151k a feladataik megszerz\u00e9s\u00e9re ConfigurationCache-t haszn\u00e1lnak, majd tov\u00e1bbadj\u00e1k azokat a preprosesszingnek.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/3948ee1167c52856949c25e2043be974.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA preprosesszing szint\u00e9n a ConfigurationCache-t haszn\u00e1lja a preprosesszing l\u00e9p\u00e9seinek megszerz\u00e9s\u00e9re, \u00e9s k\u00fcl\u00f6nb\u00f6z\u0151 m\u00f3don dolgozza fel ezeket az adatokat. A 4.2-es verzi\u00f3t\u00f3l kezdve a preprosesszing a proxy-ra ker\u00fclt. Ez nagyon k\u00e9nyelmes, mert a preprosesszing egy el\u00e9g neh\u00e9z m\u0171velet. Ha nagy a \u201eZabbix\u201d-od, sok adatponttal \u00e9s magas gy\u0171jt\u00e9si gyakoris\u00e1ggal, akkor ez jelent\u0151sen megk\u00f6nny\u00edti a munk\u00e1t.<\/p>\n<p>\u00cdgy miut\u00e1n ezeket az adatokat valamilyen m\u00f3don feldolgoztuk a preprosesszing seg\u00edts\u00e9g\u00e9vel, elmentj\u00fck azokat a HistoryCache-be, hogy k\u00e9s\u0151bb feldolgozhassuk \u0151ket. Ezzel v\u00e9get \u00e9r az adatok gy\u0171jt\u00e9se. \u00c1t\u00e9r\u00fcnk a f\u0151 folyamathoz.<\/p>\n<h3>A History syncer m\u0171k\u00f6d\u00e9se<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/66539e4184d041ed84f797080226ba24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA f\u0151 folyamat a \"Zabbix\"-ban (mivel monolit architekt\u00fara) - History syncer. Ez a f\u0151 folyamat, amely az adatok minden egyes elem\u00e9nek atomikus feldolgoz\u00e1s\u00e1val foglalkozik, teh\u00e1t minden \u00e9rt\u00e9kkel:<\/p>\n<ul>\n<li>\u00e9rkezik egy \u00e9rt\u00e9k (ezt a HistoryCache-b\u0151l veszi);<\/li>\n<li>ellen\u0151rzi a Configuration syncer-ben: van-e b\u00e1rmilyen trigger a sz\u00e1m\u00edt\u00e1sokhoz - ezeket kisz\u00e1m\u00edtja;<br \/>\nha van - esem\u00e9nyeket hoz l\u00e9tre, \u00e9s eszkal\u00e1ci\u00f3t gener\u00e1l, hogy \u00e9rtes\u00edt\u00e9st hozzon l\u00e9tre, ha a konfigur\u00e1ci\u00f3 szerint sz\u00fcks\u00e9ges;<\/li>\n<li>a trigger-eket r\u00f6gz\u00edti a k\u00e9s\u0151bbi feldolgoz\u00e1sra, aggreg\u00e1l\u00e1sra; ha az utols\u00f3 \u00f3r\u00e1ban aggreg\u00e1l, a ValueCache eml\u00e9kezik erre az \u00e9rt\u00e9kre, hogy ne kelljen az t\u00f6rt\u00e9neti t\u00e1bl\u00e1hoz fordulni; \u00edgy a ValueCache a sz\u00fcks\u00e9ges adatokkal tel\u00edt\u0151dik, amelyek sz\u00fcks\u00e9gesek a trigger-ek, sz\u00e1m\u00edtott elemek stb. kisz\u00e1m\u00edt\u00e1s\u00e1hoz;<\/li>\n<li>ezut\u00e1n a History syncer minden adatot r\u00f6gz\u00edt az adatb\u00e1zisban;<\/li>\n<li>az adatb\u00e1zis ezeket lementi a lemezre \u2013 ez a feldolgoz\u00e1si folyamat v\u00e9get \u00e9r.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Adatb\u00e1zisok. Cache-el\u00e9s<\/h3>\n<p>\nAz adatb\u00e1zis oldal\u00e1n, amikor grafikonokat vagy esem\u00e9nyekr\u0151l k\u00e9sz\u00fclt jelent\u00e9seket szeretne megtekinteni, k\u00fcl\u00f6nb\u00f6z\u0151 cache-ek \u00e1llnak rendelkez\u00e9sre. De err\u0151l a bemutat\u00f3 keretein bel\u00fcl nem fogok besz\u00e9lni.<\/p>\n<p>A MySQL eset\u00e9ben ott van az Innodb_buffer_pool, m\u00e9g sok m\u00e1s k\u00fcl\u00f6nb\u00f6z\u0151 cache, amelyeket szint\u00e9n lehet konfigur\u00e1lni.<br \/>\nDe ezek a legfontosabbak:<\/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++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/925e7abb21cfaa2516ff2b33ab161dc0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMinden adatb\u00e1zis eset\u00e9ben bemutattam, hogy l\u00e9teznek bizonyos cache-ek, amelyek lehet\u0151v\u00e9 teszik az operat\u00edv mem\u00f3ri\u00e1ban azokat az adatokat t\u00e1rolni, amelyek gyakran sz\u00fcks\u00e9gesek a lek\u00e9rdez\u00e9sekhez. Itt saj\u00e1t technol\u00f3gi\u00e1ik vannak erre.<\/p>\n<h3>Az adatb\u00e1zis teljes\u00edtm\u00e9nye<\/h3>\n<p>\nEnnek megfelel\u0151en versenyk\u00f6rnyezet van, teh\u00e1t a \"Zabbix\"-szerver adatokat gy\u0171jt \u00e9s r\u00f6gz\u00edt. Ind\u00edt\u00e1skor szint\u00e9n a t\u00f6rt\u00e9neti adatokb\u00f3l olvas a ValueCache felt\u00f6lt\u00e9s\u00e9hez stb. Itt lehetnek olyan szkriptek \u00e9s jelent\u00e9sek, amelyek a \"Zabbix\"-API-t haszn\u00e1lj\u00e1k, amely a webes fel\u00fclet alapja. A \"Zabbix\"-API bel\u00e9p az adatb\u00e1zisba \u00e9s megkapja a sz\u00fcks\u00e9ges adatokat a grafikonok, jelent\u00e9sek vagy esem\u00e9nyek, leg\u00fajabb probl\u00e9m\u00e1k list\u00e1j\u00e1nak megtekint\u00e9s\u00e9hez.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/10a55cb1af660aace3172a572bea6692.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEgy m\u00e1sik n\u00e9pszer\u0171 megold\u00e1s a vizualiz\u00e1ci\u00f3ra a Grafana, amelyet felhaszn\u00e1l\u00f3ink haszn\u00e1lnak. K\u00e9pes k\u00f6zvetlen\u00fcl bel\u00e9pni mind a \"Zabbix\"-API-n, mind az adatb\u00e1zison kereszt\u00fcl. Ez szint\u00e9n bizonyos versenyt teremt az adatok beszerz\u00e9s\u00e9ben: sz\u00fcks\u00e9g van egy finomabb, j\u00f3l megtervezett adatb\u00e1zis be\u00e1ll\u00edt\u00e1sra, hogy biztos\u00edtsa a gyors eredm\u00e9nykiad\u00e1st \u00e9s tesztel\u00e9st.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/8a008e55dbee5635d386cec2fc1c40f5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>T\u00f6rt\u00e9netek t\u00f6rl\u00e9se. A Zabbixban van Housekeeper.<\/h3>\n<p>\nA harmadik h\u00edv\u00e1s, amelyet a Zabbix haszn\u00e1l \u2013 a t\u00f6rt\u00e9nelem t\u00f6rl\u00e9se a Housekeeper seg\u00edts\u00e9g\u00e9vel. A 'Housekeeper' betart minden be\u00e1ll\u00edt\u00e1st, azaz az adatelemekben meg van hat\u00e1rozva, hogy mennyit kell t\u00e1rolni (napokban), mennyit kell t\u00e1rolni a trendekb\u0151l \u00e9s a v\u00e1ltoz\u00e1sok dinamik\u00e1j\u00e1b\u00f3l.<\/p>\n<p>Nem besz\u00e9ltem a TrendCache-r\u0151l, amelyet val\u00f3s id\u0151ben sz\u00e1m\u00edtunk: adatok \u00e9rkeznek, aggreg\u00e1ljuk \u0151ket egy \u00f3r\u00e1ra (f\u0151leg az utols\u00f3 \u00f3ra sz\u00e1madatai), a k\u00f6z\u00e9p\u00e9rt\u00e9k \/ minim\u00e1lis \u00e9s ezt \u00f3r\u00e1nk\u00e9nt egyszer r\u00f6gz\u00edtj\u00fck a v\u00e1ltoz\u00e1sok dinamik\u00e1j\u00e1nak t\u00e1bl\u00e1j\u00e1ba ('Trends'). A 'Housekeeper' elindul \u00e9s sima szelekt\u00e1l\u00e1sokkal t\u00f6rli az adatokat az adatb\u00e1zisb\u00f3l, ami nem mindig hat\u00e9kony.<\/p>\n<p>Hogyan \u00e9rthetj\u00fck meg, hogy ez nem hat\u00e9kony? A bels\u0151 folyamatok teljes\u00edtm\u00e9nygrafikonjain ezt a k\u00e9pet l\u00e1thatja:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/f413ec989491d4186a05c779978e2f6d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA History syncer folyamatosan lefoglalt (piros grafikon). \u00c9s a 'narancss\u00e1rga' grafikon, amely a felsz\u00ednen fut. Ez a 'Housekeeper', amely elindul, \u00e9s v\u00e1rja az adatb\u00e1zist, hogy elt\u00e1vol\u00edtsa az \u00f6sszes sort, amelyet megadott.<\/p>\n<p>Vegy\u00fcnk egy p\u00e9lda Item ID-t: t\u00f6r\u00f6lni kell az utols\u00f3 5000-et; term\u00e9szetesen indexek alapj\u00e1n. De \u00e1ltal\u00e1ban az adathalmaz el\u00e9g nagy \u2013 az adatb\u00e1zis akkor is leolvassa az adathordoz\u00f3r\u00f3l \u00e9s emeli a cache-be, ez pedig nagyon k\u00f6lts\u00e9ges m\u0171velet az adatb\u00e1zis sz\u00e1m\u00e1ra. A m\u00e9ret\u00e9t\u0151l f\u00fcgg\u0151en ez teljes\u00edtm\u00e9nyprobl\u00e9m\u00e1khoz vezethet.<\/p>\n<p>A 'Housekeeper' letilt\u00e1sa egyszer\u0171 m\u00f3don t\u00f6rt\u00e9nhet \u2013 van egy mindenki \u00e1ltal ismert webes fel\u00fclet\u00fcnk. A be\u00e1ll\u00edt\u00e1s az Administration general (be\u00e1ll\u00edt\u00e1sok a 'Housekeeper'-hez), ahol letiltjuk a bels\u0151 housekeepingt a bels\u0151 t\u00f6rt\u00e9nelem \u00e9s trendek sz\u00e1m\u00e1ra. Ennek megfelel\u0151en a 'Housekeeper' m\u00e1r nem kezeli ezt:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/c9dc3ca86e7fd0c1229f6b9bc5d31270.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMit lehet tenni tov\u00e1bb? Kikapcsolta, a grafikonok kiegyenl\u00edt\u0151dtek... Milyen tov\u00e1bbi probl\u00e9m\u00e1k mer\u00fclhetnek fel ebben az esetben? Mi seg\u00edthet?<\/p>\n<h3>Particion\u00e1l\u00e1s (szekcion\u00e1l\u00e1s)<\/h3>\n<p>\nEz \u00e1ltal\u00e1ban minden rel\u00e1ci\u00f3s adatb\u00e1zis eset\u00e9ben, amelyet felsoroltam, k\u00fcl\u00f6nb\u00f6z\u0151 m\u00f3don van be\u00e1ll\u00edtva. A MySQL saj\u00e1t technol\u00f3gi\u00e1j\u00e1val rendelkezik. De \u00f6sszess\u00e9g\u00e9ben nagyon hasonl\u00f3ak, ha a PostgreSQL 10 \u00e9s a MySQL-r\u00f3l besz\u00e9l\u00fcnk. Term\u00e9szetesen sok bels\u0151 k\u00fcl\u00f6nbs\u00e9g van abban, hogy mindezt hogyan val\u00f3s\u00edtj\u00e1k meg, \u00e9s hogyan befoly\u00e1solja mindez a teljes\u00edtm\u00e9nyt. De \u00e1ltal\u00e1ban egy \u00faj partici\u00f3 l\u00e9trehoz\u00e1sa is gyakran bizonyos probl\u00e9m\u00e1khoz vezet.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/729114d61794314e19383f09ee9b5d61.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz \u00f6n setup-j\u00e1t\u00f3l f\u00fcgg\u0151en (att\u00f3l, hogy mennyi adatot gener\u00e1l naponta), \u00e1ltal\u00e1ban a legminim\u00e1lisabbat \u00e1ll\u00edtj\u00e1k be \u2013 ez 1 nap \/ part\u00edci\u00f3, a \"trendek\" \u00e9s a v\u00e1ltoz\u00e1sok dinamik\u00e1ja eset\u00e9n pedig 1 h\u00f3nap \/ \u00faj part\u00edci\u00f3. Ez v\u00e1ltozhat, ha nagyon nagy a setup-ja.<\/p>\n<p>El\u0151sz\u00f6r is, besz\u00e9lj\u00fcnk a setup m\u00e9reteir\u0151l: 5 ezer \u00faj \u00e9rt\u00e9k m\u00e1sodpercenk\u00e9nt (nvps, ahogy mondj\u00e1k) m\u00e1r kis \"setup-nak\" sz\u00e1m\u00edt. A k\u00f6zepes \u2013 5-25 ezer \u00e9rt\u00e9k m\u00e1sodpercenk\u00e9nt. Mindent, ami enn\u00e9l magasabb, m\u00e1r nagy \u00e9s nagyon nagy telep\u00edt\u00e9seknek tekint\u00fcnk, amelyek nagyon alapos adatb\u00e1zis-be\u00e1ll\u00edt\u00e1st ig\u00e9nyelnek.<\/p>\n<p>Nagyon nagy telep\u00edt\u00e9sekn\u00e9l 1 nap nem biztos, hogy optim\u00e1lis. Szem\u00e9lyesen l\u00e1ttam MySQL part\u00edci\u00f3kat, amelyek 40 gigabyte-ot nyomtak egy nap alatt (\u00e9s m\u00e9g t\u00f6bbet is). Ez egy nagyon nagy adatmenyis\u00e9g, ami probl\u00e9m\u00e1khoz vezethet. Cs\u00f6kkenteni kell.<\/p>\n<h3>Mi\u00e9rt sz\u00fcks\u00e9ges a part\u00edcion\u00e1l\u00e1s?<\/h3>\n<p>\nMindenki tudja, mit jelent a part\u00edcion\u00e1l\u00e1s \u2013 ez a t\u00e1bl\u00e1zatok szekcion\u00e1l\u00e1sa. Gyakran ezek k\u00fcl\u00f6n f\u00e1jlok a lemezen \u00e9s a span-lek\u00e9rdez\u00e9sek. A part\u00edcion\u00e1l\u00e1s optimaliz\u00e1ltabb, ha egy part\u00edci\u00f3t v\u00e1laszt ki, ha az a szok\u00e1sos part\u00edcion\u00e1l\u00e1sba belef\u00e9r.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/4920fb3415733799f0a90b1bc7af0114.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\"Zabbix\" eset\u00e9ben p\u00e9ld\u00e1ul az intervallum alapj\u00e1n haszn\u00e1lj\u00e1k, teh\u00e1t haszn\u00e1ljuk a timestamp-ot (sz\u00e1m, az id\u0151 az epoch kezdet\u00e9t\u0151l). Be\u00e1ll\u00edt egy nap kezdet\u00e9t \/ v\u00e9g\u00e9t, \u00e9s ez a part\u00edci\u00f3. Ennek megfelel\u0151en, ha k\u00e9t napos adatokhoz f\u00e9r hozz\u00e1, azokat gyorsabban v\u00e1lasztj\u00e1k ki az adatb\u00e1zisb\u00f3l, mert csak egy f\u00e1jlt kell bet\u00f6lteni a gyors\u00edt\u00f3t\u00e1rba \u00e9s kiadni (nem egy nagy t\u00e1bl\u00e1zatot).<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/f5ee4e0b471eb5ebe701615aa617d66d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSok adatb\u00e1zis szint\u00e9n felgyors\u00edtja a besz\u00far\u00e1st (az egy gyermek t\u00e1bl\u00e1ba). Am\u00edg elvontan besz\u00e9lek, de ez is lehets\u00e9ges. A part\u00edcion\u00e1l\u00e1s gyakran seg\u00edt.<\/p>\n<h3>Elasticsearch a NoSQL sz\u00e1m\u00e1ra<\/h3>\n<p>\nNemr\u00e9g, a 3.4-es verzi\u00f3ban, bevezett\u00fck a NoSQL megold\u00e1st. Lehet\u0151v\u00e9 tett\u00fck, hogy \u00edrjon az Elasticsearch-be. K\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpusokat \u00edrhat: v\u00e1laszthat \u2013 vagy sz\u00e1mokat, vagy valamilyen jelz\u00e9seket \u00edrjon; van string-text, logokat is \u00edrhat az Elasticsearch-be... Ez\u00e9rt a webes fel\u00fclet m\u00e1r az Elasticsearch-hez is kapcsol\u00f3dni fog. Ez bizonyos esetekben nagyszer\u0171en m\u0171k\u00f6dik, de jelenleg ezt haszn\u00e1lni lehet.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/24fe7d19c9e42474cd786ba59846c18c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>TimescaleDB. Hipert\u00e1bl\u00e1k<\/h3>\n<p>\nA 4.4.2-ben figyelmet ford\u00edtottunk egy dologra, ami a TimescaleDB. Mi ez? Ez egy kieg\u00e9sz\u00edt\u0151 a PostgreSQL-hez, teh\u00e1t nat\u00edv PostgreSQL interf\u00e9sze van. Plusz, ez a kieg\u00e9sz\u00edt\u0151 lehet\u0151v\u00e9 teszi, hogy sokkal hat\u00e9konyabban dolgozzunk az id\u0151beli adatokkal, \u00e9s automatikus part\u00edcion\u00e1l\u00e1st k\u00edn\u00e1l. Hogyan n\u00e9z ki ez:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/de921f06453476215b6240ab9da6fae1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz egy hypertable - egy ilyen fogalom l\u00e9tezik a Timescale-ban. Ez egy hiper-t\u00e1bla, amelyet l\u00e9trehoz, \u00e9s chunkok (chunk) tal\u00e1lhat\u00f3k benne. A chunkok part\u00edci\u00f3k, ezek gyerek-t\u00e1bl\u00e1k, ha nem t\u00e9vedek. Ez t\u00e9nyleg hat\u00e9kony.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/719eb3f5d8c9f57544dfc4010850610c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>TimescaleDB \u00e9s PostgreSQL<\/h3>\n<p>\nA TimescaleDB gy\u00e1rt\u00f3i biztos\u00edtj\u00e1k, hogy a lek\u00e9rdez\u00e9sek, k\u00fcl\u00f6n\u00f6sen az insert-ek feldolgoz\u00e1s\u00e1hoz sokkal helyesebb algoritmust haszn\u00e1lnak, amely lehet\u0151v\u00e9 teszi, hogy a teljes\u00edtm\u00e9ny nagyj\u00e1b\u00f3l \u00e1lland\u00f3 maradjon a n\u00f6vekv\u0151 adatk\u00e9szlet-b\u0151v\u00edt\u00e9s sor\u00e1n. Teh\u00e1t 200 milli\u00f3 sor ut\u00e1n a PostgreSQL \u00e1ltal\u00e1ban nagyon lelassul, \u00e9s a teljes\u00edtm\u00e9nye sz\u00f3 szerint null\u00e1ra cs\u00f6kken, m\u00edg a Timescale lehet\u0151v\u00e9 teszi az insert-ek nagyon hat\u00e9kony beilleszt\u00e9s\u00e9t b\u00e1rmilyen mennyis\u00e9g\u0171 adaton.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/a613d505a9dfe6008551ce981da7b24e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Hogyan telep\u00edthet\u0151 a TimescaleDB? Minden egyszer\u0171!<\/h3>\n<p>\nA dokument\u00e1ci\u00f3j\u00e1ban van, le van \u00edrva - b\u00e1rmilyen csomagb\u00f3l telep\u00edthet\u0151... F\u00fcgg a hivatalos PostgreSQL csomagokt\u00f3l. K\u00e9zzel is le lehet ford\u00edtani. \u00cdgy alakult, hogy nekem magamnak kellett ford\u00edtani az adatb\u00e1zishoz.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/6767927fa92260103d318f9aa70ef5b3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA Zabbix eset\u00e9ben egyszer\u0171en aktiv\u00e1ljuk az Extention-t. Azt hiszem, hogy azok, akik haszn\u00e1lt\u00e1k a PostgreSQL-ben az Extention-t... Csak aktiv\u00e1lni kell az Extention-t, l\u00e9trehozni azt a Zabbix adatb\u00e1zis sz\u00e1m\u00e1ra, amelyet haszn\u00e1lnak.<\/p>\n<p>\u00c9s az utols\u00f3 l\u00e9p\u00e9s...<\/p>\n<h3>TimescaleDB. T\u00f6rt\u00e9neti t\u00e1bl\u00e1k migr\u00e1l\u00e1sa<\/h3>\n<p>\nHypertable-t kell l\u00e9trehoznia. Ehhez van egy k\u00fcl\u00f6n funkci\u00f3 - Create hypertable. Az els\u0151 param\u00e9terben meg kell adni azt a t\u00e1bl\u00e1t, amely sz\u00fcks\u00e9ges ebben az adatb\u00e1zisban (amelyhez hypertable-t szeretne l\u00e9trehozni).<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/47350f79fd9829c12685c1df8f0ff9a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA mez\u0151, amely alapj\u00e1n l\u00e9tre kell hozni, \u00e9s chunk_time_interval (ez az id\u0151szak, amelyet a chunkokhoz (part\u00edci\u00f3khoz) haszn\u00e1lnak). 86 400 \u2013 ez egy nap. <\/p>\n<p>A migrate_data param\u00e9ter: ha igazra \u00e1ll\u00edtja, akkor az \u00f6sszes jelenlegi adatot \u00e1tkonvert\u00e1lja a el\u0151re l\u00e9trehozott chunkokba.<\/p>\n<p>Szem\u00e9ly szerint haszn\u00e1ltam a migrate_data-t - ez id\u0151ig\u00e9nyes, a m\u00e9rett\u0151l f\u00fcgg\u0151en, amekkora az adatb\u00e1zisa. Nekem t\u00f6bb mint egy terab\u00e1jt volt \u2013 a l\u00e9trehoz\u00e1sa t\u00f6bb mint egy \u00f3r\u00e1ig tartott. Bizonyos esetekben a tesztel\u00e9s sor\u00e1n t\u00f6r\u00f6ltem a t\u00f6rt\u00e9neti adatokat a sz\u00f6vegb\u0151l (history_text) \u00e9s a strungb\u00f3l (history_str), hogy ne kelljen \u00e1tkonvert\u00e1lnom \u2013 ezek val\u00f3j\u00e1ban nem \u00e9rdekeltek.<\/p>\n<p>Az utols\u00f3 friss\u00edt\u00e9st a db_extension-\u00fcnkben v\u00e9gezz\u00fck: a timescaledb-t \u00e1ll\u00edtjuk be, hogy az adatb\u00e1zis \u00e9s k\u00fcl\u00f6n\u00f6sen a \"Zabbix\" felismerje, hogy van db_extension. Aktiv\u00e1lja \u00e9s helyesen haszn\u00e1lja a szintaxist \u00e9s a lek\u00e9rdez\u00e9seket az adatb\u00e1zisra, kihaszn\u00e1lva a TimescaleDB-hez sz\u00fcks\u00e9ges \"funkci\u00f3kat\".<\/p>\n<h3>Szerver konfigur\u00e1ci\u00f3<\/h3>\n<p>\nK\u00e9t szervert haszn\u00e1ltam. Az els\u0151 szerver egy viszonylag kis virtu\u00e1lis g\u00e9p, 20 processzorral \u00e9s 16 gigab\u00e1jt RAM-mal. Ezen be\u00e1ll\u00edtottam a PostgreSQL 10.8-at:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/990805374a2380a5c645c578404489bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz oper\u00e1ci\u00f3s rendszer Debian volt, a f\u00e1jlrendszer \u2013 xfs. Minim\u00e1lis be\u00e1ll\u00edt\u00e1sokat v\u00e9geztem, hogy ezt az adatb\u00e1zist haszn\u00e1ljam, lesz\u00e1m\u00edtva, hogy az \"Zabbix\" is haszn\u00e1lni fogja. Ugyanezen a g\u00e9pen volt a \"Zabbix\" szerver, a PostgreSQL \u00e9s a terhel\u00e9sgener\u00e1tor \u00fcgyn\u00f6k\u00f6k.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/a6efa9ab9cd58f0061d04f13fe31018c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n50 akt\u00edv \u00fcgyn\u00f6k\u00f6t haszn\u00e1ltam, amelyek LoadableModule-t haszn\u00e1lnak a k\u00fcl\u00f6nb\u00f6z\u0151 eredm\u00e9nyek gyors gener\u00e1l\u00e1s\u00e1ra. \u0150k gener\u00e1lt\u00e1k a sorokat, sz\u00e1mokat \u00e9s \u00edgy tov\u00e1bb. Nagy mennyis\u00e9g\u0171 adatot t\u00f6lt\u00f6ttem az adatb\u00e1zisba. Kezdetben a konfigur\u00e1ci\u00f3 5000 adatpontot tartalmazott minden hoszton, \u00e9s k\u00f6r\u00fclbel\u00fcl minden adatpont tartalmazott egy kiold\u00f3t \u2013 hogy val\u00f3s be\u00e1ll\u00edt\u00e1s legyen. N\u00e9ha m\u00e9g t\u00f6bb mint egy kiold\u00f3 sz\u00fcks\u00e9ges a haszn\u00e1lathoz.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/d5a3c306402e08bf2532eb6203a4aab4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA friss\u00edt\u00e9si intervallumot \u00e9s mag\u00e1t a terhel\u00e9st \u00fagy szab\u00e1lyoztam, hogy nemcsak 50 \u00fcgyn\u00f6k\u00f6t haszn\u00e1ltam (tov\u00e1bbiakat adtam hozz\u00e1), hanem dinamikus adatpontokkal is, \u00e9s a friss\u00edt\u00e9si intervallumot 4 m\u00e1sodpercre cs\u00f6kkentettem.<\/p>\n<h3>Teljes\u00edtm\u00e9nyteszt. PostgreSQL: 36 ezer NVP.<\/h3>\n<p>\nAz els\u0151 ind\u00edt\u00e1s, az els\u0151 be\u00e1ll\u00edt\u00e1som tiszta PostgreSQL 10-en volt ezen a hardveren (35 ezer \u00e9rt\u00e9k m\u00e1sodpercenk\u00e9nt). \u00d6sszess\u00e9g\u00e9ben, ahogy a k\u00e9perny\u0151n l\u00e1tszik, az adatok besz\u00far\u00e1sa m\u00e1sodperc t\u00f6red\u00e9keit veszi ig\u00e9nybe \u2013 minden j\u00f3l \u00e9s gyorsan zajlik, SSD meghajt\u00f3k (200 gigab\u00e1jt). Az egyetlen probl\u00e9ma, hogy a 20 GB el\u00e9g gyorsan megtelik.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/6803a64fedd26093b9117a036d2993ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00f6bb ilyen grafikon lesz a j\u00f6v\u0151ben. Ez a \"Zabbix\" szerver teljes\u00edtm\u00e9ny\u00e9nek standard ir\u00e1ny\u00edt\u00f3pultja.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/081cc11c6bf42db3f8f16b6cc4e6ee0c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz els\u0151 grafikon \u2013 az \u00e9rt\u00e9kek m\u00e1sodpercenk\u00e9nti sz\u00e1ma (k\u00e9k, bal fels\u0151 sarok), 35 ezer \u00e9rt\u00e9k ebben az esetben. Ez (a k\u00f6z\u00e9ps\u0151 fels\u0151 r\u00e9szben) a gy\u0171jt\u00e9si folyamatok terhel\u00e9se, m\u00edg ez (a jobb fels\u0151 sarokban) az \u00e9ppen bels\u0151 folyamatok terhel\u00e9se: history syncers \u00e9s housekeeper, ami itt (a k\u00f6z\u00e9ps\u0151 als\u00f3 r\u00e9szben) el\u00e9g sok\u00e1ig futott.<\/p>\n<p>Ez a grafikon (k\u00f6z\u00e9pen alul) mutatja a ValueCache haszn\u00e1lat\u00e1t - h\u00e1ny tal\u00e1lat van a ValueCache-ben a triggerekn\u00e9l (t\u00f6bb ezer \u00e9rt\u00e9k m\u00e1sodpercenk\u00e9nt). Egy m\u00e1sik fontos grafikon a negyedik (bal alul), amely a HistoryCache haszn\u00e1lat\u00e1t mutatja be, amir\u0151l m\u00e1r besz\u00e9ltem, amely a DB-be val\u00f3 beilleszt\u00e9s el\u0151tt m\u0171k\u00f6dik mint puffert.<\/p>\n<h3>Teljes\u00edtm\u00e9nyteszt. PostgreSQL: 50 ezer NVP<\/h3>\n<p>\nEzut\u00e1n 50 ezer \u00e9rt\u00e9kre emeltem a terhel\u00e9st ugyanazon a hardveren. A \u00abHousekeeper\u00bb terhel\u00e9se mellett 10 ezer \u00e9rt\u00e9k m\u00e1r 2-3 m\u00e1sodperc alatt lett be\u00edrva sz\u00e1m\u00edt\u00e1ssal. Ez l\u00e1that\u00f3 a k\u00f6vetkez\u0151 k\u00e9perny\u0151felv\u00e9telen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/80824da986dbee2f8d5ebe0ead4fbcfd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA \u00abHousekeeper\u00bb m\u00e1r zavarni kezdte a m\u0171k\u00f6d\u00e9st, de \u00f6sszess\u00e9g\u00e9ben a history-szinkroniz\u00e1l\u00f3k terhel\u00e9se m\u00e9g mindig 60%-on \u00e1ll (a harmadik grafikon, fent jobbra). A HistoryCache m\u00e1r a \u00abHousekeeper\u00bb m\u0171k\u00f6d\u00e9se alatt akt\u00edvan kezdett felt\u00f6lt\u0151dni (bal alul). Ez k\u00f6r\u00fclbel\u00fcl f\u00e9l gigab\u00e1jt volt, 20%-ra t\u00f6lt\u0151d\u00f6tt.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/9e1bcd4f3b9f3e8a1c9a36b2083ec61b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Teljes\u00edtm\u00e9nyteszt. PostgreSQL: 80 ezer NVP<\/h3>\n<p>\nEzut\u00e1n 80 ezer \u00e9rt\u00e9kre emeltem a terhel\u00e9st:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/13ae1589d6b9d35b4dda9c6c7d989cc2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz k\u00f6r\u00fclbel\u00fcl 400 ezer adatot, 280 ezer triggot jelentett. Ahogy l\u00e1that\u00f3, a history-szinkroniz\u00e1l\u00f3k (30 darab volt) terhel\u00e9se m\u00e1r el\u00e9gg\u00e9 magas volt. Ezut\u00e1n k\u00fcl\u00f6nb\u00f6z\u0151 param\u00e9tereket emeltem: history-szinkroniz\u00e1l\u00f3k, cache\u2026 Ezen a hardveren a history-szinkroniz\u00e1l\u00f3k terhel\u00e9se m\u00e1r a maximum fel\u00e9 k\u00f6zel\u00edtett, gyakorlatilag \u201ea polcon\u201d - k\u00f6vetkez\u00e9sk\u00e9ppen a HistoryCache nagyon magas terhel\u00e9sre ment.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/0ec528256c8fa7b16e1c7c95c8119535.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz id\u0151 alatt figyeltem az \u00f6sszes rendszerparam\u00e9tert (hogy a CPU hogyan van kihaszn\u00e1lva, a RAM) \u00e9s felfedeztem, hogy a lemez kihaszn\u00e1lts\u00e1ga maxim\u00e1lis volt - a maxim\u00e1lis kapacit\u00e1s\u00e1t kihaszn\u00e1lva, ezen a hardveren, ezen a virtu\u00e1lis g\u00e9pen. A \u00abPostgres\u00bb ilyen intenzit\u00e1s mellett akt\u00edvan kezdett adatokat t\u00f6r\u00f6lni, \u00e9s a lemez m\u00e1r nem tudta tartani az \u00edr\u00e1st, olvas\u00e1st...<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/0809dbd7638e7ee003ea24c611984a0c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFogtam egy m\u00e1sik szervert, amely m\u00e1r 48 processzorral \u00e9s 128 gigab\u00e1jt RAM-mal rendelkezett:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/53410b502a4574aac5d40f1a2a6d3f42.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzen k\u00edv\u00fcl m\u00e9g \u201efeltuningoltam\u201d - beraktam a History szinkroniz\u00e1l\u00f3t (60 darab) \u00e9s el\u00e9rtem a megfelel\u0151 teljes\u00edtm\u00e9nyt. Gyakorlatilag nem vagyunk \u201ea polcon\u201d, de ez m\u00e1r val\u00f3sz\u00edn\u0171leg a teljes\u00edtm\u00e9ny hat\u00e1ra, ahol m\u00e1r l\u00e9pni kell valamit.<\/p>\n<h3>Teljes\u00edtm\u00e9nyteszt. TimescaleDB: 80 ezer NVP<\/h3>\n<p>\nA f\u0151 feladatom az volt - haszn\u00e1lni a TimescaleDB-t. Minden grafikonon l\u00e1that\u00f3 a zuhan\u00e1s:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/b0064068895a34b93b5aa6771aba05cb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzek a hib\u00e1k pontosan az adatmigr\u00e1ci\u00f3k. Ezt k\u00f6vet\u0151en a Zabbix szerverben a hibaelh\u00e1r\u00edt\u00f3k terhel\u00e9si profilja, ahogy l\u00e1tj\u00e1k, jelent\u0151sen megv\u00e1ltozott. Ez gyakorlatilag h\u00e1romszor gyorsabban teszi lehet\u0151v\u00e9 az adatok bet\u00f6lt\u00e9s\u00e9t \u00e9s kevesebb HistoryCache-t haszn\u00e1l \u2013 ennek megfelel\u0151en az adatok id\u0151ben \u00e9rkeznek. Ism\u00e9t, 80 ezer \u00e9rt\u00e9k m\u00e1sodpercenk\u00e9nt \u2013 ez egy el\u00e9g magas sebess\u00e9g (b\u00e1r nem a Yandex sz\u00e1m\u00e1ra). \u00d6sszess\u00e9g\u00e9ben ez egy el\u00e9g nagy be\u00e1ll\u00edt\u00e1s, egy szerverrel.<\/p>\n<h3>PostgreSQL teljes\u00edtm\u00e9nyteszt: 120 ezer NVP<\/h3>\n<p>\nEzut\u00e1n megemeltem az adatelemek sz\u00e1m\u00e1t f\u00e9lmilli\u00f3ra, \u00e9s az eredm\u00e9ny\u00fcl kapott \u00e9rt\u00e9k 125 ezer m\u00e1sodpercenk\u00e9nt:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/7d0cf2ef7c6691c1bbf4b90afd34e4bb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c9s ilyen grafikonokat kaptam:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/9c09333a50e016921a8a5b70e00397a1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAlapj\u00e1n ez egy m\u0171k\u00f6d\u0151 be\u00e1ll\u00edt\u00e1s, amely el\u00e9g hossz\u00fa ideig k\u00e9pes m\u0171k\u00f6dni. De mivel csak m\u00e1sf\u00e9l terab\u00e1jtos lemezem volt, azt p\u00e1r nap alatt felhaszn\u00e1lom. A legfontosabb, hogy ek\u00f6zben \u00faj part\u00edci\u00f3k k\u00e9sz\u00fcltek a TimescaleDB-ben, \u00e9s ez a teljes\u00edtm\u00e9ny szempontj\u00e1b\u00f3l teljesen \u00e9szrev\u00e9tlen\u00fcl zajlott, ami nem mondhat\u00f3 el a MySQL-r\u0151l.<\/p>\n<p>\u00c1ltal\u00e1ban a part\u00edci\u00f3kat \u00e9jszaka hozz\u00e1k l\u00e9tre, mert ez blokkolhatja az adatbevitelt \u00e9s a t\u00e1bl\u00e1k kezel\u00e9s\u00e9t, ami a szolg\u00e1ltat\u00e1s roml\u00e1s\u00e1t eredm\u00e9nyezheti. Ebben az esetben ez nem t\u00f6rt\u00e9nt meg! A f\u0151 feladat az volt, hogy tesztelj\u00fck a TimescaleDB lehet\u0151s\u00e9geit. Az eredm\u00e9ny: 120 ezer \u00e9rt\u00e9k m\u00e1sodpercenk\u00e9nt.<\/p>\n<p>A k\u00f6z\u00f6ss\u00e9gben is vannak p\u00e9ld\u00e1k:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/66aa6b1d4c559d12082e4d91b6a1ca10.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nValaki szint\u00e9n bekapcsolta a TimescaleDB-t, \u00e9s az io.weight haszn\u00e1lat cs\u00f6kkent a processzoron; \u00e9s a bels\u0151 folyamatok elemeinek haszn\u00e1lata is cs\u00f6kkent a TimescaleDB bekapcsol\u00e1sa miatt. R\u00e1ad\u00e1sul ezek hagyom\u00e1nyos merevlemezek, azaz egy \u00e1tlagos virtu\u00e1lis g\u00e9p hagyom\u00e1nyos lemezekkel (nem SSD)!<\/p>\n<p>Valamilyen kis be\u00e1ll\u00edt\u00e1sokhoz, amelyek a lemez teljes\u00edtm\u00e9ny\u00e9n \u00e1llnak meg, a TimescaleDB, \u00fagy gondolom, nagyon j\u00f3 megold\u00e1s. J\u00f3l lehet\u0151v\u00e9 teszi, hogy tov\u00e1bbra is dolgozzunk, miel\u0151tt gyorsabb hardverre migr\u00e1ln\u00e1nk az adatb\u00e1zishoz.<\/p>\n<p>Mindenkit megh\u00edvlak az esem\u00e9nyeinkre: Konferencia \u2013 Moszkv\u00e1ban, cs\u00facs \u2013 Rig\u00e1ban. Haszn\u00e1lja a csatorn\u00e1inkat \u2013 Telegram, f\u00f3rum, IRC. Ha k\u00e9rd\u00e9se van \u2013 j\u00f6jj\u00f6n el hozz\u00e1nk a pulthoz, besz\u00e9lgess\u00fcnk mindenr\u0151l.<\/p>\n<h3>K\u00e9rd\u00e9sek a k\u00f6z\u00f6ns\u00e9gt\u0151l<\/h3>\n<p>\nK\u00e9rd\u00e9s a k\u00f6z\u00f6ns\u00e9gt\u0151l (a tov\u00e1bbiakban: A): \u2013 Ha a TimescaleDB annyira egyszer\u0171en konfigur\u00e1lhat\u00f3, \u00e9s ilyen teljes\u00edtm\u00e9nyn\u00f6veked\u00e9st biztos\u00edt, akkor tal\u00e1n ezt \u00e9rdemes lenne a legjobb gyakorlatk\u00e9nt haszn\u00e1lni a Zabbix \u00e9s a PostgreSQL be\u00e1ll\u00edt\u00e1s\u00e1n\u00e1l? Vannak-e valamilyen buktat\u00f3k vagy h\u00e1tr\u00e1nyai ennek a megold\u00e1snak, vagy igaz\u00e1b\u00f3l, ha \u00e9n Zabbixot akarok csin\u00e1lni, nyugodtan v\u00e1laszthatom a PostgreSQL-t, azonnal telep\u00edtem a Timescale-t, haszn\u00e1lom, \u00e9s nem kell agg\u00f3dnom semmilyen probl\u00e9ma miatt?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/314845a019724806283a957b15d857cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>AG:<\/b> \u2013 Igen, azt mondan\u00e1m, hogy ez egy j\u00f3 aj\u00e1nl\u00e1s: a PostgreSQL-t azonnal haszn\u00e1lni a TimescaleDB kiterjeszt\u00e9ssel. Ahogy m\u00e1r kor\u00e1bban is eml\u00edtettem, sok j\u00f3 v\u00e9lem\u00e9ny \u00e9rkezett, annak ellen\u00e9re, hogy ez a \"funkci\u00f3\" k\u00eds\u00e9rleti. De val\u00f3j\u00e1ban a tesztek azt mutatj\u00e1k, hogy ez egy nagyszer\u0171 megold\u00e1s (a TimescaleDB-vel), \u00e9s \u00fagy gondolom, hogy ez fejl\u0151dni fog! Figyelemmel k\u00f6vetj\u00fck, hogyan fejl\u0151dik ez a kiterjeszt\u00e9s, \u00e9s m\u00f3dos\u00edtjuk, ami sz\u00fcks\u00e9ges.<\/p>\n<p>M\u00e9g a fejleszt\u00e9s alatt is t\u00e1maszkodtunk egy j\u00f3l ismert \"funkci\u00f3ra\": ott kicsit m\u00e1sk\u00e9pp lehetett dolgozni a chunk-kkal. De azt\u00e1n ezt k\u00f6vetkez\u0151 kiad\u00e1sban elt\u00e1vol\u00edtott\u00e1k, \u00e9s m\u00e1r nem tudtunk erre a k\u00f3dra t\u00e1maszkodni. Azt javaslom, hogy sok be\u00e1ll\u00edt\u00e1sn\u00e1l haszn\u00e1lja ezt a megold\u00e1st. Ha MySQL-t haszn\u00e1l... K\u00f6zepes be\u00e1ll\u00edt\u00e1sokra b\u00e1rmelyik megold\u00e1s j\u00f3l m\u0171k\u00f6dik.<\/p>\n<p><b>A:<\/b> \u2013 Az utols\u00f3 grafikonokon, amik a k\u00f6z\u00f6ss\u00e9gt\u0151l sz\u00e1rmaznak, volt egy grafikon a \"Housekeeper\"-rel:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" src=\"\/wp-content\/uploads\/2020\/01\/d01549b6b9b97d8bdf5372efe05d9039.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFolytatta a munk\u00e1j\u00e1t. Mit csin\u00e1l a \"Housekeeper\" a TimescaleDB eset\u00e9ben?<\/p>\n<p><b>AG:<\/b> \u2013 Jelenleg nem tudom pontosan megmondani \u2013 megn\u00e9zem a k\u00f3dot, \u00e9s r\u00e9szletesebben fogok nyilatkozni. A TimescaleDB k\u00e9r\u00e9seit nem az adatok chunk-jainak elt\u00e1vol\u00edt\u00e1s\u00e1ra haszn\u00e1lja, hanem valamilyen aggreg\u00e1l\u00e1sra. M\u00e9g nem vagyok k\u00e9sz v\u00e1laszolni erre a technikai k\u00e9rd\u00e9sre. A standon ma vagy holnap pontos\u00edtjuk.<\/p>\n<p><b>A:<\/b> \u2013 Nekem hasonl\u00f3 k\u00e9rd\u00e9sem van \u2013 a Timescale m\u0171veletek t\u00f6rl\u00e9s\u00e9nek teljes\u00edtm\u00e9ny\u00e9r\u0151l.<br \/>\nA (v\u00e1lasz a k\u00f6z\u00f6ns\u00e9gt\u0151l): \u2013 Amikor adatokat t\u00f6r\u00f6l a t\u00e1bl\u00e1zatb\u00f3l, ha ezt a delete paranccsal teszi, akkor v\u00e9gig kell mennie a t\u00e1bl\u00e1zaton \u2013 t\u00f6r\u00f6lni, tiszt\u00edtani, mindent megjel\u00f6lni a j\u00f6v\u0151beli v\u00e1kuum\u00e9rt. A Timescale-ban, mivel chunk-jai vannak, le tudja dobni. Durv\u00e1n sz\u00f3lva, egyszer\u0171en mondja a f\u00e1jlnak, ami a big data-ben van: \"T\u00f6r\u00f6lni!\"<\/p>\n<p>A \u00abTimeScale\u00bb egyszer\u0171en meg\u00e9rti, hogy ilyen chunk m\u00e1r nincs. Mivel integr\u00e1l\u00f3dik a lek\u00e9rdez\u00e9s \u00fctemez\u0151be, a hook-okon kereszt\u00fcl \u00e9szleli az \u00d6n \u00e1ltal megadott felt\u00e9teleket a select-ben vagy m\u00e1s m\u0171veletekben, \u00e9s azonnal \u00e9rti, hogy e chunk m\u00e1r nincs \u2013 \u201eT\u00f6bb\u00e9 nem megyek oda!\u201d (nincsenek adatok). Ennyi! Teh\u00e1t a t\u00e1blaszkennel\u00e9st a bin\u00e1ris f\u00e1jl t\u00f6rl\u00e9s\u00e9re cser\u00e9lik ki, ez\u00e9rt ez gyors.<\/p>\n<p><b>A:<\/b> \u2013 Kor\u00e1bban m\u00e1r \u00e9rintett\u00fck az SQL n\u00e9lk\u00fcli t\u00e9m\u00e1t. Amennyire \u00e9rtem, a \u00abZabbix\u00bb-nak nem igaz\u00e1n sz\u00fcks\u00e9ges m\u00f3dos\u00edtani az adatokat, \u00e9s az eg\u00e9sz ink\u00e1bb egy napl\u00f3f\u00e9l\u00e9nek sz\u00e1m\u00edt. Lehet-e haszn\u00e1lni olyan speci\u00e1lis adatb\u00e1zisokat, amelyek nem tudj\u00e1k v\u00e1ltoztatni az adataikat, de sokkal gyorsabban k\u00e9pesek t\u00e1rolni, gy\u0171jteni, szolg\u00e1ltatni - p\u00e9ld\u00e1ul a Clickhouse, esetleg valami Kafka-szer\u0171t? A Kafka is log, ugye! Integr\u00e1lhat\u00f3ak valahogy?<\/p>\n<p><b>AG:<\/b> \u2013 Az export\u00e1l\u00e1s lehets\u00e9ges. Van egy bizonyos \u201efunkci\u00f3nk\u201d a 3.4-es verzi\u00f3 \u00f3ta: \u00edrhatsz f\u00e1jlokba minden t\u00f6rt\u00e9nelmi f\u00e1jlt, esem\u00e9nyt \u00e9s m\u00e1s egyebet; azt\u00e1n valamilyen feldolgoz\u00f3val tov\u00e1bb\u00edthatod egy m\u00e1sik adatb\u00e1zisba. Val\u00f3j\u00e1ban sokan \u00e1talak\u00edtj\u00e1k \u00e9s k\u00f6zvetlen\u00fcl az adatb\u00e1zisba \u00edrnak. A\u76f4\u64ad t\u00f6rt\u00e9neti szinkroniz\u00e1l\u00f3k mindezt f\u00e1jlokba \u00edrj\u00e1k, forgatj\u00e1k ezeket a f\u00e1jlokat \u00e9s hasonl\u00f3k, \u00e9s ezeket \u00e1t lehet rakni a \u201eClickhouse\u201d-ba. Nem tudok a tervekr\u0151l, de lehet, hogy a NoSQL megold\u00e1sok tov\u00e1bbi t\u00e1mogat\u00e1sa (mint a \u201eClickhouse\u201d) folytat\u00f3dni fog.<\/p>\n<p><b>A:<\/b> \u2013 Teh\u00e1t igaz\u00e1b\u00f3l teljesen meg lehet szabadulni a Postgres-t\u0151l?<\/p>\n<p><b>AG:<\/b> \u2013 Term\u00e9szetesen a legnehezebb r\u00e9sze a \u00abZabbix\u00bb-nak a t\u00f6rt\u00e9neti t\u00e1bl\u00e1k, amelyek a legt\u00f6bb probl\u00e9m\u00e1t okozz\u00e1k, \u00e9s az esem\u00e9nyek. Ebben az esetben, ha nem t\u00e1rolja hossz\u00fa t\u00e1von az esem\u00e9nyeket, \u00e9s a trendek t\u00f6rt\u00e9nelm\u00e9t valamilyen m\u00e1s gyors t\u00e1rol\u00f3ban tartja, akkor \u00f6sszess\u00e9g\u00e9ben nem lesz probl\u00e9ma.<\/p>\n<p><b>A:<\/b> \u2013 Meg tudn\u00e1 mondani, mennyivel gyorsabban fog m\u0171k\u00f6dni, ha \u00e1t\u00e1llunk a \u00abClickhouse\u00bb-ra, mondjuk?<\/p>\n<p><b>AG:<\/b> \u2013 Nem teszteltem. Szerintem a legal\u00e1bb ugyanolyan sz\u00e1mokat el lehet majd \u00e9rni viszonylag egyszer\u0171en, figyelembe v\u00e9ve, hogy a \u00abClickhouse\u00bb-nak saj\u00e1t fel\u00fclete van, de pontos v\u00e1laszt nem tudok adni. Jobb lenne tesztelni. Minden a konfigur\u00e1ci\u00f3t\u00f3l f\u00fcgg: h\u00e1ny hosztja van \u00e9s hasonl\u00f3k. Az adatok beilleszt\u00e9se egy dolog, de azokat is el kell \u00e9rni \u2013 Grafana vagy valami m\u00e1s seg\u00edts\u00e9g\u00e9vel.<\/p>\n<p><b>A:<\/b> \u2013 Teh\u00e1t a sz\u00f3ban forg\u00f3 dolog egyenl\u0151 k\u00fczdelmet jelent, nem pedig \u00f3ri\u00e1si el\u0151nyt ezeknek a gyors adatb\u00e1zisoknak?<\/p>\n<p><b>AG:<\/b> \u2013 Azt hiszem, amikor integr\u00e1lunk, akkor pontosabb teszteink lesznek.<\/p>\n<p><b>A:<\/b> \u2013 Hol maradt a r\u00e9gi j\u00f3 RRD? Mi\u00e9rt kellett \u00e1tt\u00e9rni az SQL adatb\u00e1zisokra? Kezdetben minden metrika RRD-be gy\u0171lt.<\/p>\n<p><b>AG:<\/b> \u2013 A \u00abZabbix\u00bb-ban az RRD, tal\u00e1n egy nagyon r\u00e9gi verzi\u00f3ban volt. Mindig is l\u00e9teztek SQL alap\u00fa adatb\u00e1zisok \u2013 klasszikus megk\u00f6zel\u00edt\u00e9s. A klasszikus megk\u00f6zel\u00edt\u00e9s a MySQL, PostgreSQL (m\u00e1r nagyon r\u00e9g\u00f3ta l\u00e9teznek). Szinte soha nem haszn\u00e1ltuk az SQL adatb\u00e1zisokkal \u00e9s az RRD-vel k\u00f6z\u00f6s interface-t.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Andrei Gushchin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv partik\u00e1l\u00e1s\" 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=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" 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>Egy kis rekl\u00e1m \ud83d\ude42<\/h3>\n<p>\nK\u00f6sz\u00f6nj\u00fck, hogy vel\u00fcnk maradt\u00e1l. Tetszenek a cikkeink? Szeretn\u00e9l t\u00f6bb \u00e9rdekes anyagot l\u00e1tni? T\u00e1mogass minket, \u00e9s rendel\u00e9s lead\u00e1s\u00e1val vagy ismer\u0151s\u00f6knek aj\u00e1nl\u00e1ssal seg\u00edts nek\u00fcnk. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">Felh\u0151alap\u00fa VPS fejleszt\u0151knek 4,99 doll\u00e1rt\u00f3l<\/a><\/noindex>, <b>Egyed\u00fcl\u00e1ll\u00f3 alternat\u00edv\u00e1ja az entry-level szervereknek, amelyet \u00d6nnek tal\u00e1ltunk ki:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Minden igazs\u00e1g a VPS (KVM) E5-2697 v3 (6 mag) 10GB DDR4 480GB SSD 1Gbps \u00e1ron 19 doll\u00e1rt\u00f3l, vagy hogyan oszd fel helyesen a szervert?<\/a><\/noindex> (el\u00e9rhet\u0151k RAID1 \u00e9s RAID10 opci\u00f3k, ak\u00e1r 24 magig \u00e9s 40GB DDR4-ig).<\/p>\n<p><b>Dell R730xd k\u00e9tszer olcs\u00f3bban a Tier IV Equinix adatk\u00f6zpontban Amszterdamban?<\/b> Csak n\u00e1lunk <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 199 doll\u00e1rt\u00f3l<\/a><\/noindex> Hollandi\u00e1ban! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 99 doll\u00e1rt\u00f3l!<\/b><\/b> Olvasd el ezt <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Hogyan \u00e9p\u00edts\u00fcnk v\u00e1llalati szint\u0171 infrastrukt\u00far\u00e1t Dell R730xd E5-2650 v4 szerverekkel, amelyek k\u00f6lts\u00e9ge 9000 eur\u00f3ban van megszabva?<\/a><\/noindex><br \/>\n<br \/>Forr\u00e1s: <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\/hu\/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=\"hu_HU\" \/>\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\/hu\/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++, Andrej Gussin (Zabbix): magas teljes\u00edtm\u00e9ny \u00e9s nat\u00edv part\u00edcion\u00e1l\u00e1s | ProHoster","description":"Megvizsg\u00e1ljuk a Zabbix m\u0171k\u00f6d\u00e9s\u00e9t a TimescaleDB adatb\u00e1zissal backendk\u00e9nt. Megmutatjuk, hogyan ind\u00edtsuk el null\u00e1r\u00f3l \u00e9s hogyan migr\u00e1ljunk a PostgreSQL-r\u0151l.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/highload-andrej-gushhin-zabbix-vysokaya-proizvoditelnost-i-nativnoe-partitsionirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/55734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=55734"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/55734\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=55734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=55734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=55734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}