{"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\/sk\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","title":{"rendered":"DBA-bot Joe. Anatolij Stansler (Postgres.ai)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/3bb5cc6d6be1699fc72342a74aa4020a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ako backend v\u00fdvoj\u00e1r vie, \u017ee SQL dopyt bude dobre fungova\u0165 v produkcii? V ve\u013ek\u00fdch alebo r\u00fdchlo rast\u00facich spolo\u010dnostiach pr\u00edstup k produkcii nem\u00e1 ka\u017ed\u00fd. A aj s pr\u00edstupom mo\u017eno nie v\u0161etky dopyty mo\u017eno bezbolestne overi\u0165, a vytvorenie k\u00f3pie datab\u00e1zy \u010dasto trv\u00e1 hodiny. Aby sme tieto probl\u00e9my vyrie\u0161ili, vytvorili sme umel\u00e9ho DBA - Joea. U\u017e bol \u00faspe\u0161ne implementovan\u00fd v nieko\u013ek\u00fdch spolo\u010dnostiach a pom\u00e1ha mnoh\u00fdm v\u00fdvoj\u00e1rom. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Video:<\/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=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/48e63de499e46be4be19aa8c926e5716.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahojte! Vol\u00e1m sa Anatolij Stan\u0161ler. Pracujem v spolo\u010dnosti <noindex><a rel=\"nofollow\" href=\"https:\/\/postgres.ai\/\">Postgres.ai<\/a><\/noindex>. Zaober\u00e1me sa t\u00fdm, \u017ee ur\u00fdch\u013eujeme proces v\u00fdvoja t\u00fdm, \u017ee odb\u00farava\u0165 oneskorenia sp\u00f4soben\u00e9 pr\u00e1cou s Postgresom pre v\u00fdvoj\u00e1rov, DBA a QA.<\/p>\n<p><\/p>\n<p>M\u00e1me skvel\u00fdch klientov a dnes bude \u010das\u0165 predn\u00e1\u0161ky venovan\u00e1 pr\u00edpadom, ktor\u00e9 sme zaznamenali pri pr\u00e1ci s nimi. Povediem o tom, ako sme im pomohli vyrie\u0161i\u0165 pomerne z\u00e1va\u017en\u00e9 probl\u00e9my.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5bd7d2538a4940afb28d6375a9516760.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ke\u010f vedieme v\u00fdvoj a rob\u00edme zlo\u017eit\u00e9 za\u0165a\u017een\u00e9 migr\u00e1cie, kladieme si ot\u00e1zku: \u201ePolet\u00ed t\u00e1to migr\u00e1cia?\u201c. Vyu\u017e\u00edvame review, m\u00e1me vedomosti od sk\u00fasenej\u0161\u00edch kolegov, DBA expertov. A oni m\u00f4\u017eu poveda\u0165 \u2013 polet\u00ed alebo nepolet\u00ed. <\/p>\n<p><\/p>\n<p>Ale mo\u017eno by bolo lep\u0161ie, keby sme to mohli sami otestova\u0165 na plnohodnotn\u00fdch k\u00f3pi\u00e1ch. A dnes presne o tom budeme hovori\u0165, ak\u00e9 s\u00fa s\u00fa\u010dasn\u00e9 pr\u00edstupy k testovaniu a ako to mo\u017eno robi\u0165 lep\u0161ie a s ak\u00fdmi n\u00e1strojmi. Taktie\u017e sa porozpr\u00e1vame, ak\u00e9 v\u00fdhody a nev\u00fdhody maj\u00fa tieto pr\u00edstupy a \u010do m\u00f4\u017eeme v tomto zlep\u0161i\u0165. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/aca9f4c4fbbfc6db9c24f862216fb5d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kto niekedy robil indexy alebo in\u00e9 zmeny priamo na produkcii? Celkom dos\u0165. A ko\u013ek\u00fdm to sp\u00f4sobilo stratu d\u00e1t alebo v\u00fdpadky? Vtedy pozn\u00e1te t\u00fato boles\u0165. Chvalabohu, z\u00e1lohy existuj\u00fa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7795bf3cb1f3f6f9919ca42758fa51e9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prv\u00fd pr\u00edstup \u2013 to je testovanie v produkcii. Alebo ke\u010f v\u00fdvoj\u00e1r sed\u00ed na lok\u00e1lnej ma\u0161ine, m\u00e1 testovacie \u00fadaje, je tam nejak\u00fd obmedzen\u00fd v\u00fdber. A vyd\u00e1me to na produkciu, a dostaneme tak\u00fato situ\u00e1ciu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/05b120bf57904f553422f419337d5220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je to bolestiv\u00e9, je to drah\u00e9. Asi to tak lep\u0161ie nerobi\u0165. <\/p>\n<p><\/p>\n<p>A ako to spravi\u0165 lep\u0161ie? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a8727bc2cd217d89edaf9df8588306d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Po\u010fme vzia\u0165 staging a vy\u010dleni\u0165 tam nejak\u00fa \u010das\u0165 produkcie. Alebo v lep\u0161om pr\u00edpade zoberieme skuto\u010dn\u00fa produkciu, v\u0161etky \u00fadaje. A potom, \u010do sme to lok\u00e1lne vyvinuli, budeme \u010falej overova\u0165 aj na stagingu. <\/p>\n<p><\/p>\n<p>To n\u00e1m umo\u017en\u00ed odstr\u00e1ni\u0165 \u010das\u0165 ch\u00fdb, t. j. nedopusti\u0165 ich na produkcii. <\/p>\n<p><\/p>\n<p>Ak\u00e9 s\u00fa probl\u00e9my? <\/p>\n<p><\/p>\n<ul>\n<li>Probl\u00e9m je, \u017ee tento staging zdie\u013eame s kolegami. A ve\u013emi \u010dasto sa st\u00e1va, \u017ee vykon\u00e1te nejak\u00fa zmenu, bum \u2013 a \u017eiadne \u00fadaje nie s\u00fa, pr\u00e1ca je zbyto\u010dn\u00e1. Staging bol viac ako nieko\u013eko terabytov. A mus\u00edme dlho \u010daka\u0165, k\u00fdm sa znova spust\u00ed. A rozhodujeme sa to dorie\u0161i\u0165 zajtra. V\u0161etko, m\u00e1me v\u00fdvoj pozastaven\u00fd. <\/li>\n<li>A samozrejme, m\u00e1me tam ve\u013ea kolegov, ve\u013ea t\u00edmov. A treba to ru\u010dne koordinova\u0165. A to je nepr\u00edjemn\u00e9. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/ad4612f2b06ac09e666e33196d898a79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A stoj\u00ed za to poveda\u0165, \u017ee m\u00e1me iba jednu \u0161ancu, jeden v\u00fdstrel, ak chceme vykona\u0165 nejak\u00e9 zmeny v datab\u00e1ze, dotkn\u00fa\u0165 sa \u00fadajov, zmeni\u0165 \u0161trukt\u00faru. A ak sa nie\u010do pokazilo, ak v migr\u00e1cii bola chyba, tak sa u\u017e r\u00fdchlo nevr\u00e1time sp\u00e4\u0165. <\/p>\n<p><\/p>\n<p>Je to lep\u0161ie ako predch\u00e1dzaj\u00faci pr\u00edstup, ale st\u00e1le je tu ve\u013ek\u00e1 pravdepodobnos\u0165, \u017ee nejak\u00e1 chyba prejde do produkcie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/73faffc3ef6e368a0901145c48b903b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u010co n\u00e1m br\u00e1ni da\u0165 ka\u017ed\u00e9mu v\u00fdvoj\u00e1rovi testovac\u00ed st\u00e1nok, plnohodnotn\u00fa k\u00f3piu? Mysl\u00edm, \u017ee je jasn\u00e9, \u010do br\u00e1ni. <\/p>\n<p><\/p>\n<p>Kto m\u00e1 datab\u00e1zu v\u00e4\u010d\u0161iu ako terabajt? Viac ako polovica s\u00e1ly. <\/p>\n<p><\/p>\n<p>A je jasn\u00e9, \u017ee udr\u017eiava\u0165 stroje pre ka\u017ed\u00e9ho v\u00fdvoj\u00e1ra, ke\u010f je tak\u00e1 ve\u013ek\u00e1 produkcia, je ve\u013emi drah\u00e9, a navy\u0161e aj \u010dasovo n\u00e1ro\u010dn\u00e9. <\/p>\n<p><\/p>\n<p>M\u00e1me klientov, ktor\u00ed pochopili, \u017ee je ve\u013emi d\u00f4le\u017eit\u00e9 testova\u0165 v\u0161etky zmeny na plnohodnotn\u00fdch k\u00f3pi\u00e1ch, ale ich datab\u00e1za je pod terabajt a nemaj\u00fa zdroje na to, aby pre ka\u017ed\u00e9ho v\u00fdvoj\u00e1ra udr\u017eali testovac\u00ed st\u00e1nok. Preto musia s\u0165ahova\u0165 dumpy na svoje lok\u00e1lne zariadenia a testova\u0165 takto. To trv\u00e1 ve\u013ea \u010dasu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/8c1c804db71ffb5b79b5284670b3427b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aj ke\u010f to rob\u00edte v r\u00e1mci infra\u0161trukt\u00fary, stiahnu\u0165 jeden terabajt \u00fadajov za hodinu \u2013 to je u\u017e ve\u013emi dobr\u00e9. Ale pou\u017e\u00edvaj\u00fa logick\u00e9 dumpy, s\u0165ahuj\u00fa lok\u00e1lne z cloudu. Pre nich je r\u00fdchlos\u0165 asi 200 gigabajtov za hodinu. A e\u0161te potrebuj\u00fa \u010das na to, aby sa rozvinuli z logick\u00e9ho dumpu, nain\u0161talovali indexy a pod.<\/p>\n<p><\/p>\n<p>Ale tento pr\u00edstup pou\u017e\u00edvaj\u00fa, preto\u017ee to umo\u017e\u0148uje udr\u017eiava\u0165 produkciu spo\u013eahlivou. <\/p>\n<p><\/p>\n<p>\u010co m\u00f4\u017eeme urobi\u0165? Po\u010fme spravi\u0165 tak, aby testovacie st\u00e1nky boli lacn\u00e9 a d\u00e1me ka\u017ed\u00e9mu v\u00fdvoj\u00e1rovi jeho vlastn\u00fd testovac\u00ed st\u00e1nok.<\/p>\n<p><\/p>\n<p>A to je mo\u017en\u00e9. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a763fc2677fe93df884b80561b5270a2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A v tomto pr\u00edstupe, ke\u010f rob\u00edme tenk\u00e9 klony pre ka\u017ed\u00e9ho v\u00fdvoj\u00e1ra, m\u00f4\u017eeme to zdie\u013ea\u0165 na jednom stroji. Napr\u00edklad, ak m\u00e1te \u0161tyri terabajty datab\u00e1zy a chcete ju poskytn\u00fa\u0165 10 v\u00fdvoj\u00e1rom, nemus\u00edte ma\u0165 10 x \u0161tyri terabajty datab\u00e1z. Sta\u010d\u00ed v\u00e1m jeden stroj na vytv\u00e1ranie tenk\u00fdch izolovan\u00fdch k\u00f3pi\u00ed pre ka\u017ed\u00e9ho v\u00fdvoj\u00e1ra, vyu\u017e\u00edvaj\u00fac jeden stroj. Ako to funguje, vysvetl\u00edm o chv\u00ed\u013eu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e8e9df7effb0d0241d90315f92b994c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Skuto\u010dn\u00fd pr\u00edklad:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>DB \u2013 4,5 terabajta. <\/p>\n<p>\n<\/li>\n<li>\n<p>Nez\u00e1visl\u00e9 k\u00f3pie m\u00f4\u017eeme z\u00edska\u0165 za 30 sek\u00fand. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Nemus\u00edte \u010daka\u0165 na testovac\u00ed stojan a z\u00e1visie\u0165 od jeho ve\u013ekosti. M\u00f4\u017eete ho z\u00edska\u0165 za sekundy. Bude to \u00faplne izolovan\u00e9 prostredie, ktor\u00e9 v\u0161ak zdie\u013ea \u00fadaje medzi sebou. <\/p>\n<p><\/p>\n<p>To je \u00fa\u017easn\u00e9. Tu hovor\u00edme o m\u00e1gi\u00ed a paralelnom vesm\u00edre. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/87e6a7e45548ed5dabd4fad01ea70616.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V na\u0161om pr\u00edpade to funguje pomocou syst\u00e9mu OpenZFS. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e75fed43703e26152a5a85f807064cb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenZFS je copy-on-write s\u00faborov\u00fd syst\u00e9m, ktor\u00fd nat\u00edvne podporuje snapshoty a klony. Je spo\u013eahliv\u00fd a \u0161k\u00e1lovate\u013en\u00fd. Spravova\u0165 ho je ve\u013emi jednoduch\u00e9. Doslova ho m\u00f4\u017eete nasadi\u0165 v dvoch pr\u00edkazoch. <\/p>\n<p><\/p>\n<p>Existuj\u00fa aj in\u00e9 mo\u017enosti:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>LVM,<\/p>\n<p>\n<\/li>\n<li>\n<p>\u00dalo\u017en\u00e9 syst\u00e9my (napr\u00edklad Pure Storage).<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Database Lab, o ktorom hovor\u00edm, je modul\u00e1rny. M\u00f4\u017ee by\u0165 realizovan\u00fd pri pou\u017eit\u00ed tak\u00fdchto mo\u017enost\u00ed. Ale zatia\u013e sa s\u00fastre\u010fujeme na OpenZFS, preto\u017ee s LVM sme mali probl\u00e9my. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/41a49f6760ee96b55f49606f8e453992.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ako to funguje? Namiesto toho, aby sme ka\u017ed\u00fd raz prepisovali \u00fadaje, ke\u010f ich men\u00edme, jednoducho ich uchov\u00e1vame a ozna\u010dujeme, \u017ee tieto nov\u00e9 \u00fadaje sa vz\u0165ahuj\u00fa na nov\u00fd okamih, nov\u00fd snapshot. <\/p>\n<p><\/p>\n<p>A ke\u010f sa chceme vr\u00e1ti\u0165 sp\u00e4\u0165 alebo vytvori\u0165 nov\u00fd klon z nejakej star\u0161ej verzie, jednoducho povedzme: \u201eOK, dajte n\u00e1m tieto bloky \u00fadajov, ktor\u00e9 s\u00fa takto ozna\u010den\u00e9\u201c. <\/p>\n<p><\/p>\n<p>A tento pou\u017e\u00edvate\u013e bude pracova\u0165 s t\u00fdmto s\u00faborom \u00fadajov. Postupne ich bude meni\u0165 a robi\u0165 svoje snapshoty. <\/p>\n<p><\/p>\n<p>A my budeme ma\u0165 rozvetvenie. Ka\u017ed\u00fd v\u00fdvoj\u00e1r v na\u0161om pr\u00edpade bude ma\u0165 mo\u017enos\u0165 ma\u0165 svoj vlastn\u00fd klon, ktor\u00fd upravuje, a \u00fadaje, ktor\u00e9 s\u00fa spolo\u010dn\u00e9, bud\u00fa zdie\u013ean\u00e9 medzi v\u0161etk\u00fdmi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/78efd8b87f6559839af20a939b7c89d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na to, aby ste u seba nasadili tak\u00fd syst\u00e9m, mus\u00edte rie\u0161i\u0165 dva probl\u00e9my: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Prv\u00fd \u2013 to je zdroj d\u00e1t, odkia\u013e ich budete z\u00edskava\u0165. M\u00f4\u017eete nastavi\u0165 replik\u00e1ciu z produkcie. M\u00f4\u017eete pou\u017ei\u0165 u\u017e z\u00e1lohy, ktor\u00e9 m\u00e1te nastaven\u00e9, d\u00fafam. WAL-E, WAL-G alebo Barman. A dokonca aj ak pou\u017e\u00edvate nejak\u00e9 cloudov\u00e9 rie\u0161enie, ako je RDS alebo Cloud SQL, m\u00f4\u017eete vyu\u017ei\u0165 logick\u00e9 dumpy. Ale aj tak v\u00e1m odpor\u00fa\u010dame pou\u017e\u00edva\u0165 z\u00e1lohy, preto\u017ee pri takomto pr\u00edstupe si uchov\u00e1te aj fyzick\u00fa \u0161trukt\u00faru s\u00faborov, \u010do umo\u017en\u00ed by\u0165 bli\u017e\u0161ie k t\u00fdm metrik\u00e1m, ktor\u00e9 by ste videli na produkcii, aby ste zachytili probl\u00e9my, ktor\u00e9 existuj\u00fa. <\/p>\n<p>\n<\/li>\n<li>\n<p>Druh\u00fd \u2013 to je miesto, kde chcete hos\u0165ova\u0165 Database Lab. M\u00f4\u017ee to by\u0165 Cloud, m\u00f4\u017ee to by\u0165 On-premise. Tu je d\u00f4le\u017eit\u00e9 poveda\u0165, \u017ee ZFS podporuje kompresiu d\u00e1t. A rob\u00ed to dostato\u010dne dobre. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Predstavte si, \u017ee ka\u017ed\u00fd tak\u00fd klon, v z\u00e1vislosti od oper\u00e1ci\u00ed, ktor\u00e9 vykon\u00e1vame s datab\u00e1zou, bude narasta\u0165 nejak\u00fd dev. Pre tento dev bude tie\u017e potrebn\u00e9 miesto. Ale v\u010faka tomu, \u017ee sme z\u00edskali datab\u00e1zu s ve\u013ekos\u0165ou 4,5 terabajtu, ZFS ju stla\u010d\u00ed na 3,5 terabajtu. V z\u00e1vislosti od nastaven\u00ed to mo\u017eno variabilne prisp\u00f4sobova\u0165. A pre dev n\u00e1m zostane e\u0161te miesto. <\/p>\n<p><\/p>\n<p>Tak\u00fdto syst\u00e9m sa d\u00e1 pou\u017ei\u0165 pre r\u00f4zne pr\u00edpady. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>S\u00fa to v\u00fdvoj\u00e1ri, DBA na testovanie dotazov, na optimaliz\u00e1ciu. <\/p>\n<p>\n<\/li>\n<li>\n<p>Toto mo\u017eno vyu\u017ei\u0165 v QA testovan\u00ed na overenie konkr\u00e9tnej migr\u00e1cie predt\u00fdm, ako to nasad\u00edme do produkcie. A m\u00f4\u017eeme tie\u017e vytv\u00e1ra\u0165 \u0161peci\u00e1lne prostredie pre QA s re\u00e1lnymi d\u00e1tami, kde m\u00f4\u017eu testova\u0165 nov\u00fa funkcionalitu. A to zabere sekundy namiesto \u010dakania hod\u00edn, alebo mo\u017eno aj dn\u00ed v in\u00fdch pr\u00edpadoch, kde sa tenk\u00e9 k\u00f3pie nepou\u017e\u00edvaj\u00fa. <\/p>\n<p>\n<\/li>\n<li>\n<p>A e\u0161te jeden samostatn\u00fd pr\u00edpad. Ak spolo\u010dnos\u0165 nem\u00e1 nastaven\u00fd analytick\u00fd syst\u00e9m, m\u00f4\u017eeme vy\u010dleni\u0165 tenk\u00fd klon produktovej datab\u00e1zy a poskytn\u00fa\u0165 ho pod dlh\u00e9 dotazy alebo pod \u0161peci\u00e1lne indexy, ktor\u00e9 m\u00f4\u017eu by\u0165 pou\u017eit\u00e9 v analytike.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5fb0944f063c981f27449d948a59b73b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S tak\u00fdmto pr\u00edstupom:<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>N\u00edzka pravdepodobnos\u0165 ch\u00fdb na \u201eprod\u201c, preto\u017ee sme v\u0161etky zmeny otestovali na pln\u00fdch \u00fadajoch. <\/p>\n<p>\n<\/li>\n<li>\n<p>Vznik\u00e1 n\u00e1m kult\u00fara testovania, preto\u017ee teraz nie je potrebn\u00e9 hodiny \u010daka\u0165 na vlastn\u00fd stand. <\/p>\n<p>\n<\/li>\n<li>\n<p>A nie je prek\u00e1\u017eka, niet \u010dakania medzi testovaniami. M\u00f4\u017eete naozaj \u00eds\u0165 a overi\u0165. A tak to bude lep\u0161ie, lebo ur\u00fdchlime v\u00fdvoj. <\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>\n<p>Bude menej refaktoringu. Menej ch\u00fdb sa dostane do produkcie. My ich menej refaktorujeme nesk\u00f4r. <\/p>\n<p>\n<\/li>\n<li>\n<p>M\u00f4\u017eeme vr\u00e1ti\u0165 nevratn\u00e9 zmeny. To nie je v \u0161tandardn\u00fdch pr\u00edstupoch. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<ol>\n<li>Je to v\u00fdhodn\u00e9, preto\u017ee del\u00edme zdroje testovac\u00edch prostred\u00ed. <\/li>\n<\/ol>\n<p><\/p>\n<p>U\u017e je to dobr\u00e9, ale \u010do \u010fal\u0161ie by sa dalo ur\u00fdchli\u0165?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/d692f76b865c18ed4c178d1a1440774b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u010faka tak\u00e9mu syst\u00e9mu m\u00f4\u017eeme v\u00fdrazne zn\u00ed\u017ei\u0165 prah vstupu do tak\u00e9ho testovania. <\/p>\n<p><\/p>\n<p>Moment\u00e1lne existuje uzavret\u00fd kruh, kde sa v\u00fdvoj\u00e1r, aby z\u00edskal pr\u00edstup k re\u00e1lnym plnohodnotn\u00fdm \u00fadajom, mus\u00ed sta\u0165 odborn\u00edkom. Musia mu d\u00f4verova\u0165 s tak\u00fdm pr\u00edstupom. <\/p>\n<p><\/p>\n<p>Ale ako r\u00e1s\u0165, ak to nie je mo\u017en\u00e9? A \u010do ak m\u00e1\u0161 k dispoz\u00edcii len ve\u013emi mal\u00fa sadu testovac\u00edch \u00fadajov? Potom nebude mo\u017en\u00e9 z\u00edska\u0165 re\u00e1lne sk\u00fasenosti. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/221f7b02294878aea1d0ebe6df5d9717.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ako vyjs\u0165 z tohto kruhu? Ako prv\u00e9 rozhranie, ktor\u00e9 je pohodln\u00e9 pre v\u00fdvoj\u00e1rov akejko\u013evek \u00farovne, sme si vybrali Slack-bota. Ale to m\u00f4\u017ee by\u0165 ak\u00e9ko\u013evek in\u00e9 rozhranie. <\/p>\n<p><\/p>\n<p>\u010co to umo\u017e\u0148uje? M\u00f4\u017ee\u0161 vzia\u0165 konkr\u00e9tny dotaz a posla\u0165 ho do \u0161peci\u00e1lneho kan\u00e1la pre datab\u00e1zu. Automaticky rozvineme tenk\u00fd klon za sekundy. Spust\u00edme tento dotaz. Zbierame metriky a odpor\u00fa\u010dania. Uk\u00e1\u017eeme vizualiz\u00e1ciu. A potom tento klon zostane, aby sa tento dotaz mohol nejako optimalizova\u0165, prida\u0165 indexy at\u010f. <\/p>\n<p><\/p>\n<p>A tie\u017e n\u00e1m Slack poskytuje mo\u017enosti pre spolupr\u00e1cu z krabice. Ke\u010f\u017ee ide jednoducho o kan\u00e1l, m\u00f4\u017ee\u0161 tam priamo v t\u00e9me za\u010da\u0165 diskutova\u0165 o takomto dotaze, ozna\u010di\u0165 svojich kolegov, DBA, ktor\u00ed s\u00fa vn\u00fatri firmy. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/b4a6410b625107c5bbbf57c021159914.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ale samozrejme, s\u00fa aj probl\u00e9my. Ke\u010f\u017ee ide o re\u00e1lny svet a pou\u017e\u00edvame server, na ktorom host\u00edme naraz ve\u013ea klonov, mus\u00edme zni\u017eova\u0165 mno\u017estvo pam\u00e4te a procesorov\u00e9ho v\u00fdkonu, ktor\u00e9 s\u00fa klonom k dispoz\u00edcii. <\/p>\n<p><\/p>\n<p>Ale aby tieto testy boli realistick\u00e9, treba nejako vyrie\u0161i\u0165 tento probl\u00e9m. <\/p>\n<p><\/p>\n<p>Je jasn\u00e9, \u017ee d\u00f4le\u017eit\u00fdm aspektom s\u00fa rovnak\u00e9 \u00fadaje. Ale to u\u017e m\u00e1me. A chceme dosiahnu\u0165 rovnak\u00fa konfigur\u00e1ciu. A tak\u00fa prakticky rovnak\u00fa konfigur\u00e1ciu m\u00f4\u017eeme poskytn\u00fa\u0165. <\/p>\n<p><\/p>\n<p>Bolo by skvel\u00e9 ma\u0165 rovnak\u00fd hardv\u00e9r ako na produkcii, ale m\u00f4\u017ee sa l\u00ed\u0161i\u0165. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5efae55189175262d56a33b89c55ed29.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pripome\u0148me si, ako Postgres pracuje s pam\u00e4\u0165ou. M\u00e1me dva cache. Jeden od s\u00faborov\u00e9ho syst\u00e9mu a druh\u00fd vlastn\u00fd Postgres, t. j. Shared Buffer Cache. <\/p>\n<p><\/p>\n<p>Je d\u00f4le\u017eit\u00e9 poznamena\u0165, \u017ee Shared Buffer Cache sa alokuje pri \u0161tarte Postgres v z\u00e1vislosti od toho, ak\u00fa ve\u013ekos\u0165 nastav\u00edte v konfigur\u00e1cii. <\/p>\n<p><\/p>\n<p>A druh\u00e1 cache vyu\u017e\u00edva v\u0161etok dostupn\u00fd priestor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f1f3c85e786649f83d5c17e6724086a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A ke\u010f rob\u00edme nieko\u013eko klonov na jednom stroji, postupne zap\u013a\u0148ame pam\u00e4\u0165. A ide\u00e1lne by mal by\u0165 Shared Buffer Cache 25 % z celkov\u00e9ho objemu pam\u00e4te, ktor\u00fd je na stroji dostupn\u00fd. <\/p>\n<p><\/p>\n<p>A vych\u00e1dza to tak, \u017ee ak nebudeme tento parameter meni\u0165, m\u00f4\u017eeme na jednom stroji spusti\u0165 iba 4 instance, teda 4 tak\u00e9 tenk\u00e9 klony. A to je samozrejme zl\u00e9, preto\u017ee ich chceme ma\u0165 ove\u013ea viac. <\/p>\n<p><\/p>\n<p>Ale na druhej strane, Buffer Cache sa pou\u017e\u00edva na vykon\u00e1vanie dotazov, pre indexy, teda pl\u00e1n z\u00e1vis\u00ed od toho, ak\u00fa ve\u013ekos\u0165 m\u00e1me cache. A ak tento parameter jednoducho zmen\u0161\u00edme, pl\u00e1ny sa m\u00f4\u017eu v\u00fdrazne zmeni\u0165.<\/p>\n<p><\/p>\n<p>Napr\u00edklad, ak m\u00e1me na prod ve\u013ek\u00fa cache, Postgres bude preferova\u0165 pou\u017e\u00edva\u0165 index. A ak nie, tak potom bude SeqScan. A ak\u00fd by mal zmysel, keby sa tieto pl\u00e1ny nel\u00ed\u0161ili? <\/p>\n<p><\/p>\n<p>Ale tu prich\u00e1dzame k tak\u00e9mu rie\u0161eniu, \u017ee pl\u00e1n v Postgres v skuto\u010dnosti nez\u00e1vis\u00ed od konkr\u00e9tnej ve\u013ekosti, ktor\u00fa zad\u00e1me do Shared Buffer, ale z\u00e1vis\u00ed od effective_cache_size.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/1457fd7b65c342f64733b952130125cf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Effective_cache_size je predpokladan\u00fd objem cache, ktor\u00fd m\u00e1me k dispoz\u00edcii, teda v s\u00fa\u010dte Buffer Cache a cache s\u00faborov\u00e9ho syst\u00e9mu. To je nastaven\u00e9 v konfigur\u00e1cii. A t\u00e1to pam\u00e4\u0165 nie je alokovan\u00e1. <\/p>\n<p><\/p>\n<p>A v\u010faka tomuto parametru m\u00f4\u017eeme akoby podv\u00e1dza\u0165 Postgres, hovoriac, \u017ee v skuto\u010dnosti m\u00e1me ve\u013ea d\u00e1t, aj ke\u010f ich nem\u00e1me. A tak bud\u00fa pl\u00e1ny \u00faplne zhodn\u00e9 s produkciou. <\/p>\n<p><\/p>\n<p>Ale to m\u00f4\u017ee ovplyvni\u0165 \u010dasovanie. A optimalizujeme dotazy pod\u013ea \u010dasovania, ale d\u00f4le\u017eit\u00e9 je, \u017ee \u010dasovanie z\u00e1vis\u00ed od mnoh\u00fdch faktorov: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Z\u00e1vis\u00ed od za\u0165a\u017eenia, ktor\u00e9 aktu\u00e1lne existuje na prod. <\/p>\n<p>\n<\/li>\n<li>\n<p>Z\u00e1vis\u00ed od charakterist\u00edk samotn\u00e9ho stroja. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>A to je nepriame parametre, ale v skuto\u010dnosti m\u00f4\u017eeme optimalizova\u0165 presne pod\u013ea mno\u017estva d\u00e1t, ktor\u00e9 tento dotaz pre\u010d\u00edta, aby sme z\u00edskali v\u00fdsledok. <\/p>\n<p><\/p>\n<p>A ak chcete, aby na\u010dasovanie bolo bl\u00edzke tomu, \u010do uvid\u00edme v produkcii, mus\u00edme zobra\u0165 \u010do najpodobnej\u0161ie hardv\u00e9rov\u00e9 vybavenie a mo\u017eno aj viac, aby sa v\u0161etky k\u00f3pie zmestili. Ale toto je kompromis, teda dostanete rovnak\u00e9 pl\u00e1ny, uvid\u00edte, ko\u013eko d\u00e1t pre\u010d\u00edta konkr\u00e9tna po\u017eiadavka a budete si m\u00f4c\u0165 urobi\u0165 z\u00e1ver \u2013 t\u00e1to po\u017eiadavka je dobr\u00e1 (alebo migr\u00e1cia) alebo zl\u00e1, treba ju e\u0161te optimalizova\u0165. <\/p>\n<p><\/p>\n<p>Pozrime sa, ako konkr\u00e9tne prebieha optimaliz\u00e1cia s Joeom. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/26c892a0b2d417f9806cfb77d2ea47f6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zoberme si po\u017eiadavku z re\u00e1lneho syst\u00e9mu. V tomto pr\u00edpade je datab\u00e1za \u2013 1 terabajt. A chceme spo\u010d\u00edta\u0165 po\u010det \u010derstv\u00fdch pr\u00edspevkov, ktor\u00e9 z\u00edskali viac ako 10 lajkov. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/befd651abed6688127f52db39138a4be.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nap\u00ed\u0161eme spr\u00e1vu do kan\u00e1la, pre n\u00e1s sa rozvinie k\u00f3pia. A uvid\u00edme, \u017ee tak\u00e1to po\u017eiadavka bude spracovan\u00e1 za 2,5 min\u00faty. To je prv\u00e9, \u010do si v\u0161imneme.<\/p>\n<p><\/p>\n<p>Joe n\u00e1m uk\u00e1\u017ee automatick\u00e9 odpor\u00fa\u010dania zalo\u017een\u00e9 na pl\u00e1ne a metrik\u00e1ch. <\/p>\n<p><\/p>\n<p>Uvid\u00edme, \u017ee po\u017eiadavka spracov\u00e1va pr\u00edli\u0161 ve\u013ea d\u00e1t na to, aby z\u00edskala relat\u00edvne mal\u00e9 mno\u017estvo riadkov. A potrebujeme nejak\u00fd \u0161pecializovan\u00fd index, preto\u017ee sme si v\u0161imli, \u017ee v po\u017eiadavke je pr\u00edli\u0161 ve\u013ea filtrovan\u00fdch riadkov. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7f40e41314ebc682a1a64a2958dec16c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pozrime sa podrobnej\u0161ie, \u010do sa stalo. Naozaj vid\u00edme, \u017ee sme pre\u010d\u00edtali takmer 1,5 gigabajtu d\u00e1t z diskov\u00e9ho cache alebo dokonca z disku. A to nie je dobr\u00e9, preto\u017ee sme dostali len 142 riadkov. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/30aaff5da2536fa27efc6591f645d6f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A zdalo by sa, \u017ee tu m\u00e1me index scan a malo to r\u00fdchlo spracova\u0165, ale ke\u010f\u017ee sme filtrovali pr\u00edli\u0161 ve\u013ea riadkov (museli sme ich po\u010d\u00edta\u0165), po\u017eiadavka bola spracovan\u00e1 pomaly. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/40958fbc04d4eb738f6a16488647bd8c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A to sa stalo v pl\u00e1ne preto, \u017ee podmienky v po\u017eiadavke a podmienky v indexe sa \u010diasto\u010dne nezhodovali. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/196ca5116e641c72bc1009e97c390bc7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sk\u00fasme urobi\u0165 index presnej\u0161\u00ed a pozrime sa, ako sa zmen\u00ed v\u00fdkon po\u017eiadavky po tomto. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/646a73964f0b6d3615eedb8acb3aa216.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vytvorenie indexu trvalo pomerne dlh\u00fa dobu, ale teraz kontrolujeme po\u017eiadavku a vid\u00edme, \u017ee \u010das sa namiesto 2,5 min\u00fat zn\u00ed\u017eil na len 156 milisek\u00fand, \u010do je dos\u0165 dobr\u00e9. A \u010d\u00edtame len 6 megabajtov d\u00e1t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5cce2d6ecf2314c0575c0fed107f6d5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A teraz pou\u017e\u00edvame index only scan.<\/p>\n<p><\/p>\n<p>\u010eal\u0161ia d\u00f4le\u017eit\u00e1 vec je, \u017ee chceme pl\u00e1n predstavi\u0165 nejak\u00fdm zrozumite\u013enej\u0161\u00edm sp\u00f4sobom. U n\u00e1s sme implementovali vizualiz\u00e1ciu pomocou Flame Graphs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f4f545bfbf52fd66b6cbe45e1d6d0b6c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Toto je in\u00e1 po\u017eiadavka, bohat\u0161ia. A Flame Graphs vytv\u00e1rame na z\u00e1klade dvoch parametrov: mno\u017estvo d\u00e1t, ktor\u00e9 konkr\u00e9tny uzol v pl\u00e1ne \u010d\u00edtal, a \u010dasovanie, teda \u010das vykon\u00e1vania uzla. <\/p>\n<p><\/p>\n<p>Tu m\u00f4\u017eeme porovn\u00e1va\u0165 konkr\u00e9tne uzly navz\u00e1jom. Bude jasn\u00e9, ktor\u00fd z nich zaber\u00e1 viac alebo menej, \u010do je zvy\u010dajne \u0165a\u017ek\u00e9 robi\u0165 pri in\u00fdch sp\u00f4soboch vizualiz\u00e1cie. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/c477d2f32241c69eb0b38ef45ff4708b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samozrejme, v\u0161etci poznaj\u00fa explain.depesz.com. Dobrou funkciou tejto vizualiz\u00e1cie je, \u017ee uchov\u00e1vame textov\u00fd pl\u00e1n a tie\u017e vystavujeme niektor\u00e9 hlavn\u00e9 parametre do tabu\u013eky, aby sme ich mohli triedi\u0165. <\/p>\n<p><\/p>\n<p>A v\u00fdvoj\u00e1ri, ktor\u00ed sa e\u0161te do tejto t\u00e9my hlboko nezapojili, tie\u017e vyu\u017e\u00edvaj\u00fa explain.depesz.com, preto\u017ee je pre nich jednoduch\u0161ie pochopi\u0165, ktor\u00e9 metriky s\u00fa d\u00f4le\u017eit\u00e9 a ktor\u00e9 nie. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a7352b5b9abf27294375c78bec69d4d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Existuje nov\u00fd pr\u00edstup k vizualiz\u00e1cii \u2013 explain.dalibo.com. Vytv\u00e1raj\u00fa stromov\u00fa vizualiz\u00e1ciu, ale tu je ve\u013emi \u0165a\u017ek\u00e9 porovna\u0165 uzly medzi sebou. Je dobr\u00e9 pochopi\u0165 \u0161trukt\u00faru, av\u0161ak ak bude ve\u013ek\u00fd dotaz, bude potrebn\u00e9 scrollova\u0165 sem a tam, ale je to tie\u017e varianta. <\/p>\n<p><\/p>\n<h2 id=\"kollaboraciya\">Spolupr\u00e1ca<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7101c0b95eafed8fd9305a4630399e3b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A ako u\u017e som povedal, Slack n\u00e1m poskytuje pr\u00edle\u017eitos\u0165 na spolupr\u00e1cu. Napr\u00edklad, ak naraz\u00edme na zlo\u017eit\u00fd dotaz, ktor\u00fd nevieme, ako optimalizova\u0165, m\u00f4\u017eeme v thread na Slacku tento probl\u00e9m objasni\u0165 so svojimi kolegami. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/14b8f9c3401ecb68ac1ef56bc0cb0fa5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mysl\u00edme si, \u017ee je d\u00f4le\u017eit\u00e9 testova\u0165 na plnohodnotn\u00fdch \u00fadajoch. Na tento \u00fa\u010del sme vytvorili n\u00e1stroj Update Database Lab, ktor\u00fd je dostupn\u00fd v open source. M\u00f4\u017eete tie\u017e pou\u017ei\u0165 bota Joe. M\u00f4\u017eete si ho zobra\u0165 hne\u010f teraz a implementova\u0165 ho u seba. V\u0161etky pr\u00edru\u010dky s\u00fa tam dostupn\u00e9. <\/p>\n<p><\/p>\n<p>Je d\u00f4le\u017eit\u00e9 tie\u017e poznamena\u0165, \u017ee samotn\u00e9 rie\u0161enie nie je nijak revolu\u010dn\u00e9, preto\u017ee existuje Delphix, ale to je enterprise rie\u0161enie. Je \u00faplne uzavret\u00e9, stoj\u00ed ve\u013emi ve\u013ea. My sa \u0161pecializujeme na Postgres. Tieto produkty s\u00fa v\u0161etky open source. Pridajte sa k n\u00e1m! <\/p>\n<p><\/p>\n<p>T\u00fdmto kon\u010d\u00edm. \u010eakujem!<\/p>\n<p><\/p>\n<h2 id=\"voprosy\">Ot\u00e1zky<\/h2>\n<p><\/p>\n<p><em>Dobr\u00fd de\u0148! \u010eakujem za predn\u00e1\u0161ku! Ve\u013emi zauj\u00edmav\u00e9, najm\u00e4 pre m\u0148a, preto\u017ee som pred nejak\u00fdm \u010dasom rie\u0161il dos\u0165 podobn\u00fa \u00falohu. A preto m\u00e1m cel\u00fd rad ot\u00e1zok. D\u00fafam, \u017ee aspo\u0148 niektor\u00e9 z nich polo\u017e\u00edm.<\/em><\/p>\n<p><\/p>\n<p><em>Zauj\u00edmalo by ma, ako si po\u010d\u00edtate miesto pre toto prostredie? Technol\u00f3gia predpoklad\u00e1, \u017ee za ur\u010dit\u00fdch okolnost\u00ed m\u00f4\u017eu va\u0161e klony nar\u00e1s\u0165 na maxim\u00e1lnu ve\u013ekos\u0165. Zjednodu\u0161ene povedan\u00e9, ak m\u00e1te desa\u0165terabajtov\u00fa datab\u00e1zu a 10 klonov, je \u013eahk\u00e9 simulova\u0165 situ\u00e1ciu, kedy ka\u017ed\u00fd klon bude obsahova\u0165 10 unik\u00e1tnych \u00fadajov. Ako si po\u010d\u00edtate toto miesto, t. j. t\u00fa deltu, o ktorej ste hovorili, v ktorej bud\u00fa tieto klony \u017ei\u0165?<\/em><\/p>\n<p><\/p>\n<p>Dobr\u00fd ot\u00e1zka. Tu je d\u00f4le\u017eit\u00e9 pozera\u0165 sa na konkr\u00e9tne klony. A ak sa nejak\u00e1 klon pr\u00edli\u0161 zmen\u00ed a za\u010dne r\u00e1s\u0165, m\u00f4\u017eeme najprv upozorni\u0165 pou\u017e\u00edvate\u013ea na to, alebo okam\u017eite tento klon zastavi\u0165, aby sa n\u00e1m nestala situ\u00e1cia zlyhania. <\/p>\n<p><\/p>\n<p><em>\u00c1no, m\u00e1m dopl\u0148uj\u00facu ot\u00e1zku. T. j. ako zabezpe\u010dujete \u017eivotn\u00fd cyklus t\u00fdchto modulov? Pre n\u00e1s je to probl\u00e9m a cel\u00e1 samostatn\u00e1 t\u00e9ma. Ako to prebieha?<\/em><\/p>\n<p><\/p>\n<p>Ka\u017ed\u00fd klon m\u00e1 nejak\u00fd ttl. V podstate m\u00e1me pevn\u00fd ttl. <\/p>\n<p><\/p>\n<p><em>Ak\u00fd, ak to nie je tajn\u00e9?<\/em><\/p>\n<p><\/p>\n<p>1 hodina, t. j. idle \u2013 1 hodina. Ak sa nepou\u017e\u00edva, tak ho zru\u0161\u00edme. Ale tu nie je \u017eiadne prekvapenie, preto\u017ee klon m\u00f4\u017eeme spusti\u0165 za sekundy. A ak ho znova potrebujeme, tak \u2013 pros\u00edm. <\/p>\n<p><\/p>\n<p><em>Zauj\u00edma ma aj v\u00fdber technol\u00f3gi\u00ed, preto\u017ee my napr\u00edklad paralelne pou\u017e\u00edvame nieko\u013eko met\u00f3d z r\u00f4znych d\u00f4vodov. Pre\u010do pr\u00e1ve ZFS? Pre\u010do ste nepou\u017eili LVM? Spomenuli ste, \u017ee s LVM boli probl\u00e9my. Ak\u00e9 probl\u00e9my to boli? Pod\u013ea m\u0148a je najoptim\u00e1lnej\u0161ia verzia so S\u00daB, z h\u013eadiska v\u00fdkonu.<\/em> <\/p>\n<p><\/p>\n<p><em>Ak\u00fd je hlavn\u00fd probl\u00e9m so ZFS? V tom, \u017ee mus\u00edte sp\u00fa\u0161\u0165a\u0165 na jednom hoste, t. j. v\u0161etky in\u0161tancie bud\u00fa \u017ei\u0165 v r\u00e1mci jedn\u00e9ho opera\u010dn\u00e9ho syst\u00e9mu. A v pr\u00edpade S\u00daB m\u00f4\u017eete pripoji\u0165 r\u00f4zne vybavenie. A \u00fazkym miestom s\u00fa len tie bloky, ktor\u00e9 s\u00fa na S\u00daB. A zauj\u00edma ma pr\u00e1ve ot\u00e1zka v\u00fdberu technol\u00f3gi\u00ed. Pre\u010do nie LVM?<\/em><\/p>\n<p><\/p>\n<p>O LVM m\u00f4\u017eeme konkr\u00e9tne diskutova\u0165 na meetupe. O S\u00daB \u2013 je to jednoducho drah\u00e9. Syst\u00e9m ZFS m\u00f4\u017eeme implementova\u0165 kdeko\u013evek. M\u00f4\u017eete si ho nain\u0161talova\u0165 na svojom po\u010d\u00edta\u010di. M\u00f4\u017eete si jednoducho stiahnu\u0165 repozit\u00e1r a nain\u0161talova\u0165 ho. ZFS sa d\u00e1 spusti\u0165 prakticky v\u0161ade, ak hovor\u00edme o Linuxe. T. j. dost\u00e1vame ve\u013emi flexibiln\u00e9 rie\u0161enie. A samotn\u00fd ZFS pon\u00faka u\u017e z krabice ve\u013emi ve\u013ea. M\u00f4\u017eete tam nahr\u00e1va\u0165 neobmedzen\u00e9 mno\u017estvo d\u00e1t, pripoji\u0165 ve\u013ek\u00e9 mno\u017estvo diskov, s\u00fa tam snapshoty. A, ako som u\u017e povedal, je to jednoducho administrat\u00edvne. T. j. zd\u00e1 sa, \u017ee je ve\u013emi pr\u00edjemn\u00fd na pou\u017e\u00edvanie. Je overen\u00fd, m\u00e1 ve\u013ea rokov. M\u00e1 ve\u013emi ve\u013ek\u00fa komunitu, ktor\u00e1 rastie. ZFS je ve\u013emi spo\u013eahliv\u00e9 rie\u0161enie. <\/p>\n<p><\/p>\n<p>Nikolaj Samochvalov: M\u00f4\u017eem e\u0161te komentova\u0165? Vol\u00e1m sa Nikolaj, spolupracujem s Anatolim. S\u00fahlas\u00edm, \u017ee S\u00daB je skvel\u00e9. A niektor\u00ed na\u0161i z\u00e1kazn\u00edci maj\u00fa Pure Storage at\u010f. <\/p>\n<p><\/p>\n<p>Anatolij spr\u00e1vne poznamenal, \u017ee sa s\u00fastre\u010fujeme na modul\u00e1rnos\u0165. Do bud\u00facnosti m\u00f4\u017eeme realizova\u0165 jedno rozhranie \u2013 vytvori\u0165 snapshot, vytvori\u0165 klon, zni\u010di\u0165 klon. To v\u0161etko je jednoduch\u00e9. A \u00falo\u017en\u00fd syst\u00e9m je skvel\u00fd, ak ho m\u00e1me.<\/p>\n<p><\/p>\n<p>Ale ZFS je dostupn\u00fd pre v\u0161etk\u00fdch. U\u017e je dos\u0165 DelPhix, maj\u00fa 300 klientov. Z nich vo fortune 100 \u2013 50 klientov, t. j. zacieluj\u00fa na NASA a podobne. Je na\u010dase, aby bola t\u00e1to technol\u00f3gia dostupn\u00e1 pre v\u0161etk\u00fdch. A preto m\u00e1me open source Core. M\u00e1me \u010das\u0165 rozhrania, ktor\u00e1 nie je open source. To je platforma, ktor\u00fa uk\u00e1\u017eeme. Ale chceme, aby to bolo dostupn\u00e9 ka\u017ed\u00e9mu. Chceme urobi\u0165 revol\u00faciu, aby v\u0161etci testeri prestali h\u00e1da\u0165 na notebookoch. Mus\u00edme p\u00edsa\u0165 SELECT a okam\u017eite vidie\u0165, \u017ee je pomal\u00fd. Dos\u0165 \u010daka\u0165, k\u00fdm n\u00e1m DBA o tom povie. Toto je hlavn\u00fd cie\u013e. A mysl\u00edm, \u017ee sa k tomu dostaneme v\u0161etci. A t\u00fato vec rob\u00edme, aby to mali v\u0161etci. Preto ZFS, preto\u017ee bude dostupn\u00fd v\u0161ade. \u010eakujeme komunite za rie\u0161enie probl\u00e9mov a za to, \u017ee tam je open source licencia a podobne. <\/p>\n<p><\/p>\n<p><em>Dobr\u00fd de\u0148! \u010eakujem za predn\u00e1\u0161ku! Vol\u00e1m sa Maxim. Rie\u0161ili sme tak\u00e9 ist\u00e9 probl\u00e9my. U seba na to m\u00e1me rie\u0161enie. Ako del\u00edte zdroje medzi t\u00fdmito klonmi? Ka\u017ed\u00fd klon m\u00f4\u017ee v ka\u017edom okamihu robi\u0165 svoje: jeden testuje jedno, druh\u00fd in\u00e9, niekto m\u00e1 stavan\u00fd index, niekto vykon\u00e1va n\u00e1ro\u010dn\u00fd job. A ak m\u00f4\u017eeme rozdeli\u0165 CPU, ako del\u00edte IO?<\/em><\/p>\n<p><\/p>\n<p><em>A druh\u00e1 ot\u00e1zka t\u00fdkaj\u00faca sa odli\u0161nosti prostred\u00ed. Predpokladajme, \u017ee tu m\u00e1m ZFS a v\u0161etko je skvel\u00e9, ale klient na produkte nem\u00e1 ZFS, ale napr\u00edklad ext4. Ako v tom pr\u00edpade?<\/em><\/p>\n<p><\/p>\n<p>Ot\u00e1zky s\u00fa ve\u013emi dobr\u00e9. Trochu som spomenul tento probl\u00e9m s delen\u00edm zdrojov. A rie\u0161enie je nasledovn\u00e9. Predstavte si, \u017ee testujete na stagingu. M\u00f4\u017ee sa sta\u0165, \u017ee niekto d\u00e1 jednu z\u00e1\u0165a\u017e, niekto in\u00fa. A nakoniec vid\u00edte nejasn\u00e9 metriky. Tak\u00fd ist\u00fd probl\u00e9m m\u00f4\u017ee by\u0165 aj na produkte. Ke\u010f chcete skontrolova\u0165 nejak\u00fd dopyt a vid\u00edte, \u017ee s n\u00edm je nejak\u00fd probl\u00e9m \u2013 pomaly sa spracov\u00e1va, v skuto\u010dnosti probl\u00e9m nebol v dopyte, ale v tom, \u017ee je nejak\u00e1 paraleln\u00e1 z\u00e1\u0165a\u017e. <\/p>\n<p><\/p>\n<p>A preto je d\u00f4le\u017eit\u00e9 s\u00fastredi\u0165 sa na to, ak\u00fd bude pl\u00e1n, ak\u00e9 kroky v pl\u00e1ne podnikneme a ko\u013eko d\u00e1t na to vyberieme. To, \u017ee bud\u00fa disky, povedzme, za\u0165a\u017een\u00e9 nie\u010d\u00edm, konkr\u00e9tne ovplyvn\u00ed na\u010dasovanie. Ale m\u00f4\u017eeme pos\u00fadi\u0165, ak\u00fd je tento dopyt n\u00e1ro\u010dn\u00fd pod\u013ea mno\u017estva d\u00e1t. Nie je tak d\u00f4le\u017eit\u00e9, \u017ee s\u00fa\u010dasne s n\u00edm bude nie\u010do in\u00e9, \u010do je potrebn\u00e9 vykona\u0165. <\/p>\n<p><\/p>\n<p><em>M\u00e1m dve ot\u00e1zky. Toto je naozaj skvel\u00e1 vec. Stalo sa niekedy, \u017ee d\u00e1ta na produkcii s\u00fa kriticky d\u00f4le\u017eit\u00e9, napr\u00edklad \u010d\u00edsla kreditn\u00fdch kariet? Existuje u\u017e nie\u010do hotov\u00e9, alebo je to samostatn\u00e1 \u00faloha? A druh\u00e1 ot\u00e1zka \u2013 m\u00e1me nie\u010do podobn\u00e9 pre MySQL?<\/em><\/p>\n<p><\/p>\n<p>Pokia\u013e ide o d\u00e1ta. Budeme vykon\u00e1va\u0165 obfuskovanie, k\u00fdm to e\u0161te nerob\u00edme. Ale ak nastavujete presne Joe, ak neposkytujete pr\u00edstup v\u00fdvoj\u00e1rom, tak pr\u00edstup k \u00fadajom nie je. Pre\u010do? Preto\u017ee Joe nezobrazuje d\u00e1ta. Zobrazuje len metriky, pl\u00e1ny a v\u0161etko. Bolo to z\u00e1merne uroben\u00e9, preto\u017ee \u2013 to je jedna z po\u017eiadaviek n\u00e1\u0161ho klienta. Chceli ma\u0165 mo\u017enos\u0165 optimalizova\u0165, ale z\u00e1rove\u0148 neposkytova\u0165 pr\u00edstup ka\u017ed\u00e9mu. <\/p>\n<p><\/p>\n<p>Pokia\u013e ide o MySQL. Tento syst\u00e9m sa d\u00e1 pou\u017ei\u0165 na \u010doko\u013evek, \u010do uchov\u00e1va stav na disku. A ke\u010f\u017ee sa zaober\u00e1me Postgresom, moment\u00e1lne prioritne rob\u00edme kompletn\u00fa automatiz\u00e1ciu pre Postgres. Chceme automatizova\u0165 z\u00edskavanie d\u00e1t z backupu. Spr\u00e1vne konfigurujeme Postgres. Vieme, ako urobi\u0165, aby pl\u00e1ny s\u00fahlasili at\u010f. <\/p>\n<p><\/p>\n<p>Ale ke\u010f\u017ee je syst\u00e9m roz\u0161\u00edrite\u013en\u00fd, bude sa tie\u017e m\u00f4c\u0165 pou\u017ei\u0165 pre MySQL. A tak\u00e9to pr\u00edklady existuj\u00fa. Podobn\u00e1 vec existuje u Yandexu, ale nikde ju nezverej\u0148uj\u00fa. Pou\u017e\u00edvaj\u00fa ju vo vn\u00fatri Yandex.Metriky. A tam ide pr\u00e1ve o hist\u00f3riu MySQL. Ale technol\u00f3gie s\u00fa rovnak\u00e9, ZFS. <\/p>\n<p><\/p>\n<p><em>\u010eakujem za prezent\u00e1ciu! M\u00e1m tie\u017e p\u00e1r ot\u00e1zok. Spomenuli ste, \u017ee klonovanie sa d\u00e1 pou\u017ei\u0165 na anal\u00fdzu, napr\u00edklad na vytv\u00e1ranie \u010fal\u0161\u00edch indexov. M\u00f4\u017eete o tom poveda\u0165 trochu podrobnej\u0161ie, ako to funguje?<\/em><\/p>\n<p><\/p>\n<p><em>A hne\u010f sa sp\u00fdtam na ot\u00e1zku t\u00fdkaj\u00facu sa rovnakosti st\u00e1nkov a rovnakosti pl\u00e1nov. Pl\u00e1n z\u00e1vis\u00ed aj od \u0161tatistiky zozbieranej Postgresom. Ako t\u00fato probl\u00e9mov\u00fa situ\u00e1ciu rie\u0161ite?<\/em><\/p>\n<p><\/p>\n<p>V oblasti anal\u00fdzy konkr\u00e9tnych pr\u00edpadov nem\u00e1me e\u0161te \u017eiadne d\u00e1ta, preto\u017ee sme ich doteraz nepou\u017e\u00edvali, ale tak\u00e1 mo\u017enos\u0165 existuje. Ak hovor\u00edme o indexoch, predstavte si, \u017ee sa vykon\u00e1va dopyt na tabu\u013eke s hundrou mili\u00f3nov z\u00e1znamov a na st\u013apci, ktor\u00fd zvy\u010dajne nie je v prev\u00e1dzke indexovan\u00fd. A chceme po\u010d\u00edta\u0165 ur\u010dit\u00e9 d\u00e1ta. Ak tento dopyt spust\u00edme na produkte, existuje mo\u017enos\u0165, \u017ee na produkte d\u00f4jde k v\u00fdpadku, preto\u017ee dopyt tam potrv\u00e1 min\u00fatu. <\/p>\n<p><\/p>\n<p>Dobre, urobme tenk\u00fd klon, ktor\u00fd nebude hrozn\u00e9 na nieko\u013eko min\u00fat zastavi\u0165. A aby sme komfortnej\u0161ie mohli analyzova\u0165 \u00fadaje, prid\u00e1me indexy na st\u013apce, ktor\u00e9 n\u00e1s zauj\u00edmaj\u00fa. <\/p>\n<p><\/p>\n<p><em>Bude sa index vytv\u00e1ra\u0165 ka\u017ed\u00fd raz?<\/em><\/p>\n<p><\/p>\n<p>M\u00f4\u017eeme to urobi\u0165 tak, \u017ee sa dotkneme \u00fadajov, sprav\u00edme sn\u00edmky a potom sa z tejto sn\u00edmky obnov\u00edme a spust\u00edme nov\u00e9 dopyty. T. j. m\u00f4\u017eeme to urobi\u0165 tak, \u017ee dok\u00e1\u017eeme vytv\u00e1ra\u0165 nov\u00e9 klony u\u017e s nastaven\u00fdmi indexmi.<\/p>\n<p><\/p>\n<p>\u010co sa t\u00fdka ot\u00e1zky o \u0161tatistike, ak sa obnovujeme z z\u00e1lohy, ak rob\u00edme replik\u00e1ciu, \u0161tatistika bude presne rovnak\u00e1. Preto\u017ee budeme ma\u0165 \u00fapln\u00fa fyzick\u00fa \u0161trukt\u00faru \u00fadajov, t. j. d\u00e1ta ako tak\u00e9 so v\u0161etk\u00fdmi metrikami \u0161tatistiky prinesieme tie\u017e. <\/p>\n<p><\/p>\n<p>Tu je in\u00fd probl\u00e9m. Ak pou\u017e\u00edvate cloudov\u00e9 rie\u0161enie, tam s\u00fa dostupn\u00e9 iba logick\u00e9 dumpy, preto\u017ee Google a Amazon nedovolia z\u00edska\u0165 fyzick\u00fa k\u00f3piu. Tam vznikne tak\u00fd probl\u00e9m. <\/p>\n<p><\/p>\n<p><em>\u010eakujem za spr\u00e1vu. Tu zazneli dve dobr\u00e9 ot\u00e1zky o MySQL a o rozdelen\u00ed zdrojov. V podstate sa v\u0161ak v\u0161etko zni\u017euje na to, \u017ee ide o t\u00e9mu nie konkr\u00e9tnych DBMS, ale celkovo o s\u00faborov\u00fd syst\u00e9m. A pod\u013ea toho by sa aj ot\u00e1zky rozdelenia zdrojov mali rie\u0161i\u0165 odtia\u013e, nemali by sme to bra\u0165 na konci, \u017ee ide o Postgres, ale v s\u00faborovom syst\u00e9me, v <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sk\/server\/dts-dronten\/\"   title=\"serveri\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2602\">serveri<\/a>, v instance.<\/em> <\/p>\n<p><\/p>\n<p><em>M\u00f4j ot\u00e1zka je trochu in\u00e1. Je bli\u017e\u0161ie k vrstveniu datab\u00e1zy, kde je nieko\u013eko vrstiev. Napr\u00edklad sme nastavili aktualiz\u00e1ciu desa\u0165terabajtov\u00e9ho obrazu, prebieha replik\u00e1cia. A konkr\u00e9tne toto rie\u0161enie pou\u017e\u00edvame pre datab\u00e1zy. Replik\u00e1cia prebieha, d\u00f4jde k aktualiz\u00e1cii \u00fadajov. Tu s\u00fa s\u00fabe\u017ene zamestnan\u00ed 100 zamestnanci, ktor\u00ed neust\u00e1le sp\u00fa\u0161\u0165aj\u00fa tieto r\u00f4zne sn\u00edmky. \u010co robi\u0165? Ako zabezpe\u010di\u0165, aby nedo\u0161lo k konfliktu, \u017ee spustili jedno a potom sa s\u00faborov\u00fd syst\u00e9m zmenil a v\u0161etky tieto sn\u00edmky zlyhali?<\/em> <\/p>\n<p><\/p>\n<p>Nebud\u00fa jazdi\u0165, preto\u017ee takto funguje ZFS. M\u00f4\u017eeme uchov\u00e1va\u0165 samostatne v jednom vl\u00e1kne zmeny s\u00faborov\u00e9ho syst\u00e9mu, ktor\u00e9 prich\u00e1dzaj\u00fa cez replik\u00e1ciu. A na star\u00fdch verzi\u00e1ch d\u00e1t uchov\u00e1va\u0165 klony, ktor\u00e9 pou\u017e\u00edvaj\u00fa v\u00fdvoj\u00e1ri. A to n\u00e1m funguje, s t\u00fdm je v\u0161etko v poriadku.<\/p>\n<p><\/p>\n<p><em>Vyzer\u00e1 to tak, \u017ee aktualiz\u00e1cia sa bude uskuto\u010d\u0148ova\u0165 ako dodato\u010dn\u00e1 vrstva a v\u0161etky nov\u00e9 sn\u00edmky bud\u00fa vych\u00e1dza\u0165 z tejto vrstvy, nie?<\/em> <\/p>\n<p><\/p>\n<p>Z predch\u00e1dzaj\u00facich vrstiev, ktor\u00e9 vznikli z predch\u00e1dzaj\u00facich replik\u00e1ci\u00ed. <\/p>\n<p><\/p>\n<p><em>Predch\u00e1dzaj\u00face vrstvy zmizn\u00fa, ale bud\u00fa odkazova\u0165 na star\u00fa vrstvu, zatia\u013e \u010do nov\u00e9 obrazy vezm\u00fa z poslednej vrstvy, ktor\u00e1 bola z\u00edskan\u00e1 pri aktualiz\u00e1cii?<\/em><\/p>\n<p><\/p>\n<p>V z\u00e1sade \u00e1no. <\/p>\n<p><\/p>\n<p><em>Potom budeme ma\u0165 ve\u013ea vrstiev. A \u010dasom ich budeme musie\u0165 zlu\u010dova\u0165?<\/em><\/p>\n<p><\/p>\n<p>\u00c1no, presne. Existuje ur\u010dit\u00e9 okno. Uchov\u00e1vame t\u00fd\u017edenn\u00e9 sn\u00edmky. To z\u00e1vis\u00ed od toho, ak\u00fd m\u00e1te zdroj. Ak m\u00e1te kapacitu uchov\u00e1va\u0165 ve\u013ea d\u00e1t, m\u00f4\u017eete uchov\u00e1va\u0165 sn\u00edmky dlhodobo. Ony sa sam\u00e9 neodstr\u00e1nia. \u017diadna korupcia d\u00e1t nebude. Ak sa n\u00e1m zd\u00e1, \u017ee s\u00fa sn\u00edmky zastaran\u00e9, tj. to z\u00e1vis\u00ed od politiky vo firme, m\u00f4\u017eeme ich jednoducho vymaza\u0165 a uvo\u013eni\u0165 miesto. <\/p>\n<p><\/p>\n<p><em>Dobr\u00fd de\u0148, \u010fakujem za prezent\u00e1ciu! K ot\u00e1zke Joea. Povedali ste, \u017ee z\u00e1kazn\u00edk nechcel da\u0165 pr\u00edstup v\u0161etk\u00fdm k d\u00e1tam. Stricto sensu, ak m\u00e1 \u010dlovek v\u00fdsledok Explain Analyze, m\u00f4\u017ee si d\u00e1ta prezera\u0165.<\/em> <\/p>\n<p><\/p>\n<p>Presne tak. Napr\u00edklad m\u00f4\u017eeme nap\u00edsa\u0165: \u201eSELECT FROM WHERE email = niekto\u201c. Tj. neuvid\u00edme samotn\u00e9 d\u00e1ta, ale m\u00f4\u017eeme sa pozrie\u0165 na nejak\u00e9 nepriam\u00e9 znaky. To treba ch\u00e1pa\u0165. Ale na druhej strane, v\u0161etko je to vidite\u013en\u00e9. M\u00e1me audit logov, m\u00e1me kontrolu in\u00fdch kolegov, ktor\u00ed tie\u017e vidia, \u010d\u00edm sa zaoberaj\u00fa v\u00fdvoj\u00e1ri. A ak sa niekto pok\u00fasi takto kona\u0165, bezpe\u010dnostn\u00e1 slu\u017eba k nim pr\u00edde a bude sa t\u00fdm zaobera\u0165. <\/p>\n<p><\/p>\n<p><em>Dobr\u00fd de\u0148! \u010eakujem za prezent\u00e1ciu! M\u00e1m kr\u00e1tku ot\u00e1zku. Ak sa v spolo\u010dnosti Slack nepou\u017e\u00edva, existuje k tomu nejak\u00e1 v\u00e4zba, alebo m\u00f4\u017eeme pre v\u00fdvoj\u00e1rov nasadi\u0165 in\u0161tancie, aby sa pripojili k testovacej aplik\u00e1cii datab\u00e1z?<\/em><\/p>\n<p><\/p>\n<p>Moment\u00e1lne je k dispoz\u00edcii iba integr\u00e1cia so Slackom, t.j. nie je pr\u00edtomn\u00fd \u017eiadny in\u00fd messenger, ale ve\u013emi by sme chceli podpori\u0165 aj \u010fal\u0161ie messengery. \u010co m\u00f4\u017eete urobi\u0165? M\u00f4\u017eete si nasadi\u0165 DB Lab bez Joea, pracova\u0165 prostredn\u00edctvom REST API alebo pomocou na\u0161ej platformy a vytv\u00e1ra\u0165 klony a pripoji\u0165 sa pomocou PSQL. Ale toto m\u00f4\u017eete vykona\u0165, ak ste pripraven\u00ed da\u0165 svojim v\u00fdvoj\u00e1rom pr\u00edstup k \u00fadajom, preto\u017ee tu u\u017e nebude \u017eiadne rozhranie. <\/p>\n<p><\/p>\n<p><em>T\u00fato vrstvu nepotrebujem, ale potrebujem t\u00fato mo\u017enos\u0165.<\/em><\/p>\n<p><\/p>\n<p>Tak\u017ee \u2013 \u00e1no, to je mo\u017en\u00e9.<\/p>\n<p>Zdroj: <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\/sk\/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=\"sk_SK\" \/>\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\/sk\/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\udd47DBA-bot Joe. Anatolij Stansler (Postgres.ai) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/97939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=97939"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/97939\/revisions"}],"predecessor-version":[{"id":159884,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/97939\/revisions\/159884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/97940"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=97939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=97939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=97939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}