{"id":97939,"date":"2020-10-23T08:42:49","date_gmt":"2020-10-23T06:42:49","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai"},"modified":"2020-10-23T08:42:49","modified_gmt":"2020-10-23T06:42:49","slug":"dba-bot-joe-anatolij-stansler-postgres-ai","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","title":{"rendered":"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/3bb5cc6d6be1699fc72342a74aa4020a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hogyan \u00e9rti a backend-fejleszt\u0151, hogy az SQL-lek\u00e9rdez\u00e9s j\u00f3l fog m\u0171k\u00f6dni a \u201eprod\u201d-on? Nagyobb vagy gyorsan n\u00f6vekv\u0151 c\u00e9gekn\u00e9l a hozz\u00e1f\u00e9r\u00e9s a \u201eprod\u201d-hoz nem mindenki sz\u00e1m\u00e1ra el\u00e9rhet\u0151. R\u00e1ad\u00e1sul, m\u00e9g ha van is hozz\u00e1f\u00e9r\u00e9s, nem minden lek\u00e9rdez\u00e9st lehet f\u00e1jdalommentesen tesztelni, \u00e9s egy adatb\u00e1zis m\u00e1solat\u00e1nak elk\u00e9sz\u00edt\u00e9se gyakran \u00f3r\u00e1kba telik. Ezeknek a probl\u00e9m\u00e1knak a megold\u00e1s\u00e1ra l\u00e9trehoztuk a mesters\u00e9ges DBA-t \u2013 Joe-t. \u0150 m\u00e1r sikeresen bevezet\u00e9sre ker\u00fclt t\u00f6bb c\u00e9gn\u00e9l, \u00e9s seg\u00edt t\u00f6bb fejleszt\u0151nek. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Vide\u00f3:<\/p>\n<p>\n<center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/5f913081905dc4e15aeed783\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/48e63de499e46be4be19aa8c926e5716.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hell\u00f3 mindenkinek! A nevem Anatolij Stanisler. A c\u00e9gben dolgozom <noindex><a rel=\"nofollow\" href=\"https:\/\/postgres.ai\/\">Postgres.ai<\/a><\/noindex>. Mi azon dolgozunk, hogy felgyors\u00edtsuk a fejleszt\u00e9si folyamatot az\u00e1ltal, hogy megsz\u00fcntetj\u00fck a Postgres-ra vonatkoz\u00f3 k\u00e9s\u00e9seket a fejleszt\u0151k, DBA-k \u00e9s QA sz\u00e1m\u00e1ra.<\/p>\n<p><\/p>\n<p>Kiv\u00e1l\u00f3 \u00fcgyfeleink vannak, \u00e9s ma a prezent\u00e1ci\u00f3nk egy r\u00e9sz\u00e9t azoknak az eseteknek szentelj\u00fck, amelyeket a vel\u00fck v\u00e9gzett munka sor\u00e1n tapasztaltunk. Elmondom, hogyan seg\u00edtett\u00fcnk nekik komoly probl\u00e9m\u00e1k megold\u00e1s\u00e1ban.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5bd7d2538a4940afb28d6375a9516760.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Amikor fejleszt\u00e9st folytatunk \u00e9s bonyolult, nagy terhel\u00e9s\u0171 migr\u00e1ci\u00f3kat v\u00e9gz\u00fcnk, felmer\u00fcl a k\u00e9rd\u00e9s: \u201eSiker\u00fclni fog ez a migr\u00e1ci\u00f3?\u201d. Haszn\u00e1lunk review-t, \u00e9s t\u00e1maszkodunk tapasztaltabb koll\u00e9g\u00e1kra, DBA-szak\u00e9rt\u0151kre. \u0150k meg tudj\u00e1k mondani \u2013 siker\u00fcl vagy sem. <\/p>\n<p><\/p>\n<p>De lehet, hogy jobb lenne, ha mi magunk tesztelhetn\u00e9nk ezt teljes m\u00e9ret\u0171 m\u00e1solatokon. Ma \u00e9ppen arr\u00f3l fogunk besz\u00e9lni, hogy milyen megk\u00f6zel\u00edt\u00e9sek l\u00e9teznek jelenleg a tesztel\u00e9shez, hogyan lehet a legjobban csin\u00e1lni, \u00e9s milyen eszk\u00f6z\u00f6kkel. Arr\u00f3l is besz\u00e9l\u00fcnk, hogy milyen el\u0151ny\u00f6k \u00e9s h\u00e1tr\u00e1nyok vannak ezekben a megk\u00f6zel\u00edt\u00e9sekben, \u00e9s mit tudunk itt jav\u00edtani. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/aca9f4c4fbbfc6db9c24f862216fb5d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ki k\u00e9sz\u00edtett valaha indexeket vagy v\u00e9gzett v\u00e1ltoztat\u00e1sokat k\u00f6zvetlen\u00fcl a prod-on? Viszonylag sokan. \u00c9s kinek okozott ez adatveszt\u00e9st vagy le\u00e1ll\u00e1sokat? Akkor ismer\u0151s ez a f\u00e1jdalom. H\u00e1la az \u00e9gnek, van backup. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7795bf3cb1f3f6f9919ca42758fa51e9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az els\u0151 megk\u00f6zel\u00edt\u00e9s a tesztel\u00e9s a prod-on. Vagyis amikor a fejleszt\u0151 a helyi g\u00e9pen \u00fcl, tesztadatokkal, van egy korl\u00e1tozott minta. \u00c9s kiadjuk a prod-ra, \u00e9s ilyen szitu\u00e1ci\u00f3t kapunk.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/05b120bf57904f553422f419337d5220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez f\u00e1jdalmas, ez dr\u00e1ga. Val\u00f3sz\u00edn\u0171leg \u00edgy nem lenne szabad csin\u00e1lni. <\/p>\n<p><\/p>\n<p>De hogyan lenne a legjobb ezt megtenni? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a8727bc2cd217d89edaf9df8588306d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg a stagingot, \u00e9s k\u00fcl\u00f6n\u00edts\u00fcnk el oda a prod egy r\u00e9sz\u00e9t. Vagy a legjobb esetben haszn\u00e1ljuk a val\u00f3di prod-ot, minden adat\u00e1val. Miut\u00e1n helyben fejlesztett\u00fcnk, tov\u00e1bbi ellen\u0151rz\u00e9seket v\u00e9gz\u00fcnk a stagingon is. <\/p>\n<p><\/p>\n<p>Ez lehet\u0151v\u00e9 teszi, hogy n\u00e9h\u00e1ny hib\u00e1t elt\u00e1vol\u00edtsunk, teh\u00e1t ne engedj\u00fck meg, hogy a prod-ra ker\u00fclj\u00f6n. <\/p>\n<p><\/p>\n<p>Mik a probl\u00e9m\u00e1k? <\/p>\n<p><\/p>\n<ul>\n<li>A probl\u00e9ma az, hogy ezt a staginget megosztjuk a koll\u00e9g\u00e1kkal. \u00c9s gyakran el\u0151fordul, hogy csin\u00e1lsz egy m\u00f3dos\u00edt\u00e1st, bum \u2013 \u00e9s nincsenek adatok, a munka k\u00e1rba veszett. A staging t\u00f6bb terabyte nagys\u00e1g\u00fa volt. Hossz\u00fa ideig kell v\u00e1rni, am\u00edg \u00fajra elindul. Ez\u00e9rt \u00fagy d\u00f6nt\u00fcnk, hogy ezt holnap csin\u00e1ljuk tov\u00e1bb. Most minden fejleszt\u00e9s meg\u00e1llt. <\/li>\n<li>\u00c9s term\u00e9szetesen sok koll\u00e9ga, sok csapat dolgozik ott. \u00c9s ezt manu\u00e1lisan kell egyeztetni. Ez pedig k\u00e9nyelmetlen. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/ad4612f2b06ac09e666e33196d898a79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Azt is \u00e9rdemes megeml\u00edteni, hogy csak egy pr\u00f3b\u00e1lkoz\u00e1sunk van, egy l\u00f6v\u00e9s, ha adatb\u00e1zisba szeretn\u00e9nk b\u00e1rmilyen m\u00f3dos\u00edt\u00e1st v\u00e9gezni, meg\u00e9rinteni az adatokat, megv\u00e1ltoztatni a strukt\u00far\u00e1t. \u00c9s ha valami rosszul siker\u00fcl, ha a migr\u00e1ci\u00f3 sor\u00e1n hiba t\u00f6rt\u00e9nt, akkor m\u00e1r nem tudunk gyorsan visszat\u00e9rni. <\/p>\n<p><\/p>\n<p>Ez jobb, mint a kor\u00e1bbi megk\u00f6zel\u00edt\u00e9s, de m\u00e9g mindig nagy a val\u00f3sz\u00edn\u0171s\u00e9ge annak, hogy valamilyen hiba ker\u00fcl a productionra.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/73faffc3ef6e368a0901145c48b903b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi akad\u00e1lyoz meg minket abban, hogy minden fejleszt\u0151nek tesztk\u00f6rnyezetet adjunk, egy teljes m\u00e9ret\u0171 m\u00e1solatot? Azt hiszem, vil\u00e1gos, hogy mi akad\u00e1lyozza ezt. <\/p>\n<p><\/p>\n<p>Kinek van az adatb\u00e1zisa nagyobb, mint egy terabyte? Nagyobb, mint a terem fele. <\/p>\n<p><\/p>\n<p>\u00c9s vil\u00e1gos, hogy fenntartani a g\u00e9peket minden egyes fejleszt\u0151 sz\u00e1m\u00e1ra, amikor ekkora production van, nagyon dr\u00e1ga, r\u00e1ad\u00e1sul id\u0151ig\u00e9nyes is. <\/p>\n<p><\/p>\n<p>Vannak \u00fcgyfeleink, akik meg\u00e9rtett\u00e9k, hogy nagyon fontos, hogy minden v\u00e1ltoztat\u00e1st teljes m\u00e9ret\u0171 m\u00e1solatokon tesztelj\u00fcnk, de nekik az adatb\u00e1zisuk kisebb, mint egy terabyte, \u00e9s nincsenek er\u0151forr\u00e1saik, hogy minden egyes fejleszt\u0151nek tesztk\u00f6rnyezetet tartsanak fenn. Ez\u00e9rt nekik le kell t\u00f6lteni\u00fck a dumpokat a helyi g\u00e9pre, \u00e9s \u00edgy kell tesztelni\u00fck. Ez rengeteg id\u0151t vesz ig\u00e9nybe. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/8c1c804db71ffb5b79b5284670b3427b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e9g ha a saj\u00e1t infrastrukt\u00far\u00e1n bel\u00fcl is csin\u00e1lj\u00e1k, egy terabyte adat let\u00f6lt\u00e9se egy \u00f3ra alatt \u2013 ez m\u00e1r nagyon j\u00f3nak sz\u00e1m\u00edt. De \u0151k logikai dumpokat haszn\u00e1lnak, lok\u00e1lisan t\u00f6ltik le a felh\u0151b\u0151l. Sz\u00e1mukra a sebess\u00e9g k\u00f6r\u00fclbel\u00fcl 200 gigabyte \u00f3r\u00e1nk\u00e9nt. \u00c9s m\u00e9g id\u0151 sz\u00fcks\u00e9ges a logikai dumpb\u00f3l val\u00f3 kinyer\u00e9shez, indexek felrak\u00e1s\u00e1hoz stb.<\/p>\n<p><\/p>\n<p>De \u0151k ezt a megk\u00f6zel\u00edt\u00e9st haszn\u00e1lj\u00e1k, mert ez lehet\u0151v\u00e9 teszi a prod megb\u00edzhat\u00f3s\u00e1g\u00e1nak meg\u0151rz\u00e9s\u00e9t. <\/p>\n<p><\/p>\n<p>Mit tehet\u00fcnk itt? Csin\u00e1ljuk \u00fagy, hogy a tesztk\u00f6rnyezetek olcs\u00f3ak legyenek, \u00e9s adjunk minden fejleszt\u0151nek saj\u00e1t tesztk\u00f6rnyezetet.<\/p>\n<p><\/p>\n<p>Ez lehets\u00e9ges. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a763fc2677fe93df884b80561b5270a2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ebben a megk\u00f6zel\u00edt\u00e9sben, amikor v\u00e9kony kl\u00f3nokat k\u00e9sz\u00edt\u00fcnk minden fejleszt\u0151 sz\u00e1m\u00e1ra, ezeket megoszthatjuk egy g\u00e9pen. P\u00e9ld\u00e1ul, ha van egy n\u00e9gy terabyte-os adatb\u00e1zisod, \u00e9s ezt 10 fejleszt\u0151nek szeretn\u00e9d \u00e1tadni, nem kell 10 x n\u00e9gy terabyte-os adatb\u00e1zis. El\u00e9g egy g\u00e9p, hogy v\u00e9kony, izol\u00e1lt m\u00e1solatokat k\u00e9sz\u00edts\u00fcnk minden fejleszt\u0151 sz\u00e1m\u00e1ra, egy g\u00e9p haszn\u00e1lat\u00e1val. Hogyan m\u0171k\u00f6dik, arr\u00f3l k\u00e9s\u0151bb mes\u00e9lek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e8e9df7effb0d0241d90315f92b994c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Val\u00f3di p\u00e9lda:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Az adatb\u00e1zis \u2013 4,5 terabyte. <\/p>\n<p>\n<\/li>\n<li>\n<p>F\u00fcggetlen m\u00e1solatokat 30 m\u00e1sodperc alatt kaphatunk. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Nem kell v\u00e1rnod a tesztk\u00f6rnyezetre, \u00e9s nem kell att\u00f3l f\u00fcggned, hogy mekkora. M\u00e1sodpercek alatt megszerezheted. Ezek teljesen izol\u00e1lt k\u00f6rnyezetek lesznek, de amelyek megosztj\u00e1k az adatokat egym\u00e1ssal. <\/p>\n<p><\/p>\n<p>Ez szuper. Itt a var\u00e1zslatr\u00f3l \u00e9s a p\u00e1rhuzamos univerzumb\u00f3l besz\u00e9l\u00fcnk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/87e6a7e45548ed5dabd4fad01ea70616.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A mi eset\u00fcnkben ez az OpenZFS rendszer seg\u00edts\u00e9g\u00e9vel m\u0171k\u00f6dik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e75fed43703e26152a5a85f807064cb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az OpenZFS egy copy-on-write f\u00e1jlrendszer, amely alap\u00e9rtelmezetten t\u00e1mogatja a pillanatfelv\u00e9teleket \u00e9s kl\u00f3nokat. Megb\u00edzhat\u00f3 \u00e9s sk\u00e1l\u00e1zhat\u00f3. Nagyon egyszer\u0171 kezelni. Sz\u00f3 szerint k\u00e9t parancs alatt telep\u00edthet\u0151. <\/p>\n<p><\/p>\n<p>Vannak m\u00e1s lehet\u0151s\u00e9gek is:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>LVM,<\/p>\n<p>\n<\/li>\n<li>\n<p>T\u00c1RHELY (p\u00e9ld\u00e1ul Pure Storage).<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>A Database Lab, amir\u0151l besz\u00e9lek, modul\u00e1ris. Lehet megval\u00f3s\u00edtani az ilyen lehet\u0151s\u00e9gek haszn\u00e1lat\u00e1val. De egyel\u0151re az OpenZFS-re \u00f6sszpontos\u00edtottunk, mert konkr\u00e9tan az LVM-n\u00e9l voltak probl\u00e9m\u00e1k. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/41a49f6760ee96b55f49606f8e453992.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hogyan m\u0171k\u00f6dik? Ahelyett, hogy minden alkalommal \u00fajra\u00edrn\u00e1nk az adatokat, amikor megv\u00e1ltoztatjuk \u0151ket, egyszer\u0171en elmentj\u00fck \u0151ket, csak megjel\u00f6lve, hogy ezek az \u00faj adatok egy \u00faj id\u0151ponthoz, egy \u00faj pillanatfelv\u00e9telhez tartoznak. <\/p>\n<p><\/p>\n<p>\u00c9s k\u00e9s\u0151bb, amikor vissza akarunk l\u00e9pni, vagy amikor egy \u00faj kl\u00f3nt akarunk k\u00e9sz\u00edteni valamilyen r\u00e9gebbi verzi\u00f3b\u00f3l, egyszer\u0171en csak annyit mondunk: \u00abOk\u00e9, adj\u00e1tok nek\u00fcnk ezeket az adatblokkokat, amelyek \u00edgy vannak megjel\u00f6lve\u00bb. <\/p>\n<p><\/p>\n<p>Ez a felhaszn\u00e1l\u00f3 \u00edgy fog dolgozni ezzel az adathalmozattal. Fokozatosan v\u00e1ltoztatni fogja, k\u00e9sz\u00edtve a saj\u00e1t pillanatfelv\u00e9teleit. <\/p>\n<p><\/p>\n<p>\u00cdgy el\u00e1gaz\u00e1sra ker\u00fcl sor. Minden fejleszt\u0151nknek lehet\u0151s\u00e9ge lesz saj\u00e1t kl\u00f3nj\u00e1t beszerezni, amelyet szerkeszt, m\u00edg a k\u00f6z\u00f6s adatok mindenki k\u00f6z\u00f6tt megoszlanak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/78efd8b87f6559839af20a939b7c89d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy ilyen rendszer telep\u00edt\u00e9s\u00e9hez k\u00e9t probl\u00e9m\u00e1t kell megoldani: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Az els\u0151 az adatforr\u00e1s, ahonnan el fogja \u0151ket venni. Be\u00e1ll\u00edthatja a replik\u00e1ci\u00f3t a production-b\u00f3l. Haszn\u00e1lhatja a m\u00e1r l\u00e9trehozott biztons\u00e1gi ment\u00e9seket is, rem\u00e9lem, van ilyen. WAL-E, WAL-G vagy Barman. \u00c9s m\u00e9g ha valamilyen felh\u0151megold\u00e1st haszn\u00e1l is, p\u00e9ld\u00e1ul RDS vagy Cloud SQL, akkor logikai dumpokat is haszn\u00e1lhat. De mindenesetre azt javasoljuk, hogy haszn\u00e1ljon biztons\u00e1gi ment\u00e9seket, mert ezzel a megk\u00f6zel\u00edt\u00e9ssel a f\u00e1jlok fizikai szerkezete is megmarad, ami lehet\u0151v\u00e9 teszi, hogy k\u00f6zelebb ker\u00fclj\u00f6n azokhoz a metrik\u00e1khoz, amelyeket a production-ban l\u00e1thatna, hogy \u00e9szlelje a l\u00e9tez\u0151 probl\u00e9m\u00e1kat. <\/p>\n<p>\n<\/li>\n<li>\n<p>A m\u00e1sodik az a hely, ahol a Database Lab-ot szeretn\u00e9 hosztolni. Ez lehet Felh\u0151, lehet On-premise. Itt fontos megeml\u00edteni, hogy a ZFS t\u00e1mogatja az adatok t\u00f6m\u00f6r\u00edt\u00e9s\u00e9t. \u00c9s ezt meglehet\u0151sen j\u00f3l v\u00e9gzi. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00e9pzelje el, hogy minden egyes kl\u00f3nn\u00e1l, att\u00f3l f\u00fcgg\u0151en, hogy milyen m\u0171veleteket v\u00e9gez\u00fcnk az adatb\u00e1zissal, egyfajta dev fog n\u00f6vekedni. Ehhez a dev-hez is sz\u00fcks\u00e9g lesz helyre. De mivel egy 4,5 terab\u00e1jtos adatb\u00e1zist vett\u00fcnk, a ZFS 3,5 terab\u00e1jtra t\u00f6m\u00f6r\u00edti. A be\u00e1ll\u00edt\u00e1sokt\u00f3l f\u00fcgg\u0151en ezt lehet vari\u00e1lni. \u00c9s marad hely\u00fcnk a dev sz\u00e1m\u00e1ra is. <\/p>\n<p><\/p>\n<p>Ilyen rendszert k\u00fcl\u00f6nb\u00f6z\u0151 esetekhez lehet haszn\u00e1lni. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Ez fejleszt\u0151k, DBA-k sz\u00e1m\u00e1ra van, hogy ellen\u0151rizz\u00e9k a lek\u00e9rdez\u00e9seket, optimaliz\u00e1ljanak. <\/p>\n<p>\n<\/li>\n<li>\n<p>Haszn\u00e1lhat\u00f3 QA-tesztel\u00e9shez konkr\u00e9t migr\u00e1ci\u00f3k tesztel\u00e9s\u00e9re, miel\u0151tt azt a prod-ra kiadn\u00e1nk. Ezen k\u00edv\u00fcl speci\u00e1lis k\u00f6rnyezeteket is l\u00e9trehozhatunk QA sz\u00e1m\u00e1ra val\u00f3s adatokkal, ahol tesztelhetik az \u00faj funkcionalit\u00e1st. \u00c9s ez m\u00e1sodpercek alatt megt\u00f6rt\u00e9nik, ahelyett, hogy \u00f3r\u00e1kig vagy ak\u00e1r napokig kellene v\u00e1rni, k\u00fcl\u00f6nb\u00f6z\u0151 esetekben, amikor v\u00e9kony m\u00e1solatokat nem haszn\u00e1lnak. <\/p>\n<p>\n<\/li>\n<li>\n<p>\u00c9s van egy k\u00fcl\u00f6n eset is. Ha a c\u00e9gn\u00e9l nincs be\u00e1ll\u00edtva analitikai rendszer, akkor kiemelhet\u00fcnk egy v\u00e9kony kl\u00f3nt a term\u00e9k adatb\u00e1zisb\u00f3l, \u00e9s \u00e1tadhatjuk hossz\u00fa lek\u00e9rdez\u00e9sekhez vagy speci\u00e1lis indexekhez, amelyek az analitik\u00e1ban haszn\u00e1lhat\u00f3k.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5fb0944f063c981f27449d948a59b73b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezzel a megk\u00f6zel\u00edt\u00e9ssel:<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>Alacsony a hib\u00e1k val\u00f3sz\u00edn\u0171s\u00e9ge a 'prod'-on, mert minden v\u00e1ltoz\u00e1st teljes m\u00e9ret\u0171 adatokkal tesztelt\u00fcnk. <\/p>\n<p>\n<\/li>\n<li>\n<p>Megjelenik a tesztel\u00e9si kult\u00fara, mivel m\u00e1r nem kell \u00f3r\u00e1kig v\u00e1rni a saj\u00e1t standj\u00e1ra. <\/p>\n<p>\n<\/li>\n<li>\n<p>Nincs akad\u00e1ly, nincs v\u00e1rakoz\u00e1s a tesztel\u00e9sek k\u00f6z\u00f6tt. Val\u00f3ban elmehetsz \u00e9s ellen\u0151rizheted. \u00c9s ez \u00edgy jobb lesz, mivel felgyors\u00edtjuk a fejleszt\u00e9st. <\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>\n<p>Kevesebb refaktor\u00e1l\u00e1sra lesz sz\u00fcks\u00e9g. Kevesebb hiba ker\u00fcl a prod k\u00f6rnyezetbe. Kevesebb dolgot kell ut\u00f3lag refaktor\u00e1lnunk. <\/p>\n<p>\n<\/li>\n<li>\n<p>Visszavonhatatlan v\u00e1ltoztat\u00e1sokat is tudunk v\u00e1llalni. Ez a standard megk\u00f6zel\u00edt\u00e9sekben nincs benne. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<ol>\n<li>Ez el\u0151ny\u00f6s, mert megosztjuk a tesztk\u00f6rnyezetek er\u0151forr\u00e1sait. <\/li>\n<\/ol>\n<p><\/p>\n<p>Ez m\u00e1r j\u00f3, de mit lehetne m\u00e9g gyors\u00edtani?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/d692f76b865c18ed4c178d1a1440774b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ennek a rendszernek k\u00f6sz\u00f6nhet\u0151en jelent\u0151sen cs\u00f6kkenthetj\u00fck a tesztel\u00e9shez val\u00f3 bel\u00e9p\u00e9si k\u00fcsz\u00f6b\u00f6t. <\/p>\n<p><\/p>\n<p>Most van egy z\u00e1rt k\u00f6r, ahol a fejleszt\u0151nek ahhoz, hogy hozz\u00e1f\u00e9rjen a val\u00f3di nagym\u00e9ret\u0171 adatokhoz, szak\u00e9rt\u0151v\u00e9 kell v\u00e1lnia. Meg kell b\u00edznunk benne, hogy megkapja ezt a hozz\u00e1f\u00e9r\u00e9st. <\/p>\n<p><\/p>\n<p>De hogyan lehet \u00edgy fejl\u0151dni, ha ez nem \u00e1ll rendelkez\u00e9sre? Mi van, ha csup\u00e1n egy nagyon kicsi teszteset adathalmazon tudsz dolgozni? Akkor nem tudod megkapni a val\u00f3di tapasztalatot. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/221f7b02294878aea1d0ebe6df5d9717.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hogyan l\u00e9pj\u00fcnk ki ebb\u0151l a k\u00f6rb\u0151l? Az els\u0151 interface-k\u00e9nt, ami k\u00e9nyelmes a fejleszt\u0151k b\u00e1rmilyen szintj\u00e9n, a Slack-bot-ot v\u00e1lasztottuk. De b\u00e1rmilyen m\u00e1s interface is lehet. <\/p>\n<p><\/p>\n<p>Mit tesz lehet\u0151v\u00e9? Lehet\u0151s\u00e9g van egy adott lek\u00e9rdez\u00e9st elk\u00fcldeni egy speci\u00e1lis csatorn\u00e1ba az adatb\u00e1zis sz\u00e1m\u00e1ra. Automatikusan n\u00e9h\u00e1ny m\u00e1sodperc alatt kifejlesztj\u00fck a v\u00e9kony kl\u00f3nt. Futtatni fogjuk ezt a lek\u00e9rdez\u00e9st. M\u00e9rj\u00fck \u00e9s aj\u00e1nl\u00e1sokat k\u00e9sz\u00edt\u00fcnk. Megmutatjuk a vizualiz\u00e1ci\u00f3t. Ezut\u00e1n ez a kl\u00f3n marad, hogy a lek\u00e9rdez\u00e9st optimaliz\u00e1lhassuk, indexeket adhassunk hozz\u00e1 stb. <\/p>\n<p><\/p>\n<p>A Slack ezen k\u00edv\u00fcl lehet\u0151s\u00e9geket ad sz\u00e1munkra a kollabor\u00e1ci\u00f3ra is. Mivel ez egyszer\u0171en csak egy csatorna, k\u00f6zvetlen\u00fcl ott egy thread-ben megkezdhetj\u00fck a lek\u00e9rdez\u00e9s megbesz\u00e9l\u00e9s\u00e9t, pingelhetj\u00fck koll\u00e9g\u00e1inkat, DBA-kat, akik a c\u00e9gen bel\u00fcl vannak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/b4a6410b625107c5bbbf57c021159914.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De term\u00e9szetesen vannak probl\u00e9m\u00e1k is. Mivel ez a val\u00f3s vil\u00e1g, \u00e9s egy olyan szervert haszn\u00e1lunk, amelyen sok kl\u00f3nt hosztolunk, korl\u00e1toznunk kell a mem\u00f3ria \u00e9s a processzor kapacit\u00e1s\u00e1t, amelyeket a kl\u00f3nok haszn\u00e1lhatnak. <\/p>\n<p><\/p>\n<p>De ahhoz, hogy ezek a tesztek hihet\u0151ek legyenek, meg kell oldanunk ezt a probl\u00e9m\u00e1t. <\/p>\n<p><\/p>\n<p>Nyilv\u00e1nval\u00f3, hogy a k\u00f6vetkezetes adatok fontosak. De ezt m\u00e1r megvan. Arra t\u00f6reksz\u00fcnk, hogy azonos konfigur\u00e1ci\u00f3t \u00e9rj\u00fcnk el. Szinte azonos konfigur\u00e1ci\u00f3t tudunk biztos\u00edtani. <\/p>\n<p><\/p>\n<p>J\u00f3l lenne ugyanazt a hardware-t haszn\u00e1lni, mint ami a termel\u00e9si k\u00f6rnyezetben van, de elt\u00e9rhet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5efae55189175262d56a33b89c55ed29.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eml\u00e9kezz\u00fcnk csak arra, hogyan m\u0171k\u00f6dik a Postgres a mem\u00f3ri\u00e1val. K\u00e9t cache-\u00fcnk van. Az egyik a f\u00e1jlrendszert\u0151l \u00e9s a m\u00e1sik a saj\u00e1t Postgres-\u00fcnkt\u0151l, azaz a Shared Buffer Cache. <\/p>\n<p><\/p>\n<p>Fontos megjegyezni, hogy a Shared Buffer Cache a Postgres ind\u00edt\u00e1sakor allok\u00e1l\u00f3dik att\u00f3l f\u00fcgg\u0151en, hogy mekkora m\u00e9retet \u00e1ll\u00edtunk be a konfigur\u00e1ci\u00f3ban. <\/p>\n<p><\/p>\n<p>A m\u00e1sodik cache pedig a rendelkez\u00e9sre \u00e1ll\u00f3 teret haszn\u00e1lja fel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f1f3c85e786649f83d5c17e6724086a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s amikor t\u00f6bb kl\u00f3nt hozunk l\u00e9tre egy g\u00e9pen, akkor fokozatosan megt\u00f6ltj\u00fck a mem\u00f3ri\u00e1t. Ide\u00e1lis esetben a Shared Buffer Cache a mem\u00f3ria 25%-\u00e1nak kell lennie, amely a g\u00e9pen rendelkez\u00e9sre \u00e1ll. <\/p>\n<p><\/p>\n<p>Ez\u00e9rt, ha nem v\u00e1ltoztatunk ezen a param\u00e9teren, akkor mind\u00f6ssze 4 instance-t tudunk futtatni egy g\u00e9pen, teh\u00e1t \u00f6sszesen 4 ilyen v\u00e9kony kl\u00f3nt. Ez term\u00e9szetesen h\u00e1tr\u00e1nyos, mert szeretn\u00e9nk sokkal t\u00f6bbet birtokolni. <\/p>\n<p><\/p>\n<p>M\u00e1sr\u00e9szr\u0151l azonban a Buffer Cache-t a lek\u00e9rdez\u00e9sek v\u00e9grehajt\u00e1s\u00e1hoz, az indexekhez haszn\u00e1lj\u00e1k, teh\u00e1t a terv att\u00f3l f\u00fcgg, hogy mekkora m\u00e9ret\u0171ek a cache-eink. Ha egyszer\u0171en csak cs\u00f6kkentj\u00fck ezt a param\u00e9tert, akkor a terveink jelent\u0151sen megv\u00e1ltozhatnak.<\/p>\n<p><\/p>\n<p>P\u00e9ld\u00e1ul, ha a prod k\u00f6rnyezet\u00fcnkben nagy a cache, akkor a Postgres ink\u00e1bb az indexet prefer\u00e1lja. Ha pedig nem, akkor SeqScan lesz. Mi \u00e9rtelme lenne, ha ezek a tervek nem egyezn\u00e9nek meg? <\/p>\n<p><\/p>\n<p>Itt arra a meg\u00e1llap\u00edt\u00e1sra jutunk, hogy a terv a Postgres-ben val\u00f3j\u00e1ban nem f\u00fcgg a Shared Buffer m\u00e9ret\u00e9t\u0151l, amit megadunk, hanem az effective_cache_size-t\u00f3l f\u00fcgg.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/1457fd7b65c342f64733b952130125cf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kib\u0151v\u00edtett_cache_size \u2013 ez a felt\u00e9telezett cache m\u00e9ret, amely sz\u00e1munkra el\u00e9rhet\u0151, teh\u00e1t a Buffer Cache \u00e9s a f\u00e1jlrendszer cache-j\u00e9nek \u00f6sszeg\u00e9t jelenti. Ezt a konfigur\u00e1ci\u00f3 hat\u00e1rozza meg. Ez a mem\u00f3ria nem allok\u00e1l\u00f3dik. <\/p>\n<p><\/p>\n<p>Ezzel a param\u00e9terrel gyakorlatilag \u00e1tverhetj\u00fck a Postgres-t, mondv\u00e1n, hogy sok adat \u00e9rhet\u0151 el sz\u00e1munkra, m\u00e9g akkor is, ha nincs is ilyen mennyis\u00e9g\u0171 adatunk. \u00cdgy a tervek teljesen egybeesnek a produkci\u00f3s k\u00f6rnyezettel. <\/p>\n<p><\/p>\n<p>De ez befoly\u00e1solhatja az id\u0151z\u00edt\u00e9st. A lek\u00e9rdez\u00e9seket id\u0151z\u00edt\u00e9s szerint optimaliz\u00e1ljuk, de fontos, hogy az id\u0151z\u00edt\u00e9s sz\u00e1mos t\u00e9nyez\u0151t\u0151l f\u00fcgg: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>F\u00fcgg att\u00f3l a terhel\u00e9st\u0151l, amely \u00e9ppen a prod k\u00f6rnyezetben van. <\/p>\n<p>\n<\/li>\n<li>\n<p>F\u00fcgg mag\u00e1nak a g\u00e9pnek a jellemz\u0151it\u0151l. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Ez ugyan k\u00f6zvetett param\u00e9ter, de val\u00f3j\u00e1ban az adatmennyis\u00e9g alapj\u00e1n optimaliz\u00e1lhatunk, amelyet ez a lek\u00e9rdez\u00e9s elolvas, hogy eredm\u00e9nyt kapjunk. <\/p>\n<p><\/p>\n<p>Ha azt szeretn\u00e9nk, hogy az id\u0151z\u00edt\u00e9s k\u00f6zel \u00e1lljon ahhoz, amit a termel\u00e9si k\u00f6rnyezetben l\u00e1tunk, akkor a lehet\u0151 legjobb hardvert kell v\u00e1lasztanunk, \u00e9s lehet, hogy t\u00f6bbre van sz\u00fcks\u00e9g ahhoz, hogy minden kl\u00f3n elf\u00e9rjen. Ez azonban kompromisszumot jelent, azaz ugyanolyan terveket kapunk, l\u00e1tni fogjuk, hogy egy adott lek\u00e9rdez\u00e9s mennyi adatot olvas el, \u00e9s levonhatjuk a k\u00f6vetkeztet\u00e9st \u2013 ez a lek\u00e9rdez\u00e9s j\u00f3 (vagy migr\u00e1ci\u00f3) vagy rossz, \u00e9s tov\u00e1bbi optimaliz\u00e1l\u00e1sra van sz\u00fcks\u00e9g. <\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg, hogyan zajlik az optimaliz\u00e1l\u00e1s Joe eset\u00e9ben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/26c892a0b2d417f9806cfb77d2ea47f6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vegy\u00fcnk egy lek\u00e9rdez\u00e9st egy val\u00f3s rendszerb\u0151l. Ebben az esetben az adatb\u00e1zis 1 terabyte. Azt akarjuk kisz\u00e1molni, h\u00e1ny friss bejegyz\u00e9s van, amelyeknek t\u00f6bb mint 10 l\u00e1jkjuk volt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/befd651abed6688127f52db39138a4be.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dczenetet k\u00fcld\u00fcnk a csatorn\u00e1ra, \u00e9s elindul egy kl\u00f3n sz\u00e1munkra. L\u00e1tni fogjuk, hogy ez a lek\u00e9rdez\u00e9s 2,5 perc alatt fog v\u00e9grehajt\u00f3dni. Ez az els\u0151, amit \u00e9szre fogunk venni.<\/p>\n<p><\/p>\n<p>A Joe automatikus aj\u00e1nl\u00e1sokat fog mutatni, amelyek a terven \u00e9s a metrik\u00e1kon alapulnak. <\/p>\n<p><\/p>\n<p>L\u00e1tni fogjuk, hogy a lek\u00e9rdez\u00e9s t\u00fal sok adatot dolgoz fel ahhoz, hogy viszonylag kev\u00e9s sorhoz jusson. Sz\u00fcks\u00e9g van egy speci\u00e1lis indexre, mivel \u00e9szrevett\u00fck, hogy t\u00fal sok sz\u0171rt sor van a lek\u00e9rdez\u00e9sben. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7f40e41314ebc682a1a64a2958dec16c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg k\u00f6zelebbr\u0151l, mi t\u00f6rt\u00e9nt. Val\u00f3ban l\u00e1tjuk, hogy csaknem m\u00e1sf\u00e9l gigab\u00e1jt adatot olvastunk be a f\u00e1jlcach\u00e9b\u00f3l vagy ak\u00e1r a lemezr\u0151l. Ez nem j\u00f3, mivel csak 142 sort kaptunk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/30aaff5da2536fa27efc6591f645d6f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s \u00fagy t\u0171nik, hogy itt index scan van, \u00e9s gyorsan kellene v\u00e9grehajtani, de mivel t\u00fal sok sort sz\u0171rt\u00fcnk le (sz\u00e1molnunk kellett \u0151ket), ez\u00e9rt a lek\u00e9rdez\u00e9s lassan futott le. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/40958fbc04d4eb738f6a16488647bd8c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez a terv miatt t\u00f6rt\u00e9nt, mivel r\u00e9szben nem egyeznek a lek\u00e9rdez\u00e9s \u00e9s az index felt\u00e9telei. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/196ca5116e641c72bc1009e97c390bc7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pr\u00f3b\u00e1ljuk meg pontos\u00edtani az indexet, \u00e9s n\u00e9zz\u00fck meg, hogyan v\u00e1ltozik a lek\u00e9rdez\u00e9s v\u00e9grehajt\u00e1sa ezut\u00e1n. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/646a73964f0b6d3615eedb8acb3aa216.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az index l\u00e9trehoz\u00e1sa el\u00e9g sok id\u0151t vett ig\u00e9nybe, de most ellen\u0151rizz\u00fck a lek\u00e9rdez\u00e9st, \u00e9s l\u00e1tjuk, hogy az id\u0151 2,5 percr\u0151l mind\u00f6ssze 156 milliszekundumra cs\u00f6kkent, ami el\u00e9g j\u00f3. Csak 6 megab\u00e1jt adatot olvasunk be.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5cce2d6ecf2314c0575c0fed107f6d5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Most m\u00e1r index only scan-t haszn\u00e1lunk.<\/p>\n<p><\/p>\n<p>Egy m\u00e1sik fontos dolog az, hogy szeretn\u00e9nk a tervet \u00e9rthet\u0151bb m\u00f3don bemutatni. Mi bevezett\u00fck a vizualiz\u00e1ci\u00f3t Flame Graphs seg\u00edts\u00e9g\u00e9vel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f4f545bfbf52fd66b6cbe45e1d6d0b6c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez egy m\u00e1sik lek\u00e9rdez\u00e9s, gazdagabb. A Flame Graphs-ot k\u00e9t param\u00e9ter alapj\u00e1n \u00e9p\u00edtj\u00fck fel: az adatok mennyis\u00e9ge, amelyet egy adott csom\u00f3pont a tervben olvasott, \u00e9s az id\u0151z\u00edt\u00e9s, azaz a csom\u00f3pont v\u00e9grehajt\u00e1s\u00e1nak ideje. <\/p>\n<p><\/p>\n<p>Itt pontosan \u00f6sszehasonl\u00edthatjuk a csom\u00f3pontokat egym\u00e1ssal. \u00cdgy vil\u00e1gos, hogy melyik foglal el t\u00f6bb vagy kevesebb helyet, ami \u00e1ltal\u00e1ban neh\u00e9z m\u00e1s vizualiz\u00e1l\u00e1si m\u00f3dszerekn\u00e9l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/c477d2f32241c69eb0b38ef45ff4708b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Term\u00e9szetesen mindenki ismeri az explain.depesz.com-ot. Ennek a vizualiz\u00e1ci\u00f3nak az egyik hasznos funkci\u00f3ja, hogy meg\u0151rzi a sz\u00f6veges tervet \u00e9s kiemel n\u00e9h\u00e1ny fontos param\u00e9tert egy t\u00e1bl\u00e1zatban, lehet\u0151v\u00e9 t\u00e9ve a rendez\u00e9st. <\/p>\n<p><\/p>\n<p>Azok a fejleszt\u0151k is, akik m\u00e9g nem m\u00e9lyedtek el ebben a t\u00e9m\u00e1ban, haszn\u00e1lj\u00e1k az explain.depesz.com-ot, mivel sz\u00e1mukra egyszer\u0171bb meg\u00e9rteni, hogy mely metrik\u00e1k fontosak \u00e9s melyek nem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a7352b5b9abf27294375c78bec69d4d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Van egy \u00faj megk\u00f6zel\u00edt\u00e9s a vizualiz\u00e1ci\u00f3ra \u2013 ez az explain.dalibo.com. \u0150k fa-szer\u0171 vizualiz\u00e1ci\u00f3t k\u00e9sz\u00edtenek, de itt nagyon neh\u00e9z \u00f6sszehasonl\u00edtani a csom\u00f3pontokat egym\u00e1ssal. Itt j\u00f3l lehet \u00e9rteni a strukt\u00far\u00e1t, viszont ha nagy a lek\u00e9rdez\u00e9s, akkor g\u00f6rgetni kell ide-oda, de ez is egy lehet\u0151s\u00e9g. <\/p>\n<p><\/p>\n<h2 id=\"kollaboraciya\">Egy\u00fcttm\u0171k\u00f6d\u00e9s<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7101c0b95eafed8fd9305a4630399e3b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahogy m\u00e1r mondtam, a Slack lehet\u0151s\u00e9get ad az egy\u00fcttm\u0171k\u00f6d\u00e9sre. P\u00e9ld\u00e1ul, ha egy bonyolult lek\u00e9rdez\u00e9ssel tal\u00e1lkozunk, aminek az optimaliz\u00e1l\u00e1sa nem egy\u00e9rtelm\u0171, a Slack thread-ben tiszt\u00e1zhatjuk ezt a k\u00e9rd\u00e9st a koll\u00e9g\u00e1inkkal. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Joe, az DBA-bot. Anatolij Stanszler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/14b8f9c3401ecb68ac1ef56bc0cb0fa5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fontosnak tartjuk, hogy teljes m\u00e9ret\u0171 adatokkal tesztelj\u00fcnk. Ehhez l\u00e9trehoztuk az Update Database Lab eszk\u00f6zt, amely ny\u00edlt forr\u00e1sk\u00f3d\u00fa. A Joe botot is haszn\u00e1lhatja. Most azonnal \u00e1tveheti \u00e9s be\u00e9p\u00edtheti a saj\u00e1t rendszer\u00e9be. Minden \u00fatmutat\u00f3 ott el\u00e9rhet\u0151. <\/p>\n<p><\/p>\n<p>Fontos megjegyezni, hogy mag\u00e1ban a megold\u00e1sban nincs semmi forradalmi, mert l\u00e9tezik a Delphix, de ez egy enterprise megold\u00e1s. Teljesen z\u00e1rt, nagyon dr\u00e1ga. Mi a Postgres-re specializ\u00e1l\u00f3dtunk. Ezek mind ny\u00edlt forr\u00e1sk\u00f3d\u00fa term\u00e9kek. Csatlakozzon hozz\u00e1nk! <\/p>\n<p><\/p>\n<p>Ezzel befejezem. K\u00f6sz\u00f6n\u00f6m!<\/p>\n<p><\/p>\n<h2 id=\"voprosy\">K\u00e9rd\u00e9sek<\/h2>\n<p><\/p>\n<p><em>\u00dcdv\u00f6zl\u00f6m! K\u00f6sz\u00f6n\u00f6m az el\u0151ad\u00e1st! Nagyon \u00e9rdekes, k\u00fcl\u00f6n\u00f6sen nekem, mert k\u00f6r\u00fclbel\u00fcl hasonl\u00f3 feladatot megoldottam egy ideje. Ez\u00e9rt rengeteg k\u00e9rd\u00e9sem van. Rem\u00e9lem, legal\u00e1bb egy r\u00e9sz\u00e9t fel tudom tenni.<\/em><\/p>\n<p><\/p>\n<p><em>\u00c9rdekes, hogyan sz\u00e1m\u00edtj\u00e1k ki a helyet ehhez a k\u00f6rnyezethez? A technol\u00f3gia \u00fagy van kialak\u00edtva, hogy bizonyos k\u00f6r\u00fclm\u00e9nyek k\u00f6z\u00f6tt a kl\u00f3nok maxim\u00e1lis m\u00e9retre n\u0151hetnek. Durv\u00e1n fogalmazva, ha t\u00edz terab\u00e1jtos az adatb\u00e1zisa \u00e9s 10 kl\u00f3nja van, akkor k\u00f6nnyen szimul\u00e1lhat olyan helyzetet, amikor minden kl\u00f3n 10 egyedi adatot tartalmaz. Hogyan sz\u00e1m\u00edtj\u00e1k ki ezt a helyet, azaz azt a k\u00fcl\u00f6nbs\u00e9get, amir\u0151l besz\u00e9lt, amelyben ezek a kl\u00f3nok fognak \u00e9lni?<\/em><\/p>\n<p><\/p>\n<p>J\u00f3 k\u00e9rd\u00e9s. Itt fontos figyelni a konkr\u00e9t kl\u00f3nokra. Ha egy kl\u00f3nban t\u00fal nagy v\u00e1ltoz\u00e1s t\u00f6rt\u00e9nik, \u00e9s elkezd n\u0151ni, akkor el\u0151sz\u00f6r figyelmeztethetj\u00fck a felhaszn\u00e1l\u00f3t err\u0151l, vagy azonnal le\u00e1ll\u00edthatjuk ezt a kl\u00f3nt, hogy elker\u00fclj\u00fck a hib\u00e1s helyzetet. <\/p>\n<p><\/p>\n<p><em>Igen, van egy tov\u00e1bbi k\u00e9rd\u00e9sem. Teh\u00e1t hogyan biztos\u00edtj\u00e1k ezeknek a moduloknak az \u00e9letciklus\u00e1t? N\u00e1lunk ez probl\u00e9ma \u00e9s egy teljesen k\u00fcl\u00f6n t\u00f6rt\u00e9net. Hogyan t\u00f6rt\u00e9nik ez?<\/em><\/p>\n<p><\/p>\n<p>Minden kl\u00f3nnak van egy TTL-je. Alapvet\u0151en fix TTL-\u00fcnk van. <\/p>\n<p><\/p>\n<p><em>Micsoda, ha nem titok?<\/em><\/p>\n<p><\/p>\n<p>1 \u00f3ra, teh\u00e1t inakt\u00edv \u2013 1 \u00f3ra. Ha nem haszn\u00e1lj\u00e1k, akkor elt\u00fcntetj\u00fck. De ebben nincs semmi meglep\u0151, hiszen kl\u00f3nt m\u00e1sodpercek alatt fel tudunk emelni. \u00c9s ha \u00fajra sz\u00fcks\u00e9g van r\u00e1, csak k\u00e9rj\u00fck. <\/p>\n<p><\/p>\n<p><em>Az is \u00e9rdekes sz\u00e1momra, hogy milyen technol\u00f3gi\u00e1kat v\u00e1lasztanak, mert p\u00e9ld\u00e1ul mi p\u00e1rhuzamosan haszn\u00e1lunk t\u00f6bb m\u00f3dszert k\u00fcl\u00f6nb\u00f6z\u0151 okok miatt. Mi\u00e9rt \u00e9ppen a ZFS? Mi\u00e9rt nem haszn\u00e1lt\u00e1k az LVM-t? Eml\u00edtette, hogy az LVM-n\u00e9l probl\u00e9m\u00e1k voltak. Milyenek voltak azok a probl\u00e9m\u00e1k? V\u00e9lem\u00e9nyem szerint a legoptim\u00e1lisabb a t\u00e1rol\u00f3rendszer v\u00e1laszt\u00e1sa a teljes\u00edtm\u00e9ny szempontj\u00e1b\u00f3l.<\/em> <\/p>\n<p><\/p>\n<p><em>Mi a legf\u0151bb probl\u00e9ma a ZFS-sel? Az, hogy mindent egy hoszton kell futtatni, teh\u00e1t az \u00f6sszes p\u00e9ld\u00e1ny egy oper\u00e1ci\u00f3s rendszer keretein bel\u00fcl \u00e9l. A t\u00e1rol\u00f3rendszer eset\u00e9ben viszont k\u00fcl\u00f6nf\u00e9le hardvereket csatlakoztathatsz. Az egyetlen sz\u0171k keresztmetszet a t\u00e1rol\u00f3rendszer blokkjai.<\/em><\/p>\n<p><\/p>\n<p>Az LVM-r\u0151l konkr\u00e9tan a meetup-on tudunk besz\u00e9lni. A t\u00e1rol\u00f3rendszer \u2013 az egyszer\u0171en dr\u00e1g\u00e1bb. A ZFS rendszert b\u00e1rmikor bevezethetj\u00fck. Meg tudja telep\u00edteni a saj\u00e1t g\u00e9p\u00e9re. Egyszer\u0171en let\u00f6ltheti a rep\u00f3t \u00e9s telep\u00edtheti. A ZFS szinte mindenhova telep\u00edthet\u0151, ha Linuxr\u00f3l besz\u00e9l\u00fcnk. Teh\u00e1t nagyon rugalmas megold\u00e1sokat kapunk. Maga a ZFS rengeteg mindent k\u00edn\u00e1l. Ak\u00e1r v\u00e9gtelen mennyis\u00e9g\u0171 adatot is felt\u00f6lthet, \u00e9s sok lemezt csatlakoztathat, snapshotok is vannak. \u00c9s, ahogy m\u00e1r eml\u00edtettem, egyszer\u0171en adminisztr\u00e1lhat\u00f3. Teh\u00e1t haszn\u00e1lni nagyon kellemes. Megb\u00edzhat\u00f3, sok \u00e9ves tapasztalattal rendelkezik, \u00e9s egy hatalmas, n\u00f6vekv\u0151 k\u00f6z\u00f6ss\u00e9g \u00e1ll m\u00f6g\u00f6tte. A ZFS egy nagyon megb\u00edzhat\u00f3 megold\u00e1s. <\/p>\n<p><\/p>\n<p>Nyikolaj Szamohvalov: Hozz\u00e1f\u0171zhetek m\u00e9g valamit? Nyikolajnak h\u00edvnak, egy\u00fctt dolgozom Anatolijjal. Egyet\u00e9rtek azzal, hogy a t\u00e1rol\u00f3rendszer nagyszer\u0171. N\u00e9h\u00e1ny \u00fcgyfel\u00fcnknek van Pure Storage \u00e9s hasonl\u00f3. <\/p>\n<p><\/p>\n<p>Anatolij helyesen megjegyezte, hogy a modularit\u00e1sra \u00f6sszpontos\u00edtunk. A j\u00f6v\u0151ben egyetlen fel\u00fcletet lehetne megval\u00f3s\u00edtani \u2013 k\u00e9sz\u00edts egy pillanatk\u00e9pet, k\u00e9sz\u00edts egy kl\u00f3nt, t\u00f6r\u00f6ld a kl\u00f3nt. Ez mind k\u00f6nny\u0171. \u00c9s a t\u00e1rol\u00f3 is nagyszer\u0171, ha van.<\/p>\n<p><\/p>\n<p>De a ZFS mindenki sz\u00e1m\u00e1ra el\u00e9rhet\u0151. Eleg\u00fcnk van a DelPhix-b\u0151l, 300 \u00fcgyfel\u00fck van. Ezek k\u00f6z\u00fcl a Fortune 100-ban 50 \u00fcgyf\u00e9l tal\u00e1lhat\u00f3, teh\u00e1t \u0151k a NASA-ra \u00e9s hasonl\u00f3kra \u00f6sszpontos\u00edtanak. Itt az ideje, hogy ezt a technol\u00f3gi\u00e1t mindenki megkapja. Ez\u00e9rt van az open source magunk. Van egy fel\u00fcleti r\u00e9sz, ami nem open source. Ez az a platform, amelyet bemutatunk. De szeretn\u00e9nk, ha ez mindenki sz\u00e1m\u00e1ra el\u00e9rhet\u0151 lenne. Forradalmat akarunk el\u00e9rni, hogy a tesztel\u0151k abbahagyt\u00e1k a tal\u00e1lgat\u00e1st a laptopokon. \u00cdrnunk kell a SELECT-ot, \u00e9s azonnal l\u00e1tnunk kell, hogy lass\u00fa. El\u00e9g volt v\u00e1rni, am\u00edg a DBA err\u0151l besz\u00e9l. Ez a f\u0151 c\u00e9l. \u00c9s \u00fagy gondolom, hogy el fogunk idejutni mindannyian. Ezt a dolgot az\u00e9rt csin\u00e1ljuk, hogy mindenkinek legyen. Ez\u00e9rt a ZFS, mert mindenhol el\u00e9rhet\u0151 lesz. K\u00f6sz\u00f6nj\u00fck a k\u00f6z\u00f6ss\u00e9gnek a probl\u00e9m\u00e1k megold\u00e1s\u00e1\u00e9rt \u00e9s az\u00e9rt, hogy ny\u00edlt forr\u00e1sk\u00f3d\u00fa licenc\u00fck van stb. <\/p>\n<p><\/p>\n<p><em>\u00dcdv\u00f6zl\u00f6m! K\u00f6sz\u00f6n\u00f6m a bemutat\u00f3t! Maximnak h\u00edvnak. Olyan probl\u00e9m\u00e1kat oldottunk meg, mint amilyeneket ti. Mi n\u00e1lunk megoldottuk. Hogyan osztj\u00e1tok meg az er\u0151forr\u00e1sokat ezek k\u00f6z\u00f6tt a kl\u00f3nok k\u00f6z\u00f6tt? Minden kl\u00f3n a saj\u00e1t feladat\u00e1val foglalkozhat egy adott pillanatban: az egyik valamit tesztel, a m\u00e1sik m\u00e1st, valakin\u00e9l index \u00e9p\u00fcl, valakinek neh\u00e9z folyamat fut. Ha a CPU-t m\u00e9g el lehet osztani, akkor IO-ban hogyan osztj\u00e1tok meg? Ez az els\u0151 k\u00e9rd\u00e9s.<\/em><\/p>\n<p><\/p>\n<p><em>A m\u00e1sodik k\u00e9rd\u00e9sem a tesztk\u00f6rnyezetek elt\u00e9r\u0151s\u00e9g\u00e9r\u0151l sz\u00f3l. Tegy\u00fck fel, hogy itt ZFS van, \u00e9s minden szuper, de a kliensn\u00e9l a termel\u00e9si k\u00f6rnyezet nem ZFS, hanem p\u00e9ld\u00e1ul ext4. Mi t\u00f6rt\u00e9nik ebben az esetben?<\/em><\/p>\n<p><\/p>\n<p>Nagyon j\u00f3 k\u00e9rd\u00e9sek. Kicsit eml\u00edtettem ezt a probl\u00e9m\u00e1t, hogy hogyan osztjuk meg az er\u0151forr\u00e1sokat. A megold\u00e1s a k\u00f6vetkez\u0151. K\u00e9pzelj\u00e9tek el, hogy a staging-en teszteltek. Az is el\u0151fordulhat, hogy egyszerre valaki egy terhel\u00e9st ad, valaki m\u00e1s meg egy m\u00e1sikat. \u00c9s v\u00e9g\u00fcl nem vil\u00e1gos metrik\u00e1kat l\u00e1ttok. Ugyanez a probl\u00e9ma lehet a termel\u00e9sben is. Amikor szeretn\u00e9tek leellen\u0151rizni egy lek\u00e9rdez\u00e9st, \u00e9s l\u00e1tj\u00e1tok, hogy valamilyen probl\u00e9ma van vele \u2013 lassan fut, akkor val\u00f3j\u00e1ban nem a lek\u00e9rdez\u00e9ssel van a probl\u00e9ma, hanem azzal, hogy valamilyen p\u00e1rhuzamos terhel\u00e9s van. <\/p>\n<p><\/p>\n<p>Ez\u00e9rt fontos, hogy f\u00f3kusz\u00e1ljunk arra, milyen tervet k\u00f6vet\u00fcnk, \u00e9s h\u00e1ny l\u00e9p\u00e9st tesz\u00fcnk a terv keret\u00e9ben, valamint mennyi adatot emel\u00fcnk fel ehhez. Az, hogy a lemezeink p\u00e9ld\u00e1ul valamivel leterheltek lesznek, konkr\u00e9tan befoly\u00e1solja az id\u0151z\u00edt\u00e9st. De az adatmennyis\u00e9g alapj\u00e1n fel tudjuk m\u00e9rni, mennyire terhelt ez a k\u00e9r\u00e9s. Nem olyan l\u00e9nyeges, hogy ezzel egyszerre v\u00e9grehajtunk egy m\u00e1sik feladatot is. <\/p>\n<p><\/p>\n<p><em>K\u00e9t k\u00e9rd\u00e9sem van. Ez t\u00e9nyleg nagyon klassz dolog. Volt-e olyan eset, amikor a termel\u00e9si adatok kritikus fontoss\u00e1g\u00faak voltak, p\u00e9ld\u00e1ul bankk\u00e1rtyasz\u00e1mok? Van-e m\u00e1r valami k\u00e9sz, vagy ez egy k\u00fcl\u00f6n feladat? A m\u00e1sodik k\u00e9rd\u00e9sem \u2013 van-e valami hasonl\u00f3 a MySQL-hez?<\/em><\/p>\n<p><\/p>\n<p>Az adatokkal kapcsolatban. Mi obfuszk\u00e1l\u00e1st fogunk v\u00e9gezni, de jelenleg ezt nem tessz\u00fck. De ha Joe-t telep\u00edted, \u00e9s nem enged\u00e9lyezed a fejleszt\u0151knek a hozz\u00e1f\u00e9r\u00e9st, akkor az adatokhoz nincs hozz\u00e1f\u00e9r\u00e9s. Mi\u00e9rt? Mert Joe nem mutatja az adatokat. Csak a metrik\u00e1kat \u00e9s a terveket mutatja, \u00e9s ennyi. Ezt kifejezetten \u00edgy alak\u00edtott\u00e1k ki, mivel ez a kliens\u00fcnk egyike a k\u00f6vetelm\u00e9nyeinek. \u0150k azt akart\u00e1k, hogy legyen lehet\u0151s\u00e9g\u00fck optimaliz\u00e1lni, de ne adjanak b\u00e1rkinek hozz\u00e1f\u00e9r\u00e9st. <\/p>\n<p><\/p>\n<p>A MySQL-r\u0151l. Ezt a rendszert b\u00e1rmire haszn\u00e1lhatjuk, ami \u00e1llapotot t\u00e1rol a lemezen. Mivel Postgresszel foglalkozunk, most a teljes automatiz\u00e1l\u00e1st v\u00e9gezz\u00fck a Postgres sz\u00e1m\u00e1ra. Az adatok automatiz\u00e1lt megszerz\u00e9s\u00e9re a h\u00e1tt\u00e9rb\u0151l t\u00f6reksz\u00fcnk. helyesen konfigur\u00e1ljuk a Postgres-t. Tudjuk, hogyan kell \u00fagy be\u00e1ll\u00edtani a terveket, hogy ezek \u00f6sszhangban legyenek, stb. <\/p>\n<p><\/p>\n<p>De mivel a rendszer b\u0151v\u00edthet\u0151, a MySQL-re is haszn\u00e1lhat\u00f3 lesz. Ilyen p\u00e9ld\u00e1k l\u00e9teznek. Hasonl\u00f3 dolgot haszn\u00e1l a Yandex, de ezt sehol nem publik\u00e1lj\u00e1k. Bels\u0151leg a Yandex.Metrik\u00e1ban haszn\u00e1lj\u00e1k ezt. Ott pontosan a MySQL-t\u00f6rt\u00e9net van. De a technol\u00f3gi\u00e1k ugyanazok, ZFS. <\/p>\n<p><\/p>\n<p><em>K\u00f6sz\u00f6n\u00f6m az el\u0151ad\u00e1st! Nekem is van p\u00e1r k\u00e9rd\u00e9sem. Megeml\u00edtetted, hogy a kl\u00f3noz\u00e1st lehet haszn\u00e1lni az elemz\u00e9shez, p\u00e9ld\u00e1ul tov\u00e1bbi indexek l\u00e9trehoz\u00e1s\u00e1ra. Mes\u00e9ln\u00e9l egy kicsit b\u0151vebben, hogyan m\u0171k\u00f6dik ez?<\/em><\/p>\n<p><\/p>\n<p><em>\u00c9s azonnal felteszem a m\u00e1sodik k\u00e9rd\u00e9st a standok egys\u00e9gess\u00e9g\u00e9r\u0151l, a tervek egys\u00e9gess\u00e9g\u00e9r\u0151l. A terv r\u00e9szben f\u00fcgg a Postgres \u00e1ltal \u00f6sszegy\u0171jt\u00f6tt statisztik\u00e1t\u00f3l. Hogyan oldj\u00e1tok meg ezt a probl\u00e9m\u00e1t?<\/em><\/p>\n<p><\/p>\n<p>Nincsenek konkr\u00e9t esettanulm\u00e1nyok az elemz\u00e9sekr\u0151l, mert m\u00e9g nem haszn\u00e1ltuk \u00edgy, de van lehet\u0151s\u00e9g r\u00e1. Ha az indekszekr\u0151l besz\u00e9l\u00fcnk, k\u00e9pzelj\u00fck el, hogy egy k\u00e9rd\u00e9s fut egy sz\u00e1mos milli\u00f3 rekordb\u00f3l \u00e1ll\u00f3 t\u00e1bl\u00e1n, olyan oszlopban, amelyet \u00e1ltal\u00e1ban nem indexelnek a prod k\u00f6rnyezetben. \u00c9s szeretn\u00e9nk n\u00e9h\u00e1ny adatot kisz\u00e1m\u00edtani. Ha ezt a k\u00e9rd\u00e9st a prod-on futtatjuk, van es\u00e9ly arra, hogy a prod-on le\u00e1ll\u00e1s lesz, mert a k\u00e9rd\u00e9s ott egy percig fog futni. <\/p>\n<p><\/p>\n<p>Rendben, csin\u00e1ljunk egy v\u00e9kony kl\u00f3nt, amelyet nem f\u00e9lek n\u00e9h\u00e1ny percre meg\u00e1ll\u00edtani. A k\u00e9nyelmesebb analitika \u00e9rdek\u00e9ben adjunk hozz\u00e1 indexeket azokhoz az oszlopokhoz, amelyekben az adatok \u00e9rdekelnek minket. <\/p>\n<p><\/p>\n<p><em>Az index minden alkalommal l\u00e9trej\u00f6n?<\/em><\/p>\n<p><\/p>\n<p>Lehet \u00fagy is csin\u00e1lni, hogy meg\u00e9rintj\u00fck az adatokat, k\u00e9sz\u00edt\u00fcnk pillanatfelv\u00e9teleket, majd ezekb\u0151l a pillanatfelv\u00e9telekb\u0151l \u00e1llunk helyre \u00e9s futtatunk \u00faj k\u00e9rd\u00e9seket. Teh\u00e1t lehet \u00fagy csin\u00e1lni, hogy \u00faj kl\u00f3nokat emelj\u00fcnk fel, m\u00e1r el\u0151re be\u00e1ll\u00edtott indexekkel.<\/p>\n<p><\/p>\n<p>A statisztikai k\u00e9rd\u00e9ssel kapcsolatban, ha helyre\u00e1llunk egy biztons\u00e1gi m\u00e1solatb\u00f3l, ha replik\u00e1lunk, akkor a statisztik\u00e1nk pontosan ugyanaz lesz. Mert teljesen meg\u0151rizz\u00fck az adatok fizikai strukt\u00far\u00e1j\u00e1t, ahogy vannak, az \u00f6sszes statisztikai metrik\u00e1val egy\u00fctt. <\/p>\n<p><\/p>\n<p>Itt egy m\u00e1sik probl\u00e9ma mer\u00fcl fel. Ha felh\u0151megold\u00e1s haszn\u00e1latban van, akkor csak logikai ment\u00e9sek hozz\u00e1f\u00e9rhet\u0151k, mert a Google \u00e9s az Amazon nem ad lehet\u0151s\u00e9get fizikai m\u00e1solat k\u00e9sz\u00edt\u00e9s\u00e9re. Ott ilyen probl\u00e9ma lesz. <\/p>\n<p><\/p>\n<p><em>K\u00f6sz\u00f6n\u00f6m az el\u0151ad\u00e1st. Itt k\u00e9t j\u00f3 k\u00e9rd\u00e9s mer\u00fclt fel a MySQL-r\u0151l \u00e9s az er\u0151forr\u00e1sok eloszt\u00e1s\u00e1r\u00f3l. De l\u00e9nyeg\u00e9ben minden arra reduk\u00e1l\u00f3dik, hogy ez nem konkr\u00e9t DBMS-ek k\u00e9rd\u00e9se, hanem \u00e1ltal\u00e1ban a f\u00e1jlrendszerr\u0151l van sz\u00f3. Ennek megfelel\u0151en az er\u0151forr\u00e1sok eloszt\u00e1s\u00e1nak k\u00e9rd\u00e9seit is onnan kell megoldani, nem azzal, hogy ez Postgres, hanem a f\u00e1jlrendszeren bel\u00fcl. <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/server\/dts-dronten\/\"   title=\"szerveren\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2602\">szerveren<\/a>, az instance-en.<\/em> <\/p>\n<p><\/p>\n<p><em>A k\u00e9rd\u00e9sem egy kicsit m\u00e1sr\u00f3l sz\u00f3l. Ez ink\u00e1bb a t\u00f6bb r\u00e9tegb\u0151l \u00e1ll\u00f3 adatb\u00e1zis r\u00e9tegz\u0151d\u00e9s\u00e9re vonatkozik, ahol t\u00f6bb r\u00e9teg van. P\u00e9ld\u00e1ul be\u00e1ll\u00edtottunk egy t\u00edz terab\u00e1jtos k\u00e9p friss\u00edt\u00e9s\u00e9t, folyik a replik\u00e1ci\u00f3. \u00c9s kifejezetten ezt a megold\u00e1st haszn\u00e1ljuk adatb\u00e1zisokhoz. A replik\u00e1ci\u00f3 zajlik, az adatok friss\u00fclnek. Itt p\u00e1rhuzamosan 100 dolgoz\u00f3 dolgozik, akik folyamatosan futtatj\u00e1k ezeket a k\u00fcl\u00f6nb\u00f6z\u0151 pillanatfelv\u00e9teleket. Mi a teend\u0151? Hogyan lehet \u00fagy megoldani, hogy ne legyen konfliktus, hogy \u0151k elind\u00edtottak egyet, azt\u00e1n a f\u00e1jlrendszer megv\u00e1ltozott, \u00e9s ezek a pillanatfelv\u00e9telek elcs\u00fasztak?<\/em> <\/p>\n<p><\/p>\n<p>Nem fognak menni, mert \u00edgy m\u0171k\u00f6dik a ZFS. K\u00fcl\u00f6n tudjuk tartani egy sz\u00e1lban a f\u00e1jlrendszer v\u00e1ltoz\u00e1sait, amelyeket a replik\u00e1ci\u00f3 hoz. \u00c9s az r\u00e9gi adatok verzi\u00f3in kl\u00f3nokat tarthatunk, amelyeket a fejleszt\u0151k haszn\u00e1lnak. \u00c9s ez n\u00e1lunk m\u0171k\u00f6dik, ezzel minden rendben van.<\/p>\n<p><\/p>\n<p><em>Teh\u00e1t az aggiornamento egy plusz r\u00e9tekk\u00e9nt fog t\u00f6rt\u00e9nni, \u00e9s az \u00f6sszes \u00faj pillanatk\u00e9p ennek a r\u00e9tegnek az alapj\u00e1n fog k\u00e9sz\u00fclni, ugye?<\/em> <\/p>\n<p><\/p>\n<p>Az el\u0151z\u0151 r\u00e9tegekb\u0151l, amelyek a kor\u00e1bbi replik\u00e1ci\u00f3kb\u00f3l sz\u00e1rmaztak. <\/p>\n<p><\/p>\n<p><em>A kor\u00e1bbi r\u00e9tegek elt\u0171nnek, de hivatkozni fognak a r\u00e9gi r\u00e9tegre, m\u00edg az \u00faj k\u00e9pek az utols\u00f3 r\u00e9tegb\u0151l fognak sz\u00e1rmazni, amit az aggiornamento sor\u00e1n nyert\u00fcnk?<\/em><\/p>\n<p><\/p>\n<p>\u00d6sszess\u00e9g\u00e9ben igen. <\/p>\n<p><\/p>\n<p><em>Akkor ennek k\u00f6vetkezm\u00e9nyek\u00e9nt sok r\u00e9teg\u00fcnk lesz. Id\u0151vel ezeket t\u00f6m\u00f6r\u00edteni kell, igaz?<\/em><\/p>\n<p><\/p>\n<p>Igen, pontosan. Van egy id\u0151ablak. Heti pillanatk\u00e9peket t\u00e1rolunk. Ez att\u00f3l f\u00fcgg, hogy mennyi er\u0151forr\u00e1sod van. Ha van lehet\u0151s\u00e9ged sok adatot t\u00e1rolni, hossz\u00fa ideig t\u00e1rolhatod a pillanatk\u00e9peket. Ezek magukt\u00f3l nem fognak elt\u0171nni. Adatk\u00e1rosod\u00e1s nem lesz. Ha a pillanatk\u00e9pek elavultnak t\u0171nnek sz\u00e1munkra, azaz a c\u00e9g politik\u00e1j\u00e1t\u00f3l f\u00fcgg, akkor egyszer\u0171en t\u00f6r\u00f6lhetj\u00fck \u0151ket, \u00e9s felszabad\u00edthatunk helyet. <\/p>\n<p><\/p>\n<p><em>\u00dcdv\u00f6zl\u00f6m, k\u00f6sz\u00f6n\u00f6m a prezent\u00e1ci\u00f3t! A Joe k\u00e9rd\u00e9s\u00e9vel kapcsolatban. Azt mondta, hogy az \u00fcgyf\u00e9l nem akarta, hogy b\u00e1rkinek hozz\u00e1f\u00e9r\u00e9se legyen az adatokhoz. Szigor\u00faan v\u00e9ve, ha valakinek van Explain Analyze eredm\u00e9nye, akkor be tud kukkantani az adatokba.<\/em> <\/p>\n<p><\/p>\n<p>Igen, pontosan. P\u00e9ld\u00e1ul ezt \u00edrhatjuk: \u201eSELECT FROM WHERE email = valaki\u201d. Teh\u00e1t nem l\u00e1tjuk magukat az adatokat, de n\u00e9h\u00e1ny k\u00f6zvetett jelet n\u00e9zhet\u00fcnk. Ezt fontos meg\u00e9rteni. De m\u00e1s oldalr\u00f3l ez mind l\u00e1that\u00f3. Van auditlogunk, van m\u00e1s koll\u00e9g\u00e1k fel\u00fcgyelete, akik szint\u00e9n l\u00e1tj\u00e1k, mivel foglalkoznak a fejleszt\u0151k. \u00c9s ha valaki megpr\u00f3b\u00e1lja ezt tenni, akkor a biztons\u00e1gi szolg\u00e1lat el fog menni hozz\u00e1juk, \u00e9s foglalkozik a probl\u00e9m\u00e1val. <\/p>\n<p><\/p>\n<p><em>J\u00f3 napot! K\u00f6sz\u00f6n\u00f6m a prezent\u00e1ci\u00f3t! Van egy r\u00f6vid k\u00e9rd\u00e9sem. Ha a c\u00e9gn\u00e9l a Slack nem haszn\u00e1latos, van valamilyen k\u00f6t\u00e9s hozz\u00e1 most, vagy a fejleszt\u0151k sz\u00e1m\u00e1ra l\u00e9trehozhat\u00f3k p\u00e9ld\u00e1nyok, hogy csatlakozzanak egy tesztalkalmaz\u00e1shoz az adatb\u00e1zisokhoz?<\/em><\/p>\n<p><\/p>\n<p>Jelenleg csak Slack integr\u00e1ci\u00f3 l\u00e9tezik, teh\u00e1t nincs m\u00e1s \u00fczenetk\u00fcld\u0151, de szeretn\u00e9nk t\u00e1mogatni m\u00e1s \u00fczenetk\u00fcld\u0151ket is. Mit tehet? Telep\u00edthet egy saj\u00e1t DB Labot Joe n\u00e9lk\u00fcl, haszn\u00e1lhatja a REST API-t vagy a platformunkat, \u00e9s kl\u00f3nokat hozhat l\u00e9tre, valamint csatlakozhat PSQL-lel. De ezt csak akkor teheti meg, ha hajland\u00f3 hozz\u00e1f\u00e9r\u00e9st adni a fejleszt\u0151inek az adatokhoz, mert itt m\u00e1r nem lesz semmilyen k\u00e9perny\u0151. <\/p>\n<p><\/p>\n<p><em>Erre a r\u00e9tegre nincs sz\u00fcks\u00e9gem, viszont sz\u00fcks\u00e9gem lenne egy ilyen lehet\u0151s\u00e9gre.<\/em><\/p>\n<p><\/p>\n<p>Akkor igen, ezt meg lehet csin\u00e1lni.<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/524542\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a backend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e SQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u00ab\u043f\u0440\u043e\u0434\u0435\u00bb? \u0412 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0438\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u00ab\u043f\u0440\u043e\u0434\u0443\u00bb \u0435\u0441\u0442\u044c \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0443 \u0432\u0441\u0435\u0445. \u0414\u0430 \u0438 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u0411\u0414 \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0430\u0441\u044b. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e DBA \u2014 Joe. \u041e\u043d \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97940,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\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\/dba-bot-joe-anatolij-stansler-postgres-ai\" \/>\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\udd47DBA-\u0431\u043e\u0442 Joe. \u0410\u043d\u0430\u0442\u043e\u043b\u0438\u0439 \u0421\u0442\u0430\u043d\u0441\u043b\u0435\u0440 (Postgres.ai) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai\" \/>\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-10-23T06:42:49+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-23T06:42:49+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\udd47 DBA-bot Joe. Anatolij Stanszler (Postgres.ai) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","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\udd47DBA-\u0431\u043e\u0442 Joe. \u0410\u043d\u0430\u0442\u043e\u043b\u0438\u0439 \u0421\u0442\u0430\u043d\u0441\u043b\u0435\u0440 (Postgres.ai) | ProHoster","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","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-10-23T06:42:49+00:00","article:modified_time":"2020-10-23T06:42:49+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"97939","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 10:09:26","updated":"2026-02-09 21:38:06","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\/97939","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=97939"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/97939\/revisions"}],"predecessor-version":[{"id":159884,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/97939\/revisions\/159884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/97940"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=97939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=97939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=97939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}