{"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\/sl\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","title":{"rendered":"DBA-bot Joe. Anatoli Stanler (Postgres.ai)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/3bb5cc6d6be1699fc72342a74aa4020a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kako backend razvijalec razume, da bo SQL poizvedba dobro delovala na 'produ'? V velikih ali hitro rasto\u010dih podjetjih dostop do 'produ' ni na voljo vsem. In tudi z dostopom ni mogo\u010de brez te\u017eav preveriti vseh poizvedb, saj ustvarjanje kopije baze podatkov pogosto traja ure. Da bi re\u0161ili te te\u017eave, smo ustvarili umetnega DBA - Joe. \u017de je uspe\u0161no implementiran v ve\u010d podjetjih in pomaga ne samo desetim razvijalcem. <\/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. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/48e63de499e46be4be19aa8c926e5716.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pozdravljeni! Moje ime je Anatoli Stanler. Delam v podjetju <noindex><a rel=\"nofollow\" href=\"https:\/\/postgres.ai\/\">Postgres.ai<\/a><\/noindex>. Ukvarjamo se s tem, da pospe\u0161ujemo proces razvoja, odpravljamo zamude, povezane z delom Postgresa, za razvijalce, DBA in QA.<\/p>\n<p><\/p>\n<p>Imamo odli\u010dne stranke in del na\u0161ega predavanja bo posve\u010den primerom, s katerimi smo se sre\u010dali pri delu z njimi. Povedal vam bom, kako smo jim pomagali re\u0161iti kar precej resne te\u017eave.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5bd7d2538a4940afb28d6375a9516760.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ko izvajamo razvoj in delamo kompleksne obremenitvene migracije, si postavljamo vpra\u0161anje: 'Bo ta migracija uspela?'. Uporabljamo preglede, z znanjem bolj izku\u0161enih kolegov, DBA strokovnjakov. In oni lahko povedo - bo uspela ali ne. <\/p>\n<p><\/p>\n<p>Ampak morda bi bilo bolje, \u010de bi to lahko sami testirali na polno delujo\u010dih kopijah. In danes bomo govorili o tem, kak\u0161ni so zdaj pristopi k testiranju in kako to narediti bolje ter s pomo\u010djo katerih orodij. Prav tako se bomo pogovorili o prednostih in slabostih teh pristopov ter kaj lahko tukaj izbolj\u0161amo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/aca9f4c4fbbfc6db9c24f862216fb5d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kdo je kdaj delal indekse ali uvajal kak\u0161ne spremembe neposredno na produ? Kar precej jih je. A kolikokrat je to povzro\u010dilo izgubo podatkov ali izpad storitev? Potem poznate to bole\u010dino. Hvala bogu, da imamo varnostne kopije. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7795bf3cb1f3f6f9919ca42758fa51e9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prvi pristop je testiranje na produ. Ali ko razvijalec sedi na svojem lokalnem ra\u010dunalniku, ima testne podatke, neko omejeno izbiro. In jo potem uvedemo na produ, in dobimo tak\u0161no situacijo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/05b120bf57904f553422f419337d5220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To boli, to je drago. Verjetno je tako bolje ne delati. <\/p>\n<p><\/p>\n<p>Kako narediti bolje? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a8727bc2cd217d89edaf9df8588306d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poglejmo staging in izlo\u010dimo del produkcije. Ali v najbolj\u0161em primeru vzamemo pravi prod, vse podatke. In potem, ko smo lokalno razvili, dodatno preverimo \u0161e na stagingu. <\/p>\n<p><\/p>\n<p>To nam bo omogo\u010dilo, da odpravimo del napak in prepre\u010dimo napake na produ. <\/p>\n<p><\/p>\n<p>Kak\u0161ne so te\u017eave? <\/p>\n<p><\/p>\n<ul>\n<li>Te\u017eava je v tem, da ta staging delimo s kolegi. In zelo pogosto se zgodi, da naredi\u0161 kak\u0161no spremembo, bum \u2013 in podatkov ni, delo je zaman. Staging je bil ve\u010dterabaiten. In dolgo je trajalo, da se je ponovno dvignil. Zato se odlo\u010dimo, da bomo to dokon\u010dali jutri. Vse, razvoj je ustavljen. <\/li>\n<li>Seveda pa tam dela veliko kolegov, veliko ekip. In treba je ro\u010dno usklajevati. To pa je neprijetno. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/ad4612f2b06ac09e666e33196d898a79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Povedati je treba, da imamo samo en poskus, en strel, \u010de \u017eelimo vnesti kak\u0161ne spremembe v bazo podatkov, manipulirati s podatki, spremeniti strukturo. In \u010de gre kaj narobe, \u010de je pri migraciji pri\u0161lo do napake, se hitro ne bomo mogli vrniti nazaj. <\/p>\n<p><\/p>\n<p>To je bolj\u0161e od prej\u0161njega pristopa, a \u0161e vedno obstaja velika verjetnost, da bo kak\u0161na napaka \u0161la v produkcijo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/73faffc3ef6e368a0901145c48b903b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kaj nam prepre\u010duje, da vsakemu razvijalcu damo testno okolje, polno velikost kopije? Mislim, da je jasno, kaj ovira. <\/p>\n<p><\/p>\n<p>Kdo ima bazo podatkov ve\u010djo od terabajta? Ve\u010dina v dvorani. <\/p>\n<p><\/p>\n<p>In jasno je, da je vzdr\u017eevanje naprav za vsakega razvijalca, ko je produkcija tako velika, zelo drago, poleg tega pa traja dolgo. <\/p>\n<p><\/p>\n<p>Imamo stranke, ki so spoznale, da je zelo pomembno testirati vse spremembe na popolni kopiji, vendar imajo bazo manj\u0161o od terabajta, virov pa, da bi za vsakega razvijalca imeli testno okolje, nimajo. Zato morajo prenesti dumping datoteke na svoje lokalne ra\u010dunalnike in testirati na ta na\u010din. To vzame ogromno \u010dasa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/8c1c804db71ffb5b79b5284670b3427b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tudi \u010de to delate znotraj infrastrukture, je prenos enega terabajta podatkov na uro \u017ee zelo dobro. A oni uporabljajo logi\u010dne dump-e, prena\u0161ajo lokalno iz oblaka. Zanje je hitrost okoli 200 gigabajtov na uro. In potrebujemo tudi \u010das, da se iz logi\u010dnega dump-a razre\u0161i, nalo\u017ei indekse itd.<\/p>\n<p><\/p>\n<p>Ampak ta pristop uporabljajo, ker im omogo\u010da, da ostane produkcija zanesljiva. <\/p>\n<p><\/p>\n<p>Kaj lahko tukaj naredimo? Ustvarimo najcenej\u0161e testne steze in vsakemu razvijalcu damo svoj lasten testni stez.<\/p>\n<p><\/p>\n<p>To je mogo\u010de. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a763fc2677fe93df884b80561b5270a2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In this approach, when we create thin clones for each developer, we can share it on a single machine. For example, if you have a four terabyte database and want to provide it to 10 developers, you don't need to have 10 times four terabyte databases. One machine is enough to create thin isolated copies for each developer using a single machine. I'll explain how this works a bit later. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e8e9df7effb0d0241d90315f92b994c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A real example:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>The database is 4.5 terabytes. <\/p>\n<p>\n<\/li>\n<li>\n<p>We can obtain independent copies in 30 seconds. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>You don't need to wait for a testing environment or depend on its size. You can get it in seconds. It will be completely isolated environments, but they share data among themselves. <\/p>\n<p><\/p>\n<p>That's cool. Here we're talking about magic and a parallel universe. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/87e6a7e45548ed5dabd4fad01ea70616.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In our case, this works using the OpenZFS system. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e75fed43703e26152a5a85f807064cb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenZFS is a copy-on-write file system that natively supports snapshots and clones. It is reliable and scalable. It's very easy to manage. You can deploy it with just two commands. <\/p>\n<p><\/p>\n<p>There are other options:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>LVM,<\/p>\n<p>\n<\/li>\n<li>\n<p>Storage array (e.g., Pure Storage).<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>The Database Lab I'm talking about is modular. It can be implemented using such options. But for now, we've focused on OpenZFS because there were specific issues with LVM. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/41a49f6760ee96b55f49606f8e453992.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>How does it work? Instead of rewriting the data every time we change it, we save it, simply marking that these new data correspond to a new point in time, to a new snapshot. <\/p>\n<p><\/p>\n<p>And later, when we want to roll back or create a new clone from some older version, we just say: 'Okay, give us those blocks of data that are marked this way.' <\/p>\n<p><\/p>\n<p>And this user will work with that set of data. They will gradually modify it, create their snapshots. <\/p>\n<p><\/p>\n<p>And we will have branching. Each developer will have the opportunity to have their own clone that they edit, while the data that is common will be shared among all. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/78efd8b87f6559839af20a939b7c89d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To deploy such a system, two issues need to be resolved: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Prvi je izvor podataka iz kojeg \u0107ete ih uzimati. Mo\u017eete postaviti replikaciju s produkcijom. Mo\u017eete koristiti ve\u0107 postoje\u0107e rezervne kopije, nadam se. WAL-E, WAL-G ili Barman. I \u010dak, ako koristite neko Cloud re\u0161enje, poput RDS-a ili Cloud SQL-a, mo\u017eete koristiti logi\u010dke dumpove. Ali svakako vam savetujemo da koristite rezervne kopije, jer \u0107e vam ovaj pristup omogu\u0107iti o\u010duvanje fizi\u010dke strukture fajlova, \u0161to \u0107e vas dovesti bli\u017ee metrima koje biste videli na produkciji, kako biste uhvatili probleme koji postoje. <\/p>\n<p>\n<\/li>\n<li>\n<p>Drugi je mesto gde \u017eelite da hostujete Database Lab. To mo\u017ee biti Cloud, mo\u017ee biti On-premise. Ovde je va\u017eno re\u0107i da ZFS podr\u017eava kompresiju podataka. I to jako dobro radi. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Zamislite da \u0107e svaki takav klon, u zavisnosti od operacija koje radimo s bazom, akumulirati neki dev. Za taj dev \u0107e tako\u0111e biti potrebno mesto. Ali s obzirom na to da smo uzeli bazu od 4,5 terabajta, ZFS \u0107e je kompresovati na 3,5 terabajta. U zavisnosti od pode\u0161avanja, to se mo\u017ee varirati. A mi \u0107emo imati i mesto za dev. <\/p>\n<p><\/p>\n<p>Ovakav sistem se mo\u017ee koristiti za razli\u010dite slu\u010dajeve. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>To su developeri, DBA za proveru upita, za optimizaciju. <\/p>\n<p>\n<\/li>\n<li>\n<p>Mo\u017ee se koristiti u QA testiranju za proveru odre\u0111ene migracije pre nego \u0161to to pustimo u prod. Tako\u0111e, mo\u017eemo podi\u0107i posebne okru\u017eenje za QA sa realnim podacima, gde mogu testirati novu funkcionalnost. I to \u0107e trajati sekunde umesto da \u010dekate sate, a mo\u017eda \u010dak i dane u nekim drugim slu\u010dajevima gde se tanki klonovi ne koriste. <\/p>\n<p>\n<\/li>\n<li>\n<p>I jo\u0161 jedan poseban slu\u010daj. Ako u kompaniji nije postavljen sistem analitike, mo\u017eemo izdvojiti tanki klon proizvodne baze i predati ga za duge upite ili za posebne indekse koji se mogu koristiti u analitici.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5fb0944f063c981f27449d948a59b73b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S ovakvim pristupom:<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>Niska verovatno\u0107a gre\u0161aka na \u201eprodukciji\u201c, jer smo sve promene testirali na punim podacima. <\/p>\n<p>\n<\/li>\n<li>\n<p>Pojavljuje nam se kultura testiranja, po\u0161to vi\u0161e nije potrebno satima \u010dekati svoj vlastiti sto. <\/p>\n<p>\n<\/li>\n<li>\n<p>I nema prepreka, nema \u010dekanja izme\u0111u testiranja. Stvarno mo\u017eete oti\u0107i i proveriti. I bi\u0107e bolje, jer \u0107emo ubrzati razvoj. <\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>\n<p>Bodo bo manj refaktoringa. Manj napak bo prispelo v prod. Manj jih bomo kasneje refaktorirali. <\/p>\n<p>\n<\/li>\n<li>\n<p>Lahko se vra\u010damo na nepovratne spremembe. To v standardnih pristopih ni mogo\u010de. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<ol>\n<li>To je koristno, ker delimo vire testnih okolij. <\/li>\n<\/ol>\n<p><\/p>\n<p>\u017de je dobro, kaj bi \u0161e lahko pospe\u0161ili?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/d692f76b865c18ed4c178d1a1440774b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zahvaljujo\u010d tak\u0161ni sistemu lahko mo\u010dno zni\u017eamo prag vstopa v to testiranje. <\/p>\n<p><\/p>\n<p>Trenutno obstaja za\u010daran krog, kjer mora razvijalec, da dobi dostop do pravih popolnih podatkov, postati strokovnjak. Mora mu biti zaupan ta dostop. <\/p>\n<p><\/p>\n<p>Ampak kako rasti, \u010de tega ni. Kaj pa, \u010de ima\u0161 na voljo samo zelo majhen nabor testnih podatkov? Potem ne more\u0161 pridobiti prave izku\u0161nje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/221f7b02294878aea1d0ebe6df5d9717.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kako priti iz tega kroga? Kot prvi vmesnik, prijazen za razvijalce vseh ravni, smo izbrali Slack-bota. Ampak to je lahko katerikoli drug vmesnik. <\/p>\n<p><\/p>\n<p>Kaj omogo\u010da? Lahko vzamete dolo\u010den poizvedbo in jo po\u0161ljete v poseben kanal za podatkovno bazo. Samodejno bomo v nekaj sekundah izvedli tanko kloniranje. Izvr\u0161ili to poizvedbo. Zbrali meritev in priporo\u010dila. Prikazali vizualizacijo. In ta klon bo ostal, da bo mo\u017eno optimizirati to poizvedbo, dodati indekse itd. <\/p>\n<p><\/p>\n<p>In Slack nam ponuja mo\u017enosti za sodelovanje kar iz samega za\u010detka. Ker je to preprosto kanal, lahko tam v threadu za to poizvedbo za\u010dnete razpravljati o tej poizvedbi, pingate svoje kolege, DBA, ki so v podjetju. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/b4a6410b625107c5bbbf57c021159914.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Toda seveda obstajajo tudi te\u017eave. Ker je to resni\u010dni svet, in uporabljamo stre\u017enik, na katerem gostimo ve\u010d klonov hkrati, smo primorani skr\u010diti koli\u010dino pomnilnika in procesorske mo\u010di, ki so na voljo klonom. <\/p>\n<p><\/p>\n<p>Toda, da so ti testi verodostojni, moramo na nek na\u010din re\u0161iti to te\u017eavo. <\/p>\n<p><\/p>\n<p>Jasno je, da je pomemben trenutek enakost podatkov. Ampak to \u017ee imamo. In \u017eelimo dose\u010di enako konfiguracijo. Tak\u0161no prakti\u010dno enako konfiguracijo lahko zagotovimo. <\/p>\n<p><\/p>\n<p>Super bi bilo imeti enako strojno opremo kot na produkciji, vendar se lahko ta razlikuje. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5efae55189175262d56a33b89c55ed29.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poglejmo, kako Postgres deluje s pomnilnikom. Imamo dve predpomnilni, eno od datote\u010dnega sistema in eno lastno Postgres, tj. Shared Buffer Cache. <\/p>\n<p><\/p>\n<p>Pomembno je opozoriti, da se Shared Buffer Cache alocira ob zagonu Postgresa, odvisno od velikosti, ki jo nastavite v konfiguraciji. <\/p>\n<p><\/p>\n<p>Drugi predpomnilnik pa uporablja ves razpolo\u017eljiv prostor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f1f3c85e786649f83d5c17e6724086a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ko pa na eni napravi ustvarimo ve\u010d klonov, postopoma napolnimo pomnilnik. Na splo\u0161no naj bi bil Shared Buffer Cache 25 % celotne koli\u010dine pomnilnika, ki je na voljo na napravi. <\/p>\n<p><\/p>\n<p>Tako, \u010de ne spremenimo tega parametra, bomo na eni napravi lahko zagnali le 4 instance, torej 4 take tanke klone. To pa ni dobro, ker si \u017eelimo imeti veliko ve\u010d. <\/p>\n<p><\/p>\n<p>Po drugi strani pa se Buffer Cache uporablja za izvajanje poizvedb, za indekse, torej na\u010drt je odvisen od velikosti na\u0161ih predpomnilnikov. \u010ce ta parameter preprosto zmanj\u0161amo, se lahko na\u010drti mo\u010dno spremenijo.<\/p>\n<p><\/p>\n<p>Na primer, \u010de imamo v produkciji velik predpomnilnik, bo Postgres raje uporabljal indeks. \u010ce pa ga ni, bo uporabljen SeqScan. Kak\u0161en smisel bi imel, \u010de se ti na\u010drti ne bi ujemali? <\/p>\n<p><\/p>\n<p>Pri tem pridemo do spoznanja, da na\u010drt v Postgresu ni odvisen od specifi\u010dno nastavljene velikosti Shared Buffer v na\u010drtu, temve\u010d od effective_cache_size.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (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 predvidena koli\u010dina predpomnilnika, ki je na voljo, torej vsota Buffer Cache in predpomnilnika datote\u010dnega sistema. To je dolo\u010deno s konfiguracijo. In ta pomnilnik ni alociran. <\/p>\n<p><\/p>\n<p>Zaradi tega parametra lahko 'prevaramo' Postgres, da re\u010demo, da imamo na voljo veliko podatkov, tudi \u010de jih dejansko nimamo. Tako bodo na\u010drti popolnoma usklajeni s produkcijo. <\/p>\n<p><\/p>\n<p>To pa lahko vpliva na \u010dasovno u\u010dinkovitost. Optimiziramo poizvedbe glede na \u010das, vendar je pomembno, da \u010dasovna u\u010dinkovitost odvisna od mnogih dejavnikov: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Odvisna je od obremenitve, ki trenutno obstaja v produkciji. <\/p>\n<p>\n<\/li>\n<li>\n<p>Odvisna je od zna\u010dilnosti same naprave. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>To je posreden parameter, vendar lahko dejansko optimiziramo glede na koli\u010dino podatkov, ki jih bo ta poizvedba prebrala, da dose\u017eemo rezultat. <\/p>\n<p><\/p>\n<p>In \u010de \u017eelite, da je \u010dasovno usklajevanje \u010dim bli\u017eje tistemu, kar bomo videli v produkciji, potem moramo vzeti opremo, ki je \u010dim bolj podobna, in morda celo ve\u010d, da bodo vsi kloni sprejeti. Ampak to je kompromis, tj. dobili boste take na\u010drte, videli boste, koliko podatkov prebere dolo\u010den poizvedba in boste lahko sklepali \u2013 ali je ta poizvedba dobra (ali migracija) ali slaba, potrebno jo je \u0161e optimizirati. <\/p>\n<p><\/p>\n<p>Poglejmo, kako konkretno z Joe poteka optimizacija. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/26c892a0b2d417f9806cfb77d2ea47f6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vzamemo poizvedbo iz resni\u010dnega sistema. V tem primeru je baz podatkov \u2013 1 terabajt. In \u017eelimo pre\u0161teti \u0161tevilo sve\u017eih objav, ki so prejele ve\u010d kot 10 v\u0161e\u010dkov. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/befd651abed6688127f52db39138a4be.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Po\u0161ljemo sporo\u010dilo v kanal, klon se je razvil za nas. In videli bomo, da bo tak\u0161na poizvedba izvedena v 2,5 minutah. To je prvo, kar bomo opazili.<\/p>\n<p><\/p>\n<p>Joe bo prikazal samodejna priporo\u010dila, temelje\u010da na na\u010drtu in metri\u010dnih podatkih. <\/p>\n<p><\/p>\n<p>Videli bomo, da poizvedba obdeluje preve\u010d podatkov, da bi dobili razmeroma majhno \u0161tevilo vrstic. Potreben je nek specializiran indeks, saj smo opazili, da je v poizvedbi preve\u010d filtriranih vrstic. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7f40e41314ebc682a1a64a2958dec16c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poglejmo podrobneje, kaj se je zgodilo. Res vidimo, da smo prebrali skoraj en in pol gigabajta podatkov iz datote\u010dnega predpomnilnika ali celo z diska. In to ni dobro, ker smo dobili le 142 vrstic. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/30aaff5da2536fa27efc6591f645d6f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In na videz imamo tukaj indeksno analizo, ki bi morala delovati hitro, ampak ker smo filtrirali preve\u010d vrstic (morali smo jih pre\u0161teti), je poizvedba delovala po\u010dasi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/40958fbc04d4eb738f6a16488647bd8c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In to se je zgodilo v na\u010drtu, ker deloma niso ujemali pogoji v poizvedbi in pogoji v indeksu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/196ca5116e641c72bc1009e97c390bc7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poskusimo narediti indeks bolj natan\u010den in poglejmo, kako se bo izvedba poizvedbe spremenila po tem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/646a73964f0b6d3615eedb8acb3aa216.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ustvarjanje indeksa je vzelo precej \u010dasa, ampak zdaj preverjamo poizvedbo in vidimo, da se je \u010das namesto 2,5 minut zmanj\u0161al na samo 156 milisekund, kar je precej dobro. In preberemo le 6 megabajtov podatkov.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5cce2d6ecf2314c0575c0fed107f6d5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In zdaj imamo uporabljen indeksni samo analizo.<\/p>\n<p><\/p>\n<p>Druga pomembna zgodba je, da \u017eelimo na\u010drt predstaviti na bolj razumljiv na\u010din. Uvedli smo vizualizacijo z uporabo Flame Graphs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f4f545bfbf52fd66b6cbe45e1d6d0b6c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To je druga poizvedba, bolj kompleksna. In Flame Graphs gradimo na dveh parametrih: to je koli\u010dina podatkov, ki jih je konkretna vozli\u0161\u010de v na\u010drtu prebrala, in \u010das, tj. \u010das izvajanja vozli\u0161\u010da. <\/p>\n<p><\/p>\n<p>Tukaj lahko specifi\u010dno primerjamo vozli\u0161\u010da med seboj. Tako bo jasno, katero od njih jemlje ve\u010d ali manj prostora, kar je obi\u010dajno te\u017eko ugotoviti pri drugih na\u010dinih vizualizacije. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/c477d2f32241c69eb0b38ef45ff4708b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seveda, vsi poznajo explain.depesz.com. Dober atribut te vizualizacije je, da shranimo besedilni na\u010drt in tudi izpostavimo nekatere glavne parametre v tabelo, da jih lahko razvrstimo. <\/p>\n<p><\/p>\n<p>In razvijalci, ki se \u0161e niso podrobno ukvarjali s to temo, prav tako uporabljajo explain.depesz.com, saj jim tako la\u017eje razjasniti, katere metrike so pomembne in katere ne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a7352b5b9abf27294375c78bec69d4d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Obstaja nov pristop k vizualizaciji \u2013 to je explain.dalibo.com. Ustvarjajo drevesno vizualizacijo, vendar tukaj zelo te\u017eko primerjate vozli\u0161\u010da med seboj. Tu lahko dobro razumete strukturo, res pa je, da se pri ve\u010djem poizvedovanju morate pomikati naprej in nazaj, a je to tudi ena od mo\u017enosti. <\/p>\n<p><\/p>\n<h2 id=\"kollaboraciya\">Sodelovanje<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7101c0b95eafed8fd9305a4630399e3b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In kot sem \u017ee omenil, nam Slack omogo\u010da sodelovanje. Na primer, \u010de naletimo na zapleteno poizvedbo, ki je ne vemo, kako optimizirati, lahko to vpra\u0161anje pojasnimo v threadu v Slacku s svojimi kolegi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stanler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/14b8f9c3401ecb68ac1ef56bc0cb0fa5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Menimo, da je pomembno testirati na celotnih podatkih. Zato smo ustvarili orodje Update Database Lab, ki je na voljo kot odprta koda. Uporabite lahko tudi bota Joe. Lahko ga vzamete takoj in ga uvedete pri sebi. Vsi vodi\u010di so tam na voljo. <\/p>\n<p><\/p>\n<p>Pomembno je tudi omeniti, da to re\u0161itev sama po sebi ni revolucijska, saj obstaja Delphix, ampak to je re\u0161itev za velika podjetja. Je popolnoma zaprta in zelo draga. Osredoto\u010damo se na Postgres. To so vsi izdelki odprtokodnega zna\u010daja. Pridru\u017eite se nam! <\/p>\n<p><\/p>\n<p>S tem kon\u010dujem. Hvala!<\/p>\n<p><\/p>\n<h2 id=\"voprosy\">Vpra\u0161anja<\/h2>\n<p><\/p>\n<p><em>Pozdravljeni! Hvala za predstavitev! Zelo zanimivo, \u0161e posebej zame, ker sem podobno nalogo re\u0161eval pred nekaj \u010dasa. Zato imam vrsto vpra\u0161anj. Upam, da bom vsaj del vpra\u0161al.<\/em><\/p>\n<p><\/p>\n<p><em>Zanima me, kako izra\u010dunate prostor za to okolje? Tehnologija predvideva, da se lahko va\u0161i kloni v nekaterih okoli\u0161\u010dinah pove\u010dajo do najve\u010dje velikosti. Na grobo re\u010deno, \u010de imate deset terabajtno bazo in 10 klonov, lahko enostavno simulirate situacijo, kjer vsak klon zasede 10 unikatnih podatkov. Kako izra\u010dunate ta prostor, torej razliko, o kateri ste govorili, v kateri bodo \u017eiveli ti kloni?<\/em><\/p>\n<p><\/p>\n<p>Dober vpra\u0161aj. Pomembno je, da spremljamo konkretne klone. In \u010de se nek klon preve\u010d spremeni in za\u010dne rasti, lahko najprej uporabniku izdamo opozorilo glede tega, ali pa takoj ustavimo ta klon, da ne pride do fail situacije. <\/p>\n<p><\/p>\n<p><em>Da, imam \u0161e eno vpra\u0161anje. T. j. kako zagotavljate \u017eivljenjski cikel teh modulov? To je pri nas te\u017eava in cela zgodba. Kako to poteka?<\/em><\/p>\n<p><\/p>\n<p>Vsak klon ima nek TTL. Na splo\u0161no imamo dolo\u010den TTL. <\/p>\n<p><\/p>\n<p><em>Kateri, \u010de ni skrivnost?<\/em><\/p>\n<p><\/p>\n<p>1 ura, t. j. idle \u2013 1 ura. \u010ce se ne uporablja, ga uni\u010dimo. Toda tukaj ni nobenega presene\u010denja, saj lahko klon vzpostavimo v nekaj sekundah. In \u010de ga potrebujemo znova, ni te\u017eav. <\/p>\n<p><\/p>\n<p><em>Tudi mene zanima izbira tehnologij, saj mi uporabljamo ve\u010d metod iz razli\u010dnih razlogov. Zakaj ravno ZFS? Zakaj niste uporabili LVM? Omenili ste, da ste imeli te\u017eave z LVM. Katere te\u017eave so bile? Po mojem mnenju je najbolj optimalna izbira SAN, glede na zmogljivost.<\/em> <\/p>\n<p><\/p>\n<p><em>Kak\u0161na je glavna te\u017eava z ZFS? Da mora\u0161 te\u010di na enem gostitelju, t. j. vsi in\u0161tanci bodo \u017eiveli v okviru enega operacijskega sistema. V primeru SAN lahko priklju\u010dite razli\u010dno opremo. In ozka mesta so samo tisti bloki, ki so na SAN. In zanimivo je vpra\u0161anje izbire tehnologij. Zakaj ne LVM?<\/em><\/p>\n<p><\/p>\n<p>O LVM lahko konkretno spregovorimo na meetup-u. Glede SAN \u2013 to je preprosto drago. Sistem ZFS lahko uvedemo kjer koli. Lahko ga razpnete na svoji napravi. Preprosto lahko prenesete repozitorij in ga razpnete. ZFS je skoraj povsod name\u0161\u010den, \u010de govorimo o Linuxu. T. j. dobimo zelo fleksibilno re\u0161itev. In sam ZFS \u017ee iz \u0161katle ponuja zelo veliko. Lahko nalagate neomejeno koli\u010dino podatkov, priklju\u010dite veliko \u0161tevilo diskov, imamo posnetke. In, kot sem \u017ee omenil, ga je preprosto upravljati. Zdi se zelo prijeten za uporabo. Je preverjen, obstaja \u017ee vrsto let. Ima zelo veliko skupnost, ki se \u0161iri. ZFS je zelo zanesljiva re\u0161itev. <\/p>\n<p><\/p>\n<p>Nikolaj Samohvalov: Lahko \u0161e komentiram? Ime mi je Nikolaj, skupaj z Anatolijem delava. Strinjam se, da je SAN odli\u010den. In nekateri na\u0161i kupci imajo Pure Storage itd. <\/p>\n<p><\/p>\n<p>Anatoliy rightly noted that we are focused on modularity. In the future, we can implement a single interface \u2013 create a snapshot, make a clone, destroy a clone. It\u2019s all easy. And the storage system is great, if available.<\/p>\n<p><\/p>\n<p>But ZFS is accessible to everyone. Enough with DelPhix, they have 300 clients, of which 50 are in the Fortune 100, meaning they are targeting NASA, etc. It\u2019s time to make this technology available to all. That\u2019s why we have an open-source core. We have an interface part that is not open-source. This is a platform we will demonstrate. But we want it to be accessible to everyone. We want to create a revolution so that all testers stop guessing on laptops. We should be able to write SELECT and immediately see if it's slow. No more waiting for a DBA to inform us. That\u2019s the main goal. And I believe we will all get there. We are developing this thing so that it\u2019s available to everyone. Therefore, ZFS, because it will be available everywhere. Thanks to the community for solving problems and for the open-source license, etc.* <\/p>\n<p><\/p>\n<p><em>Hello! Thank you for the presentation! My name is Maxim. We faced similar problems. We solved them on our end. How do you allocate resources among these clones? Each clone at any given time can be doing its own thing: one tests one thing, another tests something else, one is building an index, and another is running a heavy job. While it's possible to divide CPU usage, how do you segregate IO? That\u2019s my first question.<\/em><\/p>\n<p><\/p>\n<p><em>And my second question is about the dissimilarity of environments. For example, I have ZFS here and everything is great, but a client in production does not have ZFS but ext4, for example. How do you handle that?<\/em><\/p>\n<p><\/p>\n<p>These are very good questions. I briefly mentioned this problem with resource allocation. The solution is as follows. Imagine you\u2019re testing in staging. You might also have a situation where someone is creating one load while another is creating a different load. As a result, you see metrics that are ambiguous. The same problem can occur in production. When you want to check a query and see that there is some issue \u2013 it runs slowly \u2013 the problem might not actually be with the query but with some parallel load. <\/p>\n<p><\/p>\n<p>In this context, it's important to focus on the plan we'll be taking, the steps involved, and how much data we will lift for it. The load on our disks, for instance, will specifically affect timing. However, we can assess the load of this request based on the volume of data. It's not so important that there will be some execution running simultaneously. <\/p>\n<p><\/p>\n<p><em>I have two questions. This is a really great tool. Have there been cases where production data is critically important, such as credit card numbers? Is there something ready-made for this, or is it a separate task? And the second question \u2013 is there something similar for MySQL?<\/em><\/p>\n<p><\/p>\n<p>Regarding the data. We will implement obfuscation; we are not doing this yet. But if you deploy Joe specifically, and if you do not grant access to the developers, then there is no access to the data. Why? Because Joe does not show the data. He only displays metrics, plans, and so on. This was done intentionally since it is one of our client's requirements. They wanted the ability to optimize but not provide access to everyone. <\/p>\n<p><\/p>\n<p>Regarding MySQL. This system can be used for anything that maintains state on disk. Since we are working with Postgres, we are currently prioritizing full automation for Postgres. We want to automate data retrieval from backup. We correctly configure Postgres. We know how to ensure that plans align, etc. <\/p>\n<p><\/p>\n<p>However, since the system is extensible, it can also be used for MySQL. There are examples of this. Yandex has a similar tool, but they do not publish it anywhere. They use it internally in Yandex.Metrics, and it relates specifically to MySQL. But the technologies are the same: ZFS. <\/p>\n<p><\/p>\n<p><em>Thank you for the presentation! I have a couple of questions as well. You mentioned that cloning can be used for analytics, for instance, to build additional indexes there. Could you explain in more detail how this works?<\/em><\/p>\n<p><\/p>\n<p><em>And I'll ask the second question right away regarding the uniformity of environments and plans. The plan also depends on the statistics collected by Postgres. How do you address this issue?<\/em><\/p>\n<p><\/p>\n<p>Na voljo ni analitike specifi\u010dnih primerov, ker jih \u0161e nismo uporabili, vendar je ta mo\u017enost prisotna. \u010ce govorimo o indeksih, si predstavljajte, da se izvede poizvedba nad tabelo s stotimi milijoni vnosi in po stolpcu, ki obi\u010dajno ni indeksiran v produkciji. In nekako \u017eelimo izra\u010dunati podatke. \u010ce to poizvedbo izvedemo v produkciji, obstaja mo\u017enost, da bo v produkciji zastoja, ker bo ta poizvedba trajala minuto. <\/p>\n<p><\/p>\n<p>V redu, naredimo tisti tanki klon, ki ga ni strah zaustaviti za nekaj minut. In da bo udobneje pri analitiki, dodajmo indekse za stolpce, katerih podatki nas zanimajo. <\/p>\n<p><\/p>\n<p><em>Ali se bo indeks ustvaril vsaki\u010d?<\/em><\/p>\n<p><\/p>\n<p>Lahko naredimo tako, da bomo podatke osmotrili, naredili posnetke, nato se bomo iz tega posnetka obnavljali in izvajali nove poizvedbe. To pomeni, da lahko ustvarimo nove klone z \u017ee nastavljenimi indeksi.<\/p>\n<p><\/p>\n<p>Kar se ti\u010de vpra\u0161anja o statistiki, \u010de se obnavljamo iz varnostne kopije, \u010de izvajamo replikacijo, bo na\u0161a statistika to\u010dno taka. Ker bomo v celoti prenesli vso fizi\u010dno strukturo podatkov, torej vse podatke z vsemi statisti\u010dnimi metri\u010dnimi podatki. <\/p>\n<p><\/p>\n<p>Tu je drug problem. \u010ce uporabljate obla\u010dno re\u0161itev, so na voljo samo logi\u010dne kopije, ker Google in Amazon ne dovolite vzeti fizi\u010dne kopije. Tam bo problem. <\/p>\n<p><\/p>\n<p><em>Hvala za poro\u010dilo. Tu sta bila postavljena dva dobra vpra\u0161anja o MySQL in o razdelitvi virov. A v bistvu se vse svodi na to, da to ni tema specifi\u010dnih DBMS, temve\u010d na splo\u0161no datote\u010dnega sistema. In zato morajo biti vpra\u0161anja razdelitve virov re\u0161evana tam, ne na koncu, da je to Postgres, temve\u010d v datote\u010dnem sistemu. <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sl\/server\/dts-dronten\/\"   title=\"stre\u017enikom\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2602\">stre\u017enikom<\/a>, v instance.<\/em> <\/p>\n<p><\/p>\n<p><em>Moje vpra\u0161anje je nekoliko druga\u010dno. Bolj se nana\u0161a na ve\u010dplastnost podatkovne baze, kjer je ve\u010d plasti. Na primer, nastavili smo posodobitev deset terabajtnega posnetka, imamo replikacijo. To re\u0161itev konkretno uporabljamo za baze podatkov. Replikacija poteka, prihaja do posodobitve podatkov. Hkrati dela 100 zaposlenih, ki nenehno izvajajo te razli\u010dne posnetke. Kaj storiti? Kako narediti, da ne bo konflikta, da so zagnali eno, nato pa je datote\u010dni sistem zamenjan in so ti posnetki vsi zmedeni?<\/em> <\/p>\n<p><\/p>\n<p>Ne bodo od\u0161li, ker tako deluje ZFS. Lahko obdr\u017eimo lo\u010deno v enem toku spremembe datote\u010dnega sistema, ki prihajajo zaradi replikacije. In ohranjamo klone starih razli\u010dic podatkov, ki jih uporabljajo razvijalci. To deluje pri nas, z tem je vse v redu.<\/p>\n<p><\/p>\n<p><em>Torej bo posodobitev potekala kot dodaten sloj, novi posnetki pa bodo izhajali iz tega sloja, kajne?<\/em> <\/p>\n<p><\/p>\n<p>Iz prej\u0161njih slojev, ki so bili iz prej\u0161njih replikacij. <\/p>\n<p><\/p>\n<p><em>Prej\u0161nji sloji se odstranijo, vendar se bodo sklicevali na starej\u0161i sloj, novi imid\u017ei pa bodo vzeti iz zadnjega sloja, ki je bil pridobljen v posodobitvi?<\/em><\/p>\n<p><\/p>\n<p>Na splo\u0161no, ja. <\/p>\n<p><\/p>\n<p><em>Potem bomo imeli veliko slojev. In s\u010dasoma jih bo treba stisniti?<\/em><\/p>\n<p><\/p>\n<p>Da, to\u010dno tako. Obstaja nekako okno. Ohranjamo tedenske posnetke. To je odvisno od tega, kak\u0161ne vire imate. \u010ce imate mo\u017enost shranjevati veliko podatkov, lahko ohranjate posnetke dalj \u010dasa. Sami se ne bodo izbrisali. Nobene korupcije podatkov ne bo. \u010ce se nam zdi, da so posnetki zastareli, tj. to je odvisno od politike v podjetju, jih lahko preprosto izbri\u0161emo in sprostimo prostor. <\/p>\n<p><\/p>\n<p><em>Pozdravljeni, hvala za poro\u010dilo! Glede vpra\u0161anja Joe. Rekli ste, da naro\u010dnik ni \u017eelel dati dostopa vsem do podatkov. Strogo gledano, \u010de ima nekdo rezultat Explain Analyze, lahko vpogleda v podatke.<\/em> <\/p>\n<p><\/p>\n<p>Tako je. Na primer, lahko napi\u0161emo: \"SELECT FROM WHERE email = nekdo\". Tj. ne bomo videli samih podatkov, vendar lahko pogledamo nekatere posredne oznake. To je treba razumeti. A po drugi strani je vse to vidno. Imamo revizijske dnevnike, imamo nadzor drugih kolegov, ki prav tako vidijo, s \u010dim se ukvarjajo razvijalci. In \u010de kdo posku\u0161a tako narediti, bo varnostna slu\u017eba pri\u0161la k njim in se ukvarjala s tem vpra\u0161anjem. <\/p>\n<p><\/p>\n<p><em>Dober dan! Hvala za poro\u010dilo! Imam kratko vpra\u0161anje. \u010ce v podjetju Slack ni v uporabi, ali obstaja kak\u0161na vezanost nanj ali lahko razvijalci razporedijo instance, da pove\u017eejo aplikacijo za testiranje z bazami?<\/em><\/p>\n<p><\/p>\n<p>Trenutno postoji povezanost sa Slack-om, tj. nema drugog messenger-a, ali veoma bismo \u017eeleli da podr\u017eimo i druge messengere. \u0160ta mo\u017eete u\u010diniti? Mo\u017eete pokrenuti DB Lab kod sebe bez Joe-a, koristiti REST API ili na\u0161u platformu za kreiranje klonova i povezivanje putem PSQL-a. No, ovo je mogu\u0107e samo ako ste spremni da date svojim programerima pristup podacima, jer ovde vi\u0161e ne\u0107e biti nikakvog interfejsa. <\/p>\n<p><\/p>\n<p><em>Ova sloj mi nije potreban, potrebna mi je takva mogu\u0107nost.<\/em><\/p>\n<p><\/p>\n<p>U tom slu\u010daju \u2013 da, to se mo\u017ee uraditi.<\/p>\n<p>Izvor: <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.4 - 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\/sl\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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\/sl\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/97939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=97939"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/97939\/revisions"}],"predecessor-version":[{"id":159884,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/97939\/revisions\/159884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/97940"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=97939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=97939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=97939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}