{"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\/cs\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","title":{"rendered":"DBA-bot Joe. Anatolij Stancler (Postgres.ai)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/3bb5cc6d6be1699fc72342a74aa4020a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak backendov\u00fd v\u00fdvoj\u00e1\u0159 zjist\u00ed, \u017ee SQL dotaz bude na \u201eprodu\u201c fungovat dob\u0159e? Ve velk\u00fdch nebo rychle rostouc\u00edch firm\u00e1ch je p\u0159\u00edstup k \u201eprodu\u201c daleko ne pro v\u0161echny. A i s p\u0159\u00edstupem nen\u00ed mo\u017en\u00e9 bezbolestn\u011b zkontrolovat v\u0161echny dotazy, a vytvo\u0159en\u00ed kopie datab\u00e1ze \u010dasto trv\u00e1 hodiny. Abychom tyto probl\u00e9my vy\u0159e\u0161ili, vytvo\u0159ili jsme um\u011bl\u00e9ho DBA \u2013 Joea. Ji\u017e \u00fasp\u011b\u0161n\u011b implementov\u00e1n v n\u011bkolika firm\u00e1ch a pom\u00e1h\u00e1 nejednomu des\u00edtku v\u00fdvoj\u00e1\u0159\u016f. <\/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 Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/48e63de499e46be4be19aa8c926e5716.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahoj v\u0161ichni! Jmenuji se Anatolij Stansler. Pracuji ve firm\u011b <noindex><a rel=\"nofollow\" href=\"https:\/\/postgres.ai\/\">Postgres.ai<\/a><\/noindex>. Zam\u011b\u0159ujeme se na to, abychom urychlili proces v\u00fdvoje t\u00edm, \u017ee odbour\u00e1v\u00e1me zpo\u017ed\u011bn\u00ed spojen\u00e1 s prac\u00ed s Postgres, v\u00fdvoj\u00e1\u0159\u016fm, DBA a QA.<\/p>\n<p><\/p>\n<p>M\u00e1me skv\u011bl\u00e9 klienty a dnes bude \u010d\u00e1st prezentace v\u011bnov\u00e1na p\u0159\u00edpad\u016fm, se kter\u00fdmi jsme se v pr\u00e1ci s nimi setkali. Pov\u011bd\u00edm v\u00e1m, jak jsme jim pomohli vy\u0159e\u0161it dost z\u00e1va\u017en\u00e9 probl\u00e9my.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5bd7d2538a4940afb28d6375a9516760.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kdy\u017e vyv\u00edj\u00edme a d\u011bl\u00e1me slo\u017eit\u00e9 z\u00e1t\u011b\u017eov\u00e9 migrace, klademe si ot\u00e1zku: \u201eVyjde tato migrace?\u201c Pou\u017e\u00edv\u00e1me review, vyu\u017e\u00edv\u00e1me znalosti zku\u0161en\u011bj\u0161\u00edch koleg\u016f, odborn\u00edk\u016f na DBA. A ti mohou \u0159\u00edct \u2013 vyjde nebo nevyjde. <\/p>\n<p><\/p>\n<p>Ale mo\u017en\u00e1 by bylo lep\u0161\u00ed, kdybychom to mohli otestovat sami na plnohodnotn\u00fdch kopi\u00edch. A dnes se pr\u00e1v\u011b budeme bavit o tom, jak\u00e9 jsou te\u010f p\u0159\u00edstupy k testov\u00e1n\u00ed, jak to lze d\u011blat l\u00e9pe a s jak\u00fdmi n\u00e1stroji. A tak\u00e9 se pod\u00edv\u00e1me na v\u00fdhody a nev\u00fdhody t\u011bchto p\u0159\u00edstup\u016f a co zde m\u016f\u017eeme opravit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/aca9f4c4fbbfc6db9c24f862216fb5d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kdo n\u011bkdy prov\u00e1d\u011bl indexy nebo n\u011bjak\u00e9 zm\u011bny p\u0159\u00edmo na prod? Docela dost. A u koho to vedlo k tomu, \u017ee do\u0161lo ke ztr\u00e1t\u011b dat nebo k v\u00fdpadk\u016fm? Potom zn\u00e1te tuto bolest. D\u00edky bohu, z\u00e1lohy existuj\u00ed. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7795bf3cb1f3f6f9919ca42758fa51e9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prvn\u00ed p\u0159\u00edstup \u2013 to je testov\u00e1n\u00ed na produ. Nebo kdy\u017e se v\u00fdvoj\u00e1\u0159 posad\u00ed s lok\u00e1ln\u00edho stroje, m\u00e1 testovac\u00ed data, je zde n\u011bjak\u00fd omezen\u00fd vzorek. A my nasazujeme na prod, a dost\u00e1v\u00e1me takovou situaci.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/05b120bf57904f553422f419337d5220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To bol\u00ed, to je drah\u00e9. Mo\u017en\u00e1, \u017ee to takto l\u00e9pe ned\u011blat. <\/p>\n<p><\/p>\n<p>Ale jak to ud\u011blat l\u00e9pe? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a8727bc2cd217d89edaf9df8588306d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme vz\u00edt staging a vy\u010dlenit tam n\u011bjakou \u010d\u00e1st produ. Nebo v lep\u0161\u00edm p\u0159\u00edpad\u011b vezmeme skute\u010dn\u00fd prod, v\u0161echna data. A po lok\u00e1ln\u00edm v\u00fdvoji budeme nav\u00edc ov\u011b\u0159ovat je\u0161t\u011b na stagingu. <\/p>\n<p><\/p>\n<p>To n\u00e1m umo\u017en\u00ed odstranit n\u011bjakou \u010d\u00e1st chyb, t. j. zabr\u00e1nit jim na produ. <\/p>\n<p><\/p>\n<p>Jak\u00e9 jsou probl\u00e9my? <\/p>\n<p><\/p>\n<ul>\n<li>Probl\u00e9m je v tom, \u017ee tento staging sd\u00edl\u00edme s kolegy. A velmi \u010dasto se st\u00e1v\u00e1, \u017ee ud\u011bl\u00e1te n\u011bjakou zm\u011bnu, bum \u2013 a \u017e\u00e1dn\u00e1 data nejsou, pr\u00e1ce vyjde vnive\u010d. Staging byl mnoha terabajtov\u00fd. A mus\u00edte dlouho \u010dekat, ne\u017e se znovu rozb\u011bhne. A rozhodujeme se to dokon\u010dit z\u00edtra. V\u0161echno, m\u00e1me zastaven\u00fd v\u00fdvoj. <\/li>\n<li>A samoz\u0159ejm\u011b tam u n\u00e1s pracuje spousta koleg\u016f, spousta t\u00fdm\u016f. A je nutn\u00e9 to dohadovat ru\u010dn\u011b. A to je nepohodln\u00e9. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/ad4612f2b06ac09e666e33196d898a79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A je t\u0159eba \u0159\u00edct, \u017ee m\u00e1me jen jednu \u0161anci, jeden pokus, pokud chceme prov\u00e9st n\u011bjak\u00e9 zm\u011bny v datab\u00e1zi, s\u00e1hnout na data, zm\u011bnit strukturu. A pokud n\u011bco nevyjde, pokud dojde k chyb\u011b p\u0159i migraci, tak se rychle ji\u017e nevr\u00e1t\u00edme zp\u011bt. <\/p>\n<p><\/p>\n<p>Je to lep\u0161\u00ed ne\u017e p\u0159edchoz\u00ed p\u0159\u00edstup, ale st\u00e1le existuje velk\u00e1 pravd\u011bpodobnost, \u017ee n\u011bjak\u00e1 chyba se dostane do produkce.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/73faffc3ef6e368a0901145c48b903b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co n\u00e1m br\u00e1n\u00ed d\u00e1t ka\u017ed\u00e9mu v\u00fdvoj\u00e1\u0159i testovac\u00ed prost\u0159ed\u00ed, plnou kopii? Mysl\u00edm, \u017ee je jasn\u00e9, co br\u00e1n\u00ed. <\/p>\n<p><\/p>\n<p>Kdo m\u00e1 datab\u00e1zi v\u011bt\u0161\u00ed ne\u017e terabajt? V\u00edc ne\u017e polovina s\u00e1lu. <\/p>\n<p><\/p>\n<p>A je jasn\u00e9, \u017ee udr\u017eovat stroje pro ka\u017ed\u00e9ho v\u00fdvoj\u00e1\u0159e, kdy\u017e je tak velk\u00e1 produkce, je velmi drah\u00e9, nav\u00edc je\u0161t\u011b i \u010dasov\u011b n\u00e1ro\u010dn\u00e9. <\/p>\n<p><\/p>\n<p>M\u00e1me klienty, kte\u0159\u00ed si uv\u011bdomili, jak d\u016fle\u017eit\u00e9 je testovat v\u0161echny zm\u011bny na pln\u00fdch kopi\u00edch, ale jejich datab\u00e1ze je men\u0161\u00ed ne\u017e terabajt, a prost\u0159edky na to, aby m\u011bli testovac\u00ed prost\u0159ed\u00ed pro ka\u017ed\u00e9ho v\u00fdvoj\u00e1\u0159e, nejsou. Proto si mus\u00ed stahovat dumpy lok\u00e1ln\u011b na sv\u016fj stroj a testovat t\u00edmto zp\u016fsobem. To zabere spoustu \u010dasu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/8c1c804db71ffb5b79b5284670b3427b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I kdybyste to d\u011blali uvnit\u0159 infrastruktury, st\u00e1hnout jeden terabajt dat za hodinu \u2013 to u\u017e je velmi dobr\u00e9. Ale pou\u017e\u00edvaj\u00ed logick\u00e9 dumpy, stahuj\u00ed lok\u00e1ln\u011b z cloudu. Pro n\u011b je rychlost kolem 200 gigabajt\u016f za hodinu. A je\u0161t\u011b pot\u0159ebuj\u00ed \u010das, aby se z logick\u00e9ho dumpu rozb\u011bhli, nasadili indexy atd.<\/p>\n<p><\/p>\n<p>Ale tento p\u0159\u00edstup pou\u017e\u00edvaj\u00ed, proto\u017ee to umo\u017e\u0148uje udr\u017eovat prod spolehliv\u00fdm. <\/p>\n<p><\/p>\n<p>Co m\u016f\u017eeme ud\u011blat zde? Poj\u010fme to ud\u011blat tak, aby testovac\u00ed prost\u0159ed\u00ed byla levn\u00e1 a d\u00e1me ka\u017ed\u00e9mu v\u00fdvoj\u00e1\u0159i jeho vlastn\u00ed testovac\u00ed prost\u0159ed\u00ed.<\/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 Stancler (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 p\u0159\u00edstupu, kdy\u017e vytv\u00e1\u0159\u00edme tenk\u00e9 klony pro ka\u017ed\u00e9ho v\u00fdvoj\u00e1\u0159e, m\u016f\u017eeme to sd\u00edlet na jednom stroji. Nap\u0159\u00edklad, pokud m\u00e1te \u010dty\u0159terabytovou datab\u00e1zi a chcete ji poskytnout 10 v\u00fdvoj\u00e1\u0159\u016fm, nemus\u00edte m\u00edt 10 x \u010dty\u0159terabytov\u00fdch datab\u00e1z\u00ed. Sta\u010d\u00ed v\u00e1m jeden stroj, abyste d\u011blali tenk\u00e9 izolovan\u00e9 kopie pro ka\u017ed\u00e9ho v\u00fdvoj\u00e1\u0159e, vyu\u017e\u00edvaj\u00edc\u00ed jeden stroj. Jak to funguje, pov\u00edm pozd\u011bji. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e8e9df7effb0d0241d90315f92b994c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Skute\u010dn\u00fd p\u0159\u00edklad:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>DB \u2013 4,5 terabytu. <\/p>\n<p>\n<\/li>\n<li>\n<p>M\u016f\u017eeme z\u00edskat nez\u00e1visl\u00e9 kopie za 30 sekund. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Nemus\u00edte \u010dekat na testovac\u00ed prost\u0159ed\u00ed a z\u00e1viset na tom, jak velk\u00e9 je. M\u016f\u017eete to z\u00edskat b\u011bhem sekund. Bude to pln\u011b izolovan\u00e9 prost\u0159ed\u00ed, kter\u00e9 sd\u00edl\u00ed data mezi sebou. <\/p>\n<p><\/p>\n<p>To je skv\u011bl\u00e9. Zde mluv\u00edme o kouzlu a paraleln\u00edm vesm\u00edru. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/87e6a7e45548ed5dabd4fad01ea70616.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V na\u0161em p\u0159\u00edpad\u011b to funguje d\u00edky syst\u00e9mu OpenZFS. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (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 souborov\u00fd syst\u00e9m, kter\u00fd ji\u017e z krabice podporuje snapshoty a klony. Je spolehliv\u00fd a \u0161k\u00e1lovateln\u00fd. Je velmi snadn\u00e9 jej spravovat. Doslova ho m\u016f\u017eete nasadit ve dvou p\u0159\u00edkazech. <\/p>\n<p><\/p>\n<p>Existuj\u00ed i jin\u00e9 mo\u017enosti:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>LVM,<\/p>\n<p>\n<\/li>\n<li>\n<p>SAN (nap\u0159\u00edklad Pure Storage).<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Database Lab, o kter\u00e9m mluv\u00edm, je modul\u00e1rn\u00ed. Lze ho implementovat p\u0159i pou\u017eit\u00ed t\u011bchto variant. Ale zat\u00edm jsme se soust\u0159edili na OpenZFS, proto\u017ee konkr\u00e9tn\u011b s LVM byly probl\u00e9my. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/41a49f6760ee96b55f49606f8e453992.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak to funguje? M\u00edsto toho, abychom ka\u017ed\u00fd \u010das znovu p\u0159episovali data, kdy\u017e je m\u011bn\u00edme, ukl\u00e1d\u00e1me je, t\u00edm, \u017ee ozna\u010d\u00edme, \u017ee tyto nov\u00e9 \u00fadaje pat\u0159\u00ed k nov\u00e9mu \u010dasov\u00e9mu bodu, nov\u00e9mu snapshotu. <\/p>\n<p><\/p>\n<p>A pokud se pozd\u011bji chceme vr\u00e1tit zp\u011bt nebo chceme ud\u011blat nov\u00fd klon z n\u011bjak\u00e9 star\u0161\u00ed verze, prost\u011b \u0159ekneme: \"Dob\u0159e, dejte n\u00e1m tyto bloky dat, kter\u00e9 jsou takto ozna\u010deny.\" <\/p>\n<p><\/p>\n<p>A tento u\u017eivatel bude pracovat s t\u00edmto souborem dat. Bude je postupn\u011b m\u011bnit a vytv\u00e1\u0159et sv\u00e9 snapshoty. <\/p>\n<p><\/p>\n<p>A dojde k v\u011btven\u00ed. Ka\u017ed\u00fd v\u00fdvoj\u00e1\u0159 v na\u0161em p\u0159\u00edpad\u011b bude m\u00edt mo\u017enost m\u00edt sv\u016fj vlastn\u00ed klon, kter\u00fd edituj\u00ed, a ty \u00fadaje, kter\u00e9 jsou spole\u010dn\u00e9, budou sd\u00edleny mezi v\u0161emi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/78efd8b87f6559839af20a939b7c89d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Abychom mohli nasadit takov\u00fd syst\u00e9m, mus\u00edme vy\u0159e\u0161it dva probl\u00e9my: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Prvn\u00ed je zdroj dat, odkud je budete br\u00e1t. M\u016f\u017eete nastavit replikaci s produkc\u00ed. M\u016f\u017eete pou\u017e\u00edt u\u017e nastaven\u00e9 z\u00e1lohy, douf\u00e1m, \u017ee m\u00e1te. WAL-E, WAL-G nebo Barman. A i kdy\u017e pou\u017e\u00edv\u00e1te n\u011bjak\u00e9 cloudov\u00e9 \u0159e\u0161en\u00ed, jako RDS nebo Cloud SQL, m\u016f\u017eete pou\u017e\u00edvat logick\u00e9 dumpy. Ale st\u00e1le v\u00e1m doporu\u010dujeme pou\u017e\u00edvat z\u00e1lohy, proto\u017ee p\u0159i takov\u00e9m p\u0159\u00edstupu si zachov\u00e1te tak\u00e9 fyzickou strukturu soubor\u016f, co\u017e v\u00e1m umo\u017en\u00ed b\u00fdt bl\u00ed\u017ee k metrik\u00e1m, kter\u00e9 byste vid\u011bli na produkci, abyste odhalili probl\u00e9my, kter\u00e9 existuj\u00ed. <\/p>\n<p>\n<\/li>\n<li>\n<p>Druh\u00fd je m\u00edsto, kde chcete hostit Database Lab. M\u016f\u017ee to b\u00fdt cloud, m\u016f\u017ee to b\u00fdt on-premise. Je d\u016fle\u017eit\u00e9 \u0159\u00edci, \u017ee ZFS podporuje kompresi dat. A to d\u011bl\u00e1 pom\u011brn\u011b dob\u0159e. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u0159edstavte si, \u017ee ka\u017ed\u00fd takov\u00fd klon, v z\u00e1vislosti na operac\u00edch, kter\u00e9 s datab\u00e1z\u00ed prov\u00e1d\u00edme, bude m\u00edt n\u011bjak\u00fd dev b\u011b\u017e\u00edc\u00ed. Pro tento dev bude tak\u00e9 pot\u0159eba m\u00edsto. Ale d\u00edky tomu, \u017ee jsme vzali datab\u00e1zi o velikosti 4,5 terabajtu, ZFS ji zmen\u0161\u00ed na 3,5 terabajtu. V z\u00e1vislosti na nastaven\u00ed to lze variabiln\u011b m\u011bnit. A pro dev n\u00e1m je\u0161t\u011b zbude m\u00edsto. <\/p>\n<p><\/p>\n<p>Takov\u00fd syst\u00e9m lze vyu\u017e\u00edt pro r\u016fzn\u00e9 p\u0159\u00edpady. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Toto jsou v\u00fdvoj\u00e1\u0159i, DBA pro kontrolu dotaz\u016f, pro optimalizaci. <\/p>\n<p>\n<\/li>\n<li>\n<p>M\u016f\u017eeme to pou\u017e\u00edt v QA testov\u00e1n\u00ed pro ov\u011b\u0159en\u00ed konkr\u00e9tn\u00ed migrace p\u0159ed t\u00edm, ne\u017e ji nasad\u00edme do produkce. A tak\u00e9 m\u016f\u017eeme vytv\u00e1\u0159et speci\u00e1ln\u00ed prost\u0159ed\u00ed pro QA s re\u00e1ln\u00fdmi daty, kde mohou otestovat nov\u00e9 funkce. A to bude trvat sekundy m\u00edsto toho, abychom \u010dekali hodiny, nebo mo\u017en\u00e1 i dny v n\u011bkter\u00fdch jin\u00fdch p\u0159\u00edpadech, kde se nevyu\u017e\u00edvaj\u00ed tenk\u00e9 kopie. <\/p>\n<p>\n<\/li>\n<li>\n<p>A je tu je\u0161t\u011b jeden p\u0159\u00edpad. Pokud ve firm\u011b nen\u00ed nastavena analytick\u00e1 syst\u00e9m, m\u016f\u017eeme vy\u010dlenit tenk\u00fd klon produktov\u00e9 datab\u00e1ze a p\u0159edat ho pro dlouh\u00e9 dotazy nebo pro speci\u00e1ln\u00ed indexy, kter\u00e9 mohou b\u00fdt v analytice pou\u017eity.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5fb0944f063c981f27449d948a59b73b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S takov\u00fdm p\u0159\u00edstupem:<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>N\u00edzk\u00e1 pravd\u011bpodobnost chyb na \"produkc\u00ed\", proto\u017ee jsme v\u0161echny zm\u011bny otestovali na plnohodnotn\u00fdch datech. <\/p>\n<p>\n<\/li>\n<li>\n<p>Vytv\u00e1\u0159\u00edme kulturu testov\u00e1n\u00ed, proto\u017ee nyn\u00ed nen\u00ed pot\u0159eba hodiny \u010dekat na vlastn\u00ed stand. <\/p>\n<p>\n<\/li>\n<li>\n<p>A nejsou p\u0159ek\u00e1\u017eky, nen\u00ed \u010dek\u00e1n\u00ed mezi testov\u00e1n\u00edmi. M\u016f\u017eete skute\u010dn\u011b j\u00edt a ov\u011b\u0159it. A bude to lep\u0161\u00ed, proto\u017ee zrychl\u00edme v\u00fdvoj. <\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>\n<p>Bude m\u00e9n\u011b refaktoringu. M\u00e9n\u011b chyb se dostane do produkce. M\u00e9n\u011b jich pak refaktorujeme. <\/p>\n<p>\n<\/li>\n<li>\n<p>M\u016f\u017eeme prov\u00e1d\u011bt nevratn\u00e9 zm\u011bny. To v standardn\u00edch p\u0159\u00edstupech chyb\u00ed. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<ol>\n<li>Je to v\u00fdhodn\u00e9, proto\u017ee sd\u00edl\u00edme zdroje testovac\u00edch prost\u0159ed\u00ed. <\/li>\n<\/ol>\n<p><\/p>\n<p>To je dobr\u00e9, ale co je\u0161t\u011b bychom mohli urychlit?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/d692f76b865c18ed4c178d1a1440774b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00edky tomuto syst\u00e9mu m\u016f\u017eeme v\u00fdznamn\u011b sn\u00ed\u017eit vstupn\u00ed pr\u00e1h pro takov\u00e9 testov\u00e1n\u00ed. <\/p>\n<p><\/p>\n<p>Existuje uzav\u0159en\u00fd kruh, kdy v\u00fdvoj\u00e1\u0159, aby z\u00edskal p\u0159\u00edstup k re\u00e1ln\u00fdm plnohodnotn\u00fdm dat\u016fm, mus\u00ed st\u00e1t se expertem. Mus\u00ed mu b\u00fdt d\u016fv\u011b\u0159ov\u00e1no s takov\u00fdm p\u0159\u00edstupem. <\/p>\n<p><\/p>\n<p>Ale jak r\u016fst, pokud to nen\u00ed? A co kdy\u017e m\u00e1\u0161 p\u0159\u00edstup pouze k velmi mal\u00e9mu setu testovac\u00edch dat? Pak nen\u00ed mo\u017en\u00e9 z\u00edskat skute\u010dnou zku\u0161enost. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/221f7b02294878aea1d0ebe6df5d9717.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jak se dostat z tohoto kruhu? Jako prvn\u00ed rozhran\u00ed, kter\u00e9 je pohodln\u00e9 pro v\u00fdvoj\u00e1\u0159e jak\u00e9koli \u00farovn\u011b, jsme zvolili Slack bota. Ale m\u016f\u017ee to b\u00fdt jak\u00e9koli jin\u00e9 rozhran\u00ed. <\/p>\n<p><\/p>\n<p>Co to umo\u017e\u0148uje? M\u016f\u017eete vz\u00edt konkr\u00e9tn\u00ed dotaz a poslat ho do speci\u00e1ln\u00edho kan\u00e1lu pro datab\u00e1zi. Automaticky b\u011bhem sekund rozvineme tenk\u00fd klon. Spust\u00edme tento dotaz. Shrom\u00e1\u017ed\u00edme metriky a doporu\u010den\u00ed. Uk\u00e1\u017eeme vizualizaci. A d\u00e1le tento klon z\u016fstane, aby bylo mo\u017en\u00e9 tento dotaz n\u011bjak optimalizovat, p\u0159idat indexy atd. <\/p>\n<p><\/p>\n<p>A tak\u00e9 n\u00e1m Slack d\u00e1v\u00e1 mo\u017enosti pro spolupr\u00e1ci p\u0159\u00edmo ze z\u00e1sobn\u00edku. Proto\u017ee to je prost\u011b kan\u00e1l, m\u016f\u017eeme tam p\u0159\u00edmo v threadu pro tento dotaz za\u010d\u00edt diskutovat, oslovit sv\u00e9 kolegy, DBA, kte\u0159\u00ed jsou uvnit\u0159 firmy. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/b4a6410b625107c5bbbf57c021159914.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ale existuj\u00ed samoz\u0159ejm\u011b i probl\u00e9my. Proto\u017ee je to re\u00e1ln\u00fd sv\u011bt a pou\u017e\u00edv\u00e1me server, na kter\u00e9m host\u00edme najednou v\u00edce klon\u016f, mus\u00edme omezit mno\u017estv\u00ed pam\u011bti a v\u00fdkonu CPU, kter\u00e9 jsou klon\u016fm k dispozici. <\/p>\n<p><\/p>\n<p>Ale abychom tyto testy byly v\u011brohodn\u00e9, je t\u0159eba n\u011bjak tuto problematiku vy\u0159e\u0161it. <\/p>\n<p><\/p>\n<p>Je jasn\u00e9, \u017ee d\u016fle\u017eit\u00fdm faktorem jsou shodn\u00e1 data. Ale ta u\u017e m\u00e1me. A chceme dos\u00e1hnout shodn\u00e9 konfigurace. A m\u016f\u017eeme tak prakticky obdobnou konfiguraci poskytnout. <\/p>\n<p><\/p>\n<p>Bylo by skv\u011bl\u00e9 m\u00edt stejn\u00fd hardware jako na produkci, ale m\u016f\u017ee se li\u0161it. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5efae55189175262d56a33b89c55ed29.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme si p\u0159ipomenout, jak PostgreSQL pracuje s pam\u011bt\u00ed. M\u00e1me dva cache. Jeden od souborov\u00e9ho syst\u00e9mu a jeden vlastn\u00ed PostgreSQL, tedy Shared Buffer Cache. <\/p>\n<p><\/p>\n<p>Je d\u016fle\u017eit\u00e9 poznamenat, \u017ee Shared Buffer Cache je alokov\u00e1no p\u0159i startu Postgres v z\u00e1vislosti na velikosti, kterou nastav\u00edte v konfiguraci. <\/p>\n<p><\/p>\n<p>A druh\u00fd cache pou\u017e\u00edv\u00e1 ve\u0161ker\u00fd dostupn\u00fd prostor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f1f3c85e786649f83d5c17e6724086a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A kdy\u017e d\u011bl\u00e1me n\u011bkolik klon\u016f na jednom stroji, postupn\u011b zapl\u0148ujeme pam\u011b\u0165. A ide\u00e1ln\u011b by Shared Buffer Cache m\u011blo b\u00fdt 25 % z celkov\u00e9ho objemu pam\u011bti dostupn\u00e9 na stroji. <\/p>\n<p><\/p>\n<p>A tak vych\u00e1z\u00ed, \u017ee pokud tento parametr nezm\u011bn\u00edme, m\u016f\u017eeme na jednom stroji spustit pouze 4 instance, tedy 4 takov\u00e9 tenk\u00e9 klony. A to je samoz\u0159ejm\u011b \u0161patn\u011b, proto\u017ee bychom je cht\u011bli m\u00edt mnohem v\u00edce. <\/p>\n<p><\/p>\n<p>Na druhou stranu, Buffer Cache se pou\u017e\u00edv\u00e1 pro vykon\u00e1v\u00e1n\u00ed dotaz\u016f, pro indexy, tedy pl\u00e1n z\u00e1vis\u00ed na tom, jak\u00e9 velikosti m\u00e1me cache. A pokud tento parametr jednodu\u0161e sn\u00ed\u017e\u00edme, pl\u00e1ny se mohou v\u00fdrazn\u011b zm\u011bnit.<\/p>\n<p><\/p>\n<p>Nap\u0159\u00edklad, pokud m\u00e1me na prod velk\u00e9 cache, Postgres bude p\u0159ednostn\u011b pou\u017e\u00edvat index. A pokud ne, pak dojde k SeqScan. A jak\u00fd by m\u011bl smysl, kdyby se na\u0161e pl\u00e1ny neshodovaly? <\/p>\n<p><\/p>\n<p>Ale zde se dost\u00e1v\u00e1me k \u0159e\u0161en\u00ed, \u017ee pl\u00e1n v Postgres ve skute\u010dnosti nez\u00e1vis\u00ed na konkr\u00e9tn\u00ed velikosti zadan\u00e9 v Shared Buffer, ale z\u00e1vis\u00ed na effective_cache_size.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (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 p\u0159edpokl\u00e1dan\u00fd objem cache, kter\u00fd m\u00e1me k dispozici, tedy sou\u010det Buffer Cache a cache souborov\u00e9ho syst\u00e9mu. To je nastaveno v konfiguraci. A tato pam\u011b\u0165 nen\u00ed alokov\u00e1na. <\/p>\n<p><\/p>\n<p>A d\u00edky tomuto parametru m\u016f\u017eeme jakoby oklamat Postgres t\u00edm, \u017ee mu \u0159ekneme, \u017ee m\u00e1me k dispozici spoustu dat, i kdy\u017e tato data nem\u00e1me. Tak\u017ee pl\u00e1ny budou pln\u011b odpov\u00eddat produkci. <\/p>\n<p><\/p>\n<p>Ale to m\u016f\u017ee ovlivnit \u010dasov\u00e1n\u00ed. A optimalizujeme dotazy podle \u010dasov\u00e1n\u00ed, ale je d\u016fle\u017eit\u00e9, \u017ee \u010dasov\u00e1n\u00ed z\u00e1vis\u00ed na mnoha faktorech: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Z\u00e1vis\u00ed na tom zat\u00ed\u017een\u00ed, kter\u00e9 moment\u00e1ln\u011b existuje na produ. <\/p>\n<p>\n<\/li>\n<li>\n<p>Z\u00e1vis\u00ed na charakteristik\u00e1ch samotn\u00e9ho stroje. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>A to je nep\u0159\u00edm\u00fd parametr, ale ve skute\u010dnosti m\u016f\u017eeme optimalizovat pr\u00e1v\u011b podle mno\u017estv\u00ed dat, kter\u00e9 tento dotaz p\u0159e\u010dte, abychom z\u00edskali v\u00fdsledek. <\/p>\n<p><\/p>\n<p>A pokud chceme, aby \u010dasov\u00e1n\u00ed bylo co nejbl\u00ed\u017ee tomu, co uvid\u00edme v produkci, mus\u00edme vz\u00edt co nejpodobn\u011bj\u0161\u00ed hardware a mo\u017en\u00e1 dokonce v\u00edc, aby se v\u0161echny klony ve\u0161ly. Ale to je kompromis, tzn. dostanete stejn\u00e9 pl\u00e1ny, uvid\u00edte, kolik dat konkr\u00e9tn\u00ed dotaz p\u0159e\u010dte, a budete moci u\u010dinit z\u00e1v\u011br \u2013 zda je dotaz dobr\u00fd (nebo migrace), nebo \u0161patn\u00fd, a je t\u0159eba ho je\u0161t\u011b optimalizovat. <\/p>\n<p><\/p>\n<p>Poj\u010fme si podrobn\u011bji rozebrat, jak prob\u00edh\u00e1 optimalizace s Joem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/26c892a0b2d417f9806cfb77d2ea47f6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vezmeme si dotaz z re\u00e1ln\u00e9ho syst\u00e9mu. V tomto p\u0159\u00edpad\u011b datab\u00e1ze m\u00e1 1 terabajt. A chceme spo\u010d\u00edtat po\u010det nov\u00fdch p\u0159\u00edsp\u011bvk\u016f, kter\u00e9 m\u011bly v\u00edce ne\u017e 10 lajk\u016f. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (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 zpr\u00e1vu do kan\u00e1lu, pro n\u00e1s se rozb\u011bhne klon. A uvid\u00edme, \u017ee takov\u00fd dotaz se zpracuje za 2,5 minuty. To je prvn\u00ed, co si v\u0161imneme.<\/p>\n<p><\/p>\n<p>Joe uk\u00e1\u017ee automatick\u00e1 doporu\u010den\u00ed na z\u00e1klad\u011b pl\u00e1nu a metrik. <\/p>\n<p><\/p>\n<p>Uvid\u00edme, \u017ee dotaz zpracov\u00e1v\u00e1 p\u0159\u00edli\u0161 mnoho dat, aby z\u00edskal relativn\u011b mal\u00e9 mno\u017estv\u00ed \u0159\u00e1dk\u016f. A pot\u0159ebujeme n\u011bjak\u00fd specializovan\u00fd index, proto\u017ee jsme si v\u0161imli, \u017ee v dotazu je p\u0159\u00edli\u0161 mnoho filtrovan\u00fdch \u0159\u00e1dk\u016f. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7f40e41314ebc682a1a64a2958dec16c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme se pod\u00edvat podrobn\u011bji, co se stalo. Opravdu vid\u00edme, \u017ee jsme p\u0159e\u010detli t\u00e9m\u011b\u0159 1,5 gigabytu dat z filesov\u00e9ho cache nebo dokonce z disku. A to nen\u00ed dobr\u00e9, proto\u017ee jsme z\u00edskali pouze 142 \u0159\u00e1dk\u016f. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/30aaff5da2536fa27efc6591f645d6f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A zd\u00e1lo by se, \u017ee zde m\u00e1me index scan a m\u011blo to rychle fungovat, ale proto\u017ee jsme filtrovali p\u0159\u00edli\u0161 mnoho \u0159\u00e1dk\u016f (museli jsme je po\u010d\u00edtat), dotaz se zpracoval pomalu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/40958fbc04d4eb738f6a16488647bd8c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A k tomu do\u0161lo v pl\u00e1nu, proto\u017ee \u010d\u00e1ste\u010dn\u011b nesouhlas\u00ed podm\u00ednky v dotazu a podm\u00ednky v indexu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/196ca5116e641c72bc1009e97c390bc7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poj\u010fme se pokusit vytvo\u0159it index p\u0159esn\u011bji a pod\u00edvejme se, jak se zm\u011bn\u00ed v\u00fdkon dotazu po tomto. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/646a73964f0b6d3615eedb8acb3aa216.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vytvo\u0159en\u00ed indexu trvalo dost dlouho, ale nyn\u00ed kontrolujeme dotaz a vid\u00edme, \u017ee \u010das m\u00edsto 2,5 minuty se sn\u00ed\u017eil na pouh\u00fdch 156 milisekund, co\u017e je docela dobr\u00e9. A \u010dteme pouze 6 megabajt\u016f dat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5cce2d6ecf2314c0575c0fed107f6d5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A nyn\u00ed pou\u017e\u00edv\u00e1me index only scan.<\/p>\n<p><\/p>\n<p>Dal\u0161\u00ed d\u016fle\u017eitou z\u00e1le\u017eitost\u00ed je, \u017ee chceme pl\u00e1n p\u0159edstavit n\u011bjak\u00fdm srozumiteln\u011bj\u0161\u00edm zp\u016fsobem. U n\u00e1s jsme implementovali vizualizaci pomoc\u00ed Flame Graphs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f4f545bfbf52fd66b6cbe45e1d6d0b6c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To je jin\u00fd dotaz, bohat\u0161\u00ed. A Flame Graphs vytv\u00e1\u0159\u00edme na z\u00e1klad\u011b dvou parametr\u016f: mno\u017estv\u00ed dat, kter\u00e9 konkr\u00e9tn\u00ed uzel v pl\u00e1nu p\u0159e\u010detl, a \u010dasov\u00e1n\u00ed, tzn. \u010das vykon\u00e1n\u00ed uzlu. <\/p>\n<p><\/p>\n<p>Zde m\u016f\u017eeme porovn\u00e1vat konkr\u00e9tn\u011b uzly mezi sebou. Bude jasn\u00e9, kter\u00fd z nich zab\u00edr\u00e1 v\u00edce nebo m\u00e9n\u011b m\u00edsta, co\u017e b\u00fdv\u00e1 obvykle slo\u017eit\u00e9 realizovat jin\u00fdmi zp\u016fsoby vizualizace. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/c477d2f32241c69eb0b38ef45ff4708b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samoz\u0159ejm\u011b, v\u0161ichni znaj\u00ed explain.depesz.com. Dobrou funkc\u00ed t\u00e9to vizualizace je, \u017ee uchov\u00e1v\u00e1me textov\u00fd pl\u00e1n a tak\u00e9 vytrh\u00e1v\u00e1me n\u011bkter\u00e9 hlavn\u00ed parametry do tabulky, abychom je mohli se\u0159adit. <\/p>\n<p><\/p>\n<p>A v\u00fdvoj\u00e1\u0159i, kte\u0159\u00ed se do t\u00e9to problematiky je\u0161t\u011b hloub\u011bji nepou\u0161t\u011bli, tak\u00e9 vyu\u017e\u00edvaj\u00ed explain.depesz.com, proto\u017ee je pro n\u011b jednodu\u0161\u0161\u00ed pochopit, kter\u00e9 metriky jsou d\u016fle\u017eit\u00e9, a kter\u00e9 nikoli. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (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 p\u0159\u00edstup k vizualizaci \u2013 explain.dalibo.com. D\u011blaj\u00ed stromovou vizualizaci, ale zde je velmi t\u011b\u017ek\u00e9 porovn\u00e1vat uzly mezi sebou. Dob\u0159e lze pochopit strukturu, ale pokud bude velk\u00fd dotaz, bude nutn\u00e9 scrollovat tam a zp\u011bt, ale tak\u00e9 je to mo\u017enost. <\/p>\n<p><\/p>\n<h2 id=\"kollaboraciya\">Kolaborace<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7101c0b95eafed8fd9305a4630399e3b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A jak jsem ji\u017e \u0159ekl, Slack n\u00e1m umo\u017e\u0148uje kolaboraci. Nap\u0159\u00edklad, pokud jsme narazili na slo\u017eit\u00fd dotaz, kter\u00fd nen\u00ed jasn\u00e9, jak optimalizovat, m\u016f\u017eeme tento probl\u00e9m up\u0159esnit v threadu ve Slacku se sv\u00fdmi kolegy. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatolij Stancler (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\u016fle\u017eit\u00e9 testovat na pln\u00fdch datech. K tomu jsme vytvo\u0159ili n\u00e1stroj Update Database Lab, kter\u00fd je dostupn\u00fd jako open source. M\u016f\u017eete tak\u00e9 pou\u017e\u00edvat bota Joe. M\u016f\u017eete si ho vz\u00edt hned te\u010f a implementovat u sebe. V\u0161echny n\u00e1vody jsou tam dostupn\u00e9. <\/p>\n<p><\/p>\n<p>Je tak\u00e9 d\u016fle\u017eit\u00e9 poznamenat, \u017ee samotn\u00e9 \u0159e\u0161en\u00ed nen\u00ed ni\u010d\u00edm revolu\u010dn\u00edm, proto\u017ee existuje Delphix, ale to je enterprise \u0159e\u0161en\u00ed. Je to zcela uzav\u0159en\u00e9 a velmi drah\u00e9. My se specializujeme na Postgres. Tohle v\u0161echno jsou produkty open source. P\u0159ipojte se k n\u00e1m! <\/p>\n<p><\/p>\n<p>T\u00edmto kon\u010d\u00edm. D\u011bkuji!<\/p>\n<p><\/p>\n<h2 id=\"voprosy\">Ot\u00e1zky<\/h2>\n<p><\/p>\n<p><em>Dobr\u00fd den! D\u011bkuji za prezentaci! Velmi zaj\u00edmav\u00e9, zejm\u00e9na pro m\u011b, proto\u017ee jsem podobn\u00fd probl\u00e9m \u0159e\u0161il p\u0159ed n\u011bjak\u00fdm \u010dasem. A proto m\u00e1m celou \u0159adu ot\u00e1zek. Douf\u00e1m, \u017ee se mi poda\u0159\u00ed alespo\u0148 \u010d\u00e1st z nich polo\u017eit.<\/em><\/p>\n<p><\/p>\n<p><em>Zaj\u00edmalo by m\u011b, jak po\u010d\u00edt\u00e1te m\u00edsto pro toto prost\u0159ed\u00ed? Technologie p\u0159edpokl\u00e1d\u00e1, \u017ee za ur\u010dit\u00fdch okolnost\u00ed mohou va\u0161e klony vyr\u016fst na maxim\u00e1ln\u00ed velikost. Zjednodu\u0161en\u011b \u0159e\u010deno, pokud m\u00e1te deseterabajtovou datab\u00e1zi a 10 klon\u016f, je snadn\u00e9 modelovat situaci, kdy ka\u017ed\u00fd klon bude m\u00edt 10 unik\u00e1tn\u00edch dat. Jak po\u010d\u00edt\u00e1te toto m\u00edsto, tedy tu deltu, o kter\u00e9 jste mluvili, ve kter\u00e9 budou tyto klony \u017e\u00edt?<\/em><\/p>\n<p><\/p>\n<p>Dobr\u00e1 ot\u00e1zka. Tady je d\u016fle\u017eit\u00e9 sledovat konkr\u00e9tn\u00ed klony. A pokud n\u011bjak\u00fd klon ud\u011bl\u00e1 p\u0159\u00edli\u0161 velkou zm\u011bnu a za\u010dne r\u016fst, m\u016f\u017eeme nejprve u\u017eivatele varovat, nebo okam\u017eit\u011b tento klon zastavit, abychom se vyhnuli fail-situaci. <\/p>\n<p><\/p>\n<p><em>Ano, m\u00e1m na to dopl\u0148uj\u00edc\u00ed ot\u00e1zku. Tedy, jak zaji\u0161\u0165ujete \u017eivotn\u00ed cyklus t\u011bchto modul\u016f? U n\u00e1s je to probl\u00e9m a cel\u00e1 samostatn\u00e1 kapitola. Jak se to d\u011bje?<\/em><\/p>\n<p><\/p>\n<p>Ka\u017ed\u00fd klon m\u00e1 n\u011bjakou dobu TTL. V z\u00e1sad\u011b m\u00e1me pevn\u011b stanoven\u00e9 TTL. <\/p>\n<p><\/p>\n<p><em>Jak\u00e9, pokud to nen\u00ed tajn\u00e9?<\/em><\/p>\n<p><\/p>\n<p>1 hodina, tedy idle \u2013 1 hodina. Pokud se nepou\u017e\u00edv\u00e1, tak ho zru\u0161\u00edme. Ale tady \u017e\u00e1dn\u00e9 p\u0159ekvapen\u00ed nen\u00ed, proto\u017ee klon m\u016f\u017eeme spustit b\u011bhem sekund. A pokud ho budeme pot\u0159ebovat znovu, tak \u2013 pros\u00edm. <\/p>\n<p><\/p>\n<p><em>Zaj\u00edm\u00e1 m\u011b tak\u00e9 volba technologi\u00ed, proto\u017ee my nap\u0159\u00edklad paraleln\u011b pou\u017e\u00edv\u00e1me n\u011bkolik metod z r\u016fzn\u00fdch d\u016fvod\u016f. Pro\u010d pr\u00e1v\u011b ZFS? Pro\u010d jste nepou\u017eili LVM? Zm\u00ednili jste, \u017ee s LVM byly probl\u00e9my. Jak\u00e9 to byly probl\u00e9my? Podle m\u011b je nejoptim\u00e1ln\u011bj\u0161\u00edm \u0159e\u0161en\u00edm mo\u017enost s SAN z hlediska v\u00fdkonu.<\/em> <\/p>\n<p><\/p>\n<p><em>Jak\u00fd je hlavn\u00ed probl\u00e9m se ZFS? V tom, \u017ee mus\u00edte b\u011b\u017eet na jednom hostiteli, tedy v\u0161echny instance budou \u017e\u00edt v r\u00e1mci jednoho opera\u010dn\u00edho syst\u00e9mu. A v p\u0159\u00edpad\u011b SAN m\u016f\u017eete p\u0159ipojovat r\u016fzn\u00e1 za\u0159\u00edzen\u00ed. A \u00fazk\u00fdm hrdlem jsou pouze ty bloky, kter\u00e9 jsou na SAN. A ot\u00e1zka v\u00fdb\u011bru technologi\u00ed je velmi zaj\u00edmav\u00e1. Pro\u010d ne LVM?<\/em><\/p>\n<p><\/p>\n<p>O LVM m\u016f\u017eeme konkr\u00e9tn\u011b diskutovat na meetupu. Co se t\u00fd\u010de SAN, to je jednodu\u0161e drah\u00e9. Syst\u00e9m ZFS m\u016f\u017eeme implementovat kdekoli. M\u016f\u017eete si ji rozb\u011bhnout na sv\u00e9m stroji. M\u016f\u017eete si jednodu\u0161e st\u00e1hnout repozit\u00e1\u0159 a nasadit ji. ZFS se instaluje prakticky v\u0161ude, pokud mluv\u00edme o Linuxu. Tedy dost\u00e1v\u00e1me velmi flexibiln\u00ed \u0159e\u0161en\u00ed. A ZFS s\u00e1m o sob\u011b nab\u00edz\u00ed mnoho mo\u017enost\u00ed. M\u016f\u017eete nahr\u00e1vat tolik dat, kolik chcete, p\u0159ipojit velk\u00e9 mno\u017estv\u00ed disk\u016f, jsou tu snapshoty. A jak jsem u\u017e zm\u00ednil, je to snadn\u00e9 na administraci. Tedy se zd\u00e1 b\u00fdt velmi p\u0159\u00edjemn\u00e9 na pou\u017e\u00edv\u00e1n\u00ed. Je to osv\u011bd\u010den\u00e9, m\u00e1 dlouhou historii. M\u00e1 velmi velkou komunitu, kter\u00e1 roste. ZFS je velmi spolehliv\u00e9 \u0159e\u0161en\u00ed. <\/p>\n<p><\/p>\n<p>Nikolaj Samokhvalov: Mohu to je\u0161t\u011b okomentovat? Jmenuji se Nikolaj, spolupracuji s Anatolijem. Souhlas\u00edm, \u017ee SAN je skv\u011bl\u00fd. A n\u011bkte\u0159\u00ed na\u0161i klienti maj\u00ed Pure Storage a podobn\u011b. <\/p>\n<p><\/p>\n<p>Anatolij spr\u00e1vn\u011b poznamenal, \u017ee se zam\u011b\u0159ujeme na modularitu. A v budoucnu bychom mohli realizovat jedin\u00e9 rozhran\u00ed \u2013 vytvo\u0159te snapshot, vytvo\u0159te klon, zni\u010dte klon. To v\u0161e je snadn\u00e9. A \u00falo\u017en\u00e9 syst\u00e9my jsou skv\u011bl\u00e9, pokud jsou k dispozici.<\/p>\n<p><\/p>\n<p>Ale ZFS je dostupn\u00e9 pro ka\u017ed\u00e9ho. U\u017e je dost Delphix, maj\u00ed 300 z\u00e1kazn\u00edk\u016f. Z toho v Fortune 100 \u2013 50 z\u00e1kazn\u00edk\u016f, tj. zam\u011b\u0159uj\u00ed se na NASA atd. Je na\u010dase, aby tuto technologii m\u011bli v\u0161ichni. A proto m\u00e1me open source Core. M\u00e1me \u010d\u00e1st rozhran\u00ed, kter\u00e1 nen\u00ed open source. To je platforma, kterou p\u0159edvedeme. Ale chceme, aby to bylo dostupn\u00e9 ka\u017ed\u00e9mu. Chceme ud\u011blat revoluci, aby v\u0161ichni testova\u010di p\u0159estali h\u00e1dat na notebooc\u00edch. Mus\u00edme ps\u00e1t SELECT a okam\u017eit\u011b vid\u011bt, \u017ee je pomal\u00fd. U\u017e nen\u00ed \u010das \u010dekat, a\u017e o tom DBA pov\u00ed. To je hlavn\u00ed c\u00edl. A mysl\u00edm, \u017ee k tomu v\u0161ichni dojdeme. A tohle d\u011bl\u00e1me, aby to m\u011bli v\u0161ichni. Proto ZFS, proto\u017ee bude dostupn\u00e9 v\u0161ude. D\u011bkujeme komunit\u011b za \u0159e\u0161en\u00ed probl\u00e9m\u016f a za to, \u017ee tam je open source licence atd. <\/p>\n<p><\/p>\n<p><em>Dobr\u00fd den! D\u011bkuji za prezentaci! Jmenuji se Maxim. \u0158e\u0161ili jsme stejn\u00e9 probl\u00e9my. U n\u00e1s jsme to vy\u0159e\u0161ili. Jak rozd\u011blujete zdroje mezi t\u011bmito klony? Ka\u017ed\u00fd klon m\u016f\u017ee v ka\u017ed\u00e9m okam\u017eiku \u0159e\u0161it sv\u00e9 vlastn\u00ed \u00fakoly: jeden testuje n\u011bco jin\u00e9ho, druh\u00fd n\u011bco jin\u00e9ho, n\u011bkdo buduje index, jin\u00fd m\u00e1 t\u011b\u017ekou job. Pokud jde o CPU, to se je\u0161t\u011b d\u00e1 rozd\u011blit, ale jak to d\u011bl\u00e1te s IO?<\/em><\/p>\n<p><\/p>\n<p><em>A druh\u00e1 ot\u00e1zka o odli\u0161nosti prost\u0159ed\u00ed. P\u0159edstavme si, \u017ee tady m\u00e1m ZFS a v\u0161echno je skv\u011bl\u00e9, ale u klienta na production nen\u00ed ZFS, ale nap\u0159\u00edklad ext4. Jak v tomto p\u0159\u00edpad\u011b?<\/em><\/p>\n<p><\/p>\n<p>Ot\u00e1zky jsou velmi dobr\u00e9. Trochu jsem zm\u00ednil tento probl\u00e9m s t\u00edm, \u017ee rozd\u011blujeme zdroje. A \u0159e\u0161en\u00ed spo\u010d\u00edv\u00e1 v n\u00e1sleduj\u00edc\u00edm. P\u0159edstavte si, \u017ee testujete na stagingu. M\u016f\u017ee se st\u00e1t, \u017ee n\u011bkdo d\u00e1v\u00e1 jednu z\u00e1t\u011b\u017e a n\u011bkdo jin\u00fd druhou. A nakonec vid\u00edte nejasn\u00e9 metriky. Stejn\u00fd probl\u00e9m se m\u016f\u017ee st\u00e1t s produkc\u00ed. Kdy\u017e chcete ov\u011b\u0159it n\u011bjak\u00fd dotaz a vid\u00edte, \u017ee s n\u00edm je n\u011bjak\u00fd probl\u00e9m \u2013 je pomal\u00fd, tak ve skute\u010dnosti probl\u00e9m nebyl v dotazu, ale v tom, \u017ee byla n\u011bjak\u00e1 paraleln\u00ed z\u00e1t\u011b\u017e. <\/p>\n<p><\/p>\n<p>A proto je d\u016fle\u017eit\u00e9 zam\u011b\u0159it se na to, jak\u00fd bude pl\u00e1n, jak\u00fdmi kroky se v pl\u00e1nu vyd\u00e1me a kolik dat pro to shrom\u00e1\u017ed\u00edme. To, \u017ee m\u00e1me disky nap\u0159\u00edklad zat\u00ed\u017een\u00e9 n\u011b\u010d\u00edm, ovlivn\u00ed konkr\u00e9tn\u011b \u010dasov\u00e1n\u00ed. Ale podle mno\u017estv\u00ed dat m\u016f\u017eeme posoudit, jak n\u00e1ro\u010dn\u00fd je tento dotaz. Nen\u00ed tak d\u016fle\u017eit\u00e9, \u017ee z\u00e1rove\u0148 bude i n\u011bjak\u00e9 prov\u00e1d\u011bn\u00ed. <\/p>\n<p><\/p>\n<p><em>M\u00e1m dv\u011b ot\u00e1zky. Tohle je opravdu skv\u011bl\u00e1 v\u011bc. Byly n\u011bjak\u00e9 p\u0159\u00edpady, kdy byly na produkci data kriticky d\u016fle\u017eit\u00e1, nap\u0159\u00edklad \u010d\u00edsla kreditn\u00edch karet? Je u\u017e n\u011bco hotov\u00e9ho, nebo je to samostatn\u00fd \u00fakol? A druh\u00e1 ot\u00e1zka \u2013 existuje n\u011bco takov\u00e9ho pro MySQL?<\/em><\/p>\n<p><\/p>\n<p>Co se t\u00fd\u010de dat. Budeme prov\u00e1d\u011bt obfuscaci, i kdy\u017e to nyn\u00ed ned\u011bl\u00e1me. Ale pokud nasazujete konkr\u00e9tn\u011b Joe, pokud ned\u00e1te p\u0159\u00edstup v\u00fdvoj\u00e1\u0159\u016fm, tak k dat\u016fm p\u0159\u00edstup nen\u00ed. Pro\u010d? Proto\u017ee Joe nezobrazuje data. Zobrazuje pouze metriky, pl\u00e1ny a v\u0161echno. To bylo ud\u011bl\u00e1no z\u00e1m\u011brn\u011b, proto\u017ee je to jedno z po\u017eadavk\u016f na\u0161eho klienta. Cht\u011bli m\u00edt mo\u017enost optimalizovat, ale z\u00e1rove\u0148 ned\u00e1vat p\u0159\u00edstup ka\u017ed\u00e9mu. <\/p>\n<p><\/p>\n<p>Pokud jde o MySQL. Tento syst\u00e9m lze pou\u017e\u00edt pro cokoliv, co uchov\u00e1v\u00e1 stav na disku. A proto\u017ee se zab\u00fdv\u00e1me Postgres, nyn\u00ed p\u0159edev\u0161\u00edm vytv\u00e1\u0159\u00edme plnou automatizaci pro Postgres. Chceme automatizovat z\u00edsk\u00e1v\u00e1n\u00ed dat z z\u00e1lohy. Spr\u00e1vn\u011b konfigurujeme Postgres. V\u00edme, jak zajistit, aby pl\u00e1ny odpov\u00eddaly atd. <\/p>\n<p><\/p>\n<p>Ale vzhledem k tomu, \u017ee je syst\u00e9m roz\u0161i\u0159iteln\u00fd, bude ho mo\u017en\u00e9 pou\u017e\u00edt tak\u00e9 pro MySQL. A takov\u00e9 p\u0159\u00edklady existuj\u00ed. Podobn\u00e1 v\u011bc existuje u Yandexu, ale nikde ji nezve\u0159ej\u0148uj\u00ed. Pou\u017e\u00edvaj\u00ed ji uvnit\u0159 Yandex.Metriky. A tam je to pr\u00e1v\u011b o MySQL. Ale technologie jsou stejn\u00e9, ZFS. <\/p>\n<p><\/p>\n<p><em>D\u011bkuji za p\u0159edn\u00e1\u0161ku! M\u00e1m tak\u00e9 p\u00e1r ot\u00e1zek. Zm\u00ednil jste, \u017ee klonov\u00e1n\u00ed lze pou\u017e\u00edt pro analytiku, nap\u0159\u00edklad k vytv\u00e1\u0159en\u00ed dodate\u010dn\u00fdch index\u016f. M\u016f\u017eete trochu podrobn\u011bji vysv\u011btlit, jak to funguje?<\/em><\/p>\n<p><\/p>\n<p><em>A druhou ot\u00e1zku polo\u017e\u00edm hned ohledn\u011b shodnosti stanic, shodnosti pl\u00e1n\u016f. Pl\u00e1n z\u00e1vis\u00ed tak\u00e9 na statistik\u00e1ch shrom\u00e1\u017ed\u011bn\u00fdch Postgres. Jak tuto problematiku \u0159e\u0161\u00edte?<\/em><\/p>\n<p><\/p>\n<p>V anal\u00fdze konkr\u00e9tn\u00edch p\u0159\u00edpad\u016f nejsou \u017e\u00e1dn\u00e9 informace, proto\u017ee jsme je dosud nepou\u017e\u00edvali, ale tato mo\u017enost existuje. Pokud hovo\u0159\u00edme o indexech, p\u0159edstavte si, \u017ee se spou\u0161t\u00ed dotaz na tabulku s stovkami milion\u016f z\u00e1znam\u016f a na sloupec, kter\u00fd obvykle nen\u00ed v produkci indexov\u00e1n. A my chceme n\u011bco spo\u010d\u00edtat. Pokud se tento dotaz provede na produkci, existuje mo\u017enost, \u017ee dojde k v\u00fdpadku, proto\u017ee dotaz tam bude zpracov\u00e1vat minutu. <\/p>\n<p><\/p>\n<p>Dob\u0159e, ud\u011blejme tenk\u00fd klon, kter\u00fd se neboj\u00edme zastavit na n\u011bkolik minut. A pro to, aby bylo pohodln\u011bj\u0161\u00ed prov\u00e1d\u011bt anal\u00fdzu, p\u0159id\u00e1me indexy na ty sloupce, o kter\u00e9 m\u00e1me z\u00e1jem. <\/p>\n<p><\/p>\n<p><em>Bude se index ka\u017ed\u00fdkr\u00e1t vytv\u00e1\u0159et?<\/em><\/p>\n<p><\/p>\n<p>M\u016f\u017eeme ud\u011blat to, \u017ee se dotknete dat, ud\u011bl\u00e1me snapshoty, pak se z tohoto snapshotu budeme obnovovat a spou\u0161t\u011bt nov\u00e9 dotazy. T. j. lze to ud\u011blat tak, \u017ee se poda\u0159\u00ed spou\u0161t\u011bt nov\u00e9 klony ji\u017e s nastaven\u00fdmi indexy.<\/p>\n<p><\/p>\n<p>Pokud jde o ot\u00e1zku ohledn\u011b statistiky, pokud se obnovujeme z z\u00e1lohy, pokud d\u011bl\u00e1me replikaci, tak na\u0161e statistika bude p\u0159esn\u011b stejn\u00e1. Proto\u017ee m\u00e1me naprosto celou fyzickou strukturu dat, t. j. p\u0159eneseme i data s ve\u0161ker\u00fdmi metrikami statistiky. <\/p>\n<p><\/p>\n<p>Tady je jin\u00fd probl\u00e9m. Pokud pou\u017e\u00edv\u00e1te cloudov\u00e9 \u0159e\u0161en\u00ed, pak jsou dostupn\u00e9 pouze logick\u00e9 z\u00e1lohy, proto\u017ee Google, Amazon ned\u00e1vaj\u00ed mo\u017enost vz\u00edt fyzickou kopii. To bude probl\u00e9m. <\/p>\n<p><\/p>\n<p><em>D\u011bkuji za prezentaci. Zde zazn\u011bly dv\u011b dobr\u00e9 ot\u00e1zky ohledn\u011b MySQL a rozd\u011blen\u00ed zdroj\u016f. Ale vlastn\u011b to v\u0161echno sm\u011b\u0159uje k tomu, \u017ee se jedn\u00e1 o t\u00e9ma nikoli konkr\u00e9tn\u00edch datab\u00e1zov\u00fdch syst\u00e9m\u016f, ale obecn\u011b souborov\u00e9ho syst\u00e9mu. A tedy ot\u00e1zky rozd\u011blen\u00ed zdroj\u016f by m\u011bly b\u00fdt tak\u00e9 \u0159e\u0161eny odtud, nejen na konci, \u017ee to je Postgres, ale v souborov\u00e9m syst\u00e9mu, v <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/cs\/server\/dts-dronten\/\"   title=\"serveru\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2602\">serveru<\/a>, v instance.<\/em> <\/p>\n<p><\/p>\n<p><em>M\u016fj dotaz je o n\u011b\u010dem jin\u00e9m. Je bl\u00ed\u017ee v\u00edcestup\u0148ovosti datab\u00e1ze, kde je n\u011bkolik vrstev. Nap\u0159\u00edklad jsme nastavili aktualizaci desetiterabytov\u00e9ho obrazu, prob\u00edh\u00e1 n\u00e1m replikace. A my konkr\u00e9tn\u011b pou\u017e\u00edv\u00e1me toto \u0159e\u0161en\u00ed pro datab\u00e1ze. Prob\u00edh\u00e1 replikace a aktualizace dat. Zde paraleln\u011b pracuje 100 zam\u011bstnanc\u016f, kte\u0159\u00ed neust\u00e1le spou\u0161t\u011bj\u00ed tyto r\u016fzn\u00e9 snapshoty. Co d\u011blat? Jak zajistit, aby nedo\u0161lo ke konfliktu, \u017ee spustili jedno a pak se souborov\u00fd syst\u00e9m zm\u011bnil, a tyto snapshoty se v\u0161echny pokazily?<\/em> <\/p>\n<p><\/p>\n<p>Neodjedou, proto\u017ee tak ZFS funguje. M\u016f\u017eeme udr\u017eovat odd\u011blen\u011b v jednom vl\u00e1kn\u011b zm\u011bny souborov\u00e9ho syst\u00e9mu, kter\u00e9 p\u0159ich\u00e1zej\u00ed d\u00edky replikaci. A dr\u017eet klony na star\u00fdch verz\u00edch dat, kter\u00e9 pou\u017e\u00edvaj\u00ed v\u00fdvoj\u00e1\u0159i. A to n\u00e1m funguje, s t\u00edm je v\u0161e v po\u0159\u00e1dku.<\/p>\n<p><\/p>\n<p><em>Tak\u017ee aktualizace prob\u011bhne jako dal\u0161\u00ed vrstva, a v\u0161echny nov\u00e9 sn\u00edmky budou vych\u00e1zet z t\u00e9to vrstvy, \u017ee?<\/em> <\/p>\n<p><\/p>\n<p>Z p\u0159edchoz\u00edch vrstev, kter\u00e9 byly z p\u0159edchoz\u00edch replikac\u00ed. <\/p>\n<p><\/p>\n<p><em>P\u0159edchoz\u00ed vrstvy odpadnou, ale budou odkazovat na starou vrstvu, a nov\u00e9 obrazy budou br\u00e1t z posledn\u00ed vrstvy, kter\u00e1 byla z\u00edsk\u00e1na v aktualizaci?<\/em><\/p>\n<p><\/p>\n<p>Obecn\u011b \u0159e\u010deno, ano. <\/p>\n<p><\/p>\n<p><em>Tak\u017ee jako d\u016fsledek budeme m\u00edt spoustu vrstev. A v pr\u016fb\u011bhu \u010dasu je budeme muset zhu\u0161\u0165ovat?<\/em><\/p>\n<p><\/p>\n<p>Ano, p\u0159esn\u011b tak. Existuje n\u011bjak\u00e9 okno. Udr\u017eujeme t\u00fddenn\u00ed sn\u00edmky. To z\u00e1le\u017e\u00ed na tom, jak\u00fd m\u00e1te zdroj. Pokud m\u00e1te mo\u017enost uchov\u00e1vat mnoho dat, m\u016f\u017eete uchov\u00e1vat sn\u00edmky po dlouhou dobu. Ty se samy neodstran\u00ed. Nebude \u017e\u00e1dn\u00e1 corrupt data. Pokud sn\u00edmky zest\u00e1rnou, jak se n\u00e1m zd\u00e1, tj. to z\u00e1le\u017e\u00ed na politice firmy, m\u016f\u017eeme je prost\u011b smazat a uvolnit m\u00edsto. <\/p>\n<p><\/p>\n<p><em>Dobr\u00fd den, d\u011bkuji za prezentaci! K ot\u00e1zce Joea: \u0158\u00edkali jste, \u017ee zak\u00e1zn\u00edk necht\u011bl d\u00e1t p\u0159\u00edstup v\u0161em k dat\u016fm. P\u0159\u00edsn\u011b vzato, pokud m\u00e1 \u010dlov\u011bk v\u00fdsledek Explain Analyze, m\u016f\u017ee data nahl\u00e9dnout.<\/em> <\/p>\n<p><\/p>\n<p>Ano, p\u0159esn\u011b tak. Nap\u0159\u00edklad m\u016f\u017eeme napsat: \u201eSELECT FROM WHERE email = n\u011bkdo\u201c. Tj. neuvid\u00edme samotn\u00e1 data, ale n\u011bjak\u00e9 nep\u0159\u00edm\u00e9 znaky m\u016f\u017eeme vid\u011bt. To je t\u0159eba si uv\u011bdomit. Ale na druhou stranu je to v\u0161echno viditeln\u00e9. M\u00e1me audit log\u016f, m\u00e1me kontrolu od ostatn\u00edch koleg\u016f, kte\u0159\u00ed tak\u00e9 vid\u00ed, \u010d\u00edm se v\u00fdvoj\u00e1\u0159i zab\u00fdvaj\u00ed. A pokud se n\u011bkdo pokus\u00ed n\u011bco takov\u00e9ho ud\u011blat, p\u0159ijde za n\u00edm bezpe\u010dnostn\u00ed slu\u017eba a vy\u0159e\u0161\u00ed to. <\/p>\n<p><\/p>\n<p><em>Dobr\u00fd den! D\u011bkuji za prezentaci! M\u00e1m kr\u00e1tkou ot\u00e1zku. Pokud se ve firm\u011b nepou\u017e\u00edv\u00e1 Slack, existuje k n\u011bmu n\u011bjak\u00e9 propojen\u00ed, nebo m\u016f\u017eeme pro v\u00fdvoj\u00e1\u0159e nasadit instance, abychom p\u0159ipojili testovac\u00ed aplikaci k datab\u00e1z\u00edm?<\/em><\/p>\n<p><\/p>\n<p>V sou\u010dasnosti m\u00e1me propojen\u00ed se Slackem, tedy neexistuje \u017e\u00e1dn\u00fd jin\u00fd messenger, ale r\u00e1di bychom podpo\u0159ili i dal\u0161\u00ed messengery. Co m\u016f\u017eete ud\u011blat? M\u016f\u017eete si rozjet DB Lab bez Joe, pou\u017e\u00edvat REST API nebo na\u0161i platformu a vytv\u00e1\u0159et klony a p\u0159ipojovat se pomoc\u00ed PSQL. Ale to lze ud\u011blat pouze pokud jste ochotni poskytnout sv\u00fdm v\u00fdvoj\u00e1\u0159\u016fm p\u0159\u00edstup k dat\u016fm, proto\u017ee zde u\u017e \u017e\u00e1dn\u00e1 obrazovka nebude. <\/p>\n<p><\/p>\n<p><em>Tu vrstvu nepot\u0159ebuji, ale pot\u0159ebuji tuto schopnost.<\/em><\/p>\n<p><\/p>\n<p>Pak ano, to se d\u00e1 ud\u011blat.<\/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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\/cs\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/97939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=97939"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/97939\/revisions"}],"predecessor-version":[{"id":159884,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/97939\/revisions\/159884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/97940"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=97939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=97939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=97939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}