{"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\/et\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","title":{"rendered":"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/3bb5cc6d6be1699fc72342a74aa4020a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas backend-arendaja m\u00f5istab, et SQL-p\u00e4ring t\u00f6\u00f6tab h\u00e4sti \"produs\"? Suurtes v\u00f5i kiiresti kasvavates ettev\u00f5tetes ei ole juurdep\u00e4\u00e4s \"prodile\" kaugeltki k\u00f5igil. Ja isegi juurdep\u00e4\u00e4suga ei saa k\u00f5iki p\u00e4ringuid valutult kontrollida ning andmebaasi koopia loomine v\u00f5tab sageli tunde. Nende probleemide lahendamiseks l\u00f5ime tehisliku DBA - Joe. Ta on juba edukalt rakendatud mitmes ettev\u00f5ttes ja aitab rohkem kui k\u00fcmnel arendajal. <\/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 Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/48e63de499e46be4be19aa8c926e5716.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tere k\u00f5igile! Minu nimi on Anatoli Stancler. T\u00f6\u00f6tan ettev\u00f5ttes <noindex><a rel=\"nofollow\" href=\"https:\/\/postgres.ai\/\">Postgres.ai<\/a><\/noindex>. Me tegeleme sellega, et kiirendada arendamisprotsessi, eemaldades arendajate, DBA-de ja QA-de hilinemised, mis on seotud Postgresiga.<\/p>\n<p><\/p>\n<p>Meil on suurep\u00e4rased kliendid ja t\u00e4na on osa ettekandest p\u00fchendatud juhtumitele, millega me oleme kohtunud. R\u00e4\u00e4gin, kuidas me aitasime neil lahendada \u00fcsna t\u00f5siseid probleeme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5bd7d2538a4940afb28d6375a9516760.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui me viibime arenduses ja teeme keerulisi, suurt koormust n\u00f5udvaid migreerimisi, k\u00fcsime endalt: \"Kas see migratsioon \u00f5nnestub?\". Me kasutame \u00fclevaateid, me kasutame kogenumate kolleegide ja DBA-spetsialistide teadmisi. Nad suudavad \u00f6elda \u2013 kas see \u00f5nnestub v\u00f5i mitte. <\/p>\n<p><\/p>\n<p>Ent v\u00f5ib-olla oleks parem, kui saaksime seda ise testida t\u00e4iskopeerimiste peal. T\u00e4na r\u00e4\u00e4gimegi l\u00e4henemistest testimisele ning kuidas seda paremini teha ja milliseid t\u00f6\u00f6riistu kasutada. R\u00e4\u00e4gime ka nende l\u00e4henemiste plussidest ja miinustest ning mida me saame siin parandada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/aca9f4c4fbbfc6db9c24f862216fb5d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kes on kunagi produl indeksid v\u00f5i m\u00f5ningaid muudatusi teinud? \u00dcsna palju inimesi. Ja kellel see viis andmete kadumiseni v\u00f5i seisakute tekkimiseni? Siis on see valu teile tuttav. \u00d5nneks on varukoopiad olemas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7795bf3cb1f3f6f9919ca42758fa51e9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esimene l\u00e4henemine \u2013 testimine produ. V\u00f5i kui arendaja istub oma kohalikul masinal, tal on testandmed, on olemas mingisugune piiratud valik. Ja me viime selle produ ja saame sellise olukorra.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/05b120bf57904f553422f419337d5220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See on valus, see on kallis. Ilmselt oleks parem mitte nii teha. <\/p>\n<p><\/p>\n<p>Kuidas oleks parem teha? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a8727bc2cd217d89edaf9df8588306d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00f5tame stseeni ja eraldame sinna osa produs. V\u00f5i parimal juhul v\u00f5tame ehtsa produ, k\u00f5ik andmed. Ja p\u00e4rast seda, kui oleme kohapeal arendanud, kontrollime t\u00e4iendavalt ka stseenis. <\/p>\n<p><\/p>\n<p>See v\u00f5imaldab meil teatavad vead eemaldada, st mitte lasta neid produsse. <\/p>\n<p><\/p>\n<p>Millised probleemid on? <\/p>\n<p><\/p>\n<ul>\n<li>Probleem on selles, et jagame seda stagingut kolleegidega. Ja sageli juhtub nii, et teed muudatuse ja bum \u2013 andmed on kadunud, t\u00f6\u00f6 on raisku l\u00e4inud. Staging oli mitme terabaidi suurune. Ja tuleb kaua oodata, kuni see taas t\u00f6\u00f6le hakkab. Otsustasime, et t\u00e4iendame seda homme. K\u00f5ik, arendus on seisma j\u00e4\u00e4nud. <\/li>\n<li>Ja muidugi t\u00f6\u00f6tab seal palju meie kolleege, palju meeskondi. Ja peab k\u00e4sitsi koosk\u00f5lastama. See on ebamugav. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/ad4612f2b06ac09e666e33196d898a79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja tuleb m\u00e4rkida, et meil on ainult \u00fcks katse, \u00fcks lask, kui soovime andmebaasi teha mingeid muudatusi, andmeid k\u00e4tte v\u00f5tta v\u00f5i struktuuri muuta. Ja kui midagi l\u00e4heb valesti, kui migratsioonis on viga, siis me ei saa enam kiirelt tagasi minna. <\/p>\n<p><\/p>\n<p>See on parem kui eelmine l\u00e4henemine, aga t\u00f5en\u00e4osus, et m\u00f5ni viga l\u00e4heb productionisse, on endiselt suur.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/73faffc3ef6e368a0901145c48b903b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mis takistab meil anda igale arendajale testimistendi, t\u00e4ismahulise koopia? Ma arvan, et on selge, mis seda takistab. <\/p>\n<p><\/p>\n<p>Kellel on andmebaas, mis on suurem kui terabait? Rohkem kui pooltel saalist. <\/p>\n<p><\/p>\n<p>Ja on selge, et hoida masinad iga arendaja jaoks, kui production on nii suur, on v\u00e4ga kallis ja v\u00f5tab ka aega. <\/p>\n<p><\/p>\n<p>Meil on kliente, kes on aru saanud, et k\u00f5ik muudatused tuleb testida t\u00e4ismahuliste koopiatega, kuid nende andmebaas on v\u00e4iksem kui terabait ning ressurssi, et igale arendajale hoida testimistendi, ei ole. Seet\u00f5ttu peavad nad andme dump'e oma kohalikku arvutisse alla laadima ja nii testima. See v\u00f5tab tohutult aega. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/8c1c804db71ffb5b79b5284670b3427b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Isegi kui teete seda infrastruktuuri sees, on \u00fcks terabait andmete allalaadimine tunnis juba v\u00e4ga hea. Kuid nad kasutavad loogilisi dump'e, nad laadivad kohalikult alla cloud'ist. Nende jaoks on kiirus umbes 200 gigabitti tunnis. Ja lisaks on vajalik aeg, et loogilisest dump'ist \u00fcles ehitada, indekseid rakendada jne.<\/p>\n<p><\/p>\n<p>Aga nad kasutavad seda l\u00e4henemist, sest see v\u00f5imaldab hoida prod'i usaldusv\u00e4\u00e4rsena. <\/p>\n<p><\/p>\n<p>Mida me siin teha saame? Teeme nii, et testimistendid oleksid odavad ja anname igale arendajale tema enda testimistendi.<\/p>\n<p><\/p>\n<p>Ja sedasi on v\u00f5imalik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a763fc2677fe93df884b80561b5270a2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja selle l\u00e4henemisega, kus loome iga arendaja jaoks \u00f5hukesed kloonid, saame selle \u00fche masina peale jagada. N\u00e4iteks kui teie andmebaas on neli terabaiti ja soovite selle anda k\u00fcmnele arendajale, ei pea teil olema k\u00fcmme nelja terabaiti andmebaasi. \u00dche masina olemasolu piisab, et teha iga arendaja jaoks \u00f5hukesed isoleeritud koopiad, kasutades \u00fchte masina. Kuidas see toimib, r\u00e4\u00e4gin veidi hiljem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e8e9df7effb0d0241d90315f92b994c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tegelik n\u00e4ide:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Andmebaas \u2013 4,5 terabaiti. <\/p>\n<p>\n<\/li>\n<li>\n<p>Saame s\u00f5ltumatud koopiad 30 sekundi jooksul. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Te ei pea ootama testimise seadet ja s\u00f5ltuma selle suurusest. Te saate selle sekunditega. Need saavad olema t\u00e4ielikult isoleeritud keskkonnad, kuid jagavad omavahel andmeid. <\/p>\n<p><\/p>\n<p>See on lahe. Siin r\u00e4\u00e4gime maagisest ja paralleelsest universumist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/87e6a7e45548ed5dabd4fad01ea70616.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meie puhul t\u00f6\u00f6tab see OpenZFS s\u00fcsteemi kaudu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e75fed43703e26152a5a85f807064cb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenZFS on copy-on-write failis\u00fcsteem, mis toetab juba alguses \u00e4ratarnimist momentfotode ja kloonide jaoks. See on usaldusv\u00e4\u00e4rne ja skaleeritav. Selle haldamine on \u00e4\u00e4rmiselt lihtne. Selle saab s\u00f5na otseses m\u00f5ttes kahe k\u00e4suga juurutada. <\/p>\n<p><\/p>\n<p>On ka teisi variante:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>LVM,<\/p>\n<p>\n<\/li>\n<li>\n<p>Storage Array (n\u00e4iteks Pure Storage).<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Database Lab, millest ma r\u00e4\u00e4gin, on modulaarne. Seda on v\u00f5imalik rakendada, kasutades selliseid variante. Kuid seni oleme keskendunud OpenZFS-ile, kuna LVM-iga olid probleemid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/41a49f6760ee96b55f49606f8e453992.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas see t\u00f6\u00f6tab? Selle asemel, et andmeid iga kord, kui me neid muudame, uuesti kirjutada, salvestame need, m\u00e4rkides lihtsalt, et need uued andmed kuuluvad uue ajamomendi, uue momentfotod juurde. <\/p>\n<p><\/p>\n<p>Ja siis, kui tahame tagasi minna v\u00f5i teha uue klooni mingi vanema versiooniga, \u00fctleme lihtsalt: \"Olgu, andke meile need andmeplokid, mis on nii m\u00e4rgistatud.\" <\/p>\n<p><\/p>\n<p>Ja see kasutaja t\u00f6\u00f6tab sellise andmestiku kogumiga. Ta muudab neid j\u00e4rk-j\u00e4rgult, luues oma momentfotod. <\/p>\n<p><\/p>\n<p>Ja meil tekib hargnemine. Igal arendajal meie puhul on v\u00f5imalus omada oma klooni, mida ta toimetab, ja need andmed, mis on \u00fchised, jagatakse k\u00f5igi vahel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/78efd8b87f6559839af20a939b7c89d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Selle s\u00fcsteemi juurutamiseks tuleb lahendada kaks probleemi: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Esimene on andmeallikas, kust te neid v\u00f5tate. Saate seadistada replikeerimise produktsiooniga. Saate kasutada juba backup'e, mis teil on loodud, ma loodan. WAL-E, WAL-G v\u00f5i Barman. Isegi kui kasutate mingisugust Cloud-lahendust, n\u00e4iteks RDS-i v\u00f5i Cloud SQL-i, v\u00f5ite kasutada loogilisi dump'e. Kuid soovitame siiski kasutada backup'e, sest selle l\u00e4henemise korral s\u00e4ilitate ka failide f\u00fc\u00fcsilise struktuuri, mis aitab teil hoida l\u00e4hedust nendele m\u00f5\u00f5dikutele, mida n\u00e4eksite produktsioonis, et avastada olemasolevaid probleeme. <\/p>\n<p>\n<\/li>\n<li>\n<p>Teine on koht, kus soovite Database Labi hostida. See v\u00f5ib olla Cloud v\u00f5i On-premise. Siin on oluline \u00f6elda, et ZFS toetab andmete tihendamist. Ja teeb seda \u00fcsna h\u00e4sti. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Kujutage ette, et igal sellisel kloonil, s\u00f5ltuvalt nendest toimingutest, mida me andmebaasiga teeme, hakkab kuhjuma mingi dev. Selle dev jaoks on samuti vajalik ruum. Kuid kuna me v\u00f5tsime andmebaasi, mis on 4,5 terabaiti, suudab ZFS selle tihendada 3,5 terabaitini. S\u00f5ltuvalt seadistustest v\u00f5ib seda varieerida. Ja meil on veel dev jaoks ruumi. <\/p>\n<p><\/p>\n<p>Sellist s\u00fcsteemi saab kasutada erinevates juhtumites. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Need on arendajad, DBA, kes kontrollivad p\u00e4ringuid, et optimeerida. <\/p>\n<p>\n<\/li>\n<li>\n<p>Seda saab kasutada QA-testimisel konkreetse migratsiooni kontrollimiseks enne, kui me selle produktsiooni l\u00fckkame. Samuti saame luua spetsiaalse keskkonna QA jaoks reaalsete andmetega, kus nad saavad uusi funktsioone testida. Ja see v\u00f5tab sekundeid, mitte tunde v\u00f5i isegi p\u00e4evi, nagu m\u00f5nes teises olukorras, kus \u00f5hukesi kloone ei kasutata. <\/p>\n<p>\n<\/li>\n<li>\n<p>Ja veel \u00fcks erijuhtum. Kui ettev\u00f5ttes ei ole anal\u00fc\u00fcsis\u00fcsteemi seadistatud, saame v\u00e4lja tuua \u00f5hukese klooni tootmisandmebaasist ja anda selle pikaajalistele p\u00e4ringutele v\u00f5i spetsiaalsetele indeksitele, mida anal\u00fc\u00fcsis v\u00f5ib kasutada.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5fb0944f063c981f27449d948a59b73b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sellega l\u00e4henemisega:<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>On madal vigade t\u00f5en\u00e4osus \"produksioonis\", sest me oleme k\u00f5ik muudatused testinud t\u00e4ismahus andmetel. <\/p>\n<p>\n<\/li>\n<li>\n<p>K\u00f6itub testimise kultuur, kuna n\u00fc\u00fcd ei pea te tundide kaupa ootama omaenda keskkonda. <\/p>\n<p>\n<\/li>\n<li>\n<p>Ja pole takistusi, pole ootamist testimiste vahel. Sa saad t\u00f5esti minna ja kontrollida. Ja nii on parem, sest me kiirendame arendust. <\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>\n<p>Refaktoreerimist on v\u00e4hem. Vigu satub prod'i v\u00e4hem. Me refaktoreerime neid hiljem v\u00e4hem. <\/p>\n<p>\n<\/li>\n<li>\n<p>Me saame teha p\u00f6\u00f6rdumatuid muudatusi. Seda standardsetes l\u00e4henemisviisides ei ole. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<ol>\n<li>See on kasulik, kuna jagame testakeskuste ressursse. <\/li>\n<\/ol>\n<p><\/p>\n<p>See on juba hea, aga mida veel saaks kiirendada?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/d692f76b865c18ed4c178d1a1440774b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sellise s\u00fcsteemi t\u00f5ttu saame oluliselt v\u00e4hendada sisenemise takistust sellisesse testimisse. <\/p>\n<p><\/p>\n<p>Praegu on kinni ring, kus arendaja peab, et saada juurdep\u00e4\u00e4s t\u00f5elistele t\u00e4ism\u00f5\u00f5tmetele, muutuma eksperdiks. Talle peab selline juurdep\u00e4\u00e4s olema usaldatud. <\/p>\n<p><\/p>\n<p>Aga kuidas kasvada, kui seda ei ole. Aga mida teha, kui sul on juurdep\u00e4\u00e4s ainult v\u00e4ga v\u00e4ikesele testandmete kogumile? Siis ei saa t\u00f5elist kogemust. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/221f7b02294878aea1d0ebe6df5d9717.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas sellest ringist v\u00e4lja tulla? Esimese liidese jaoks, mis sobib igasuguste arendajate tasemele, valisime Slack-boti. Aga see v\u00f5ib olla ka m\u00f5ni muu liides. <\/p>\n<p><\/p>\n<p>Mida see v\u00f5imaldab teha? Sa saad v\u00f5tta konkreetse p\u00e4ringu ja saata selle spetsiaalsesse kanalisse andmebaasi. Me deploy'ime automaatselt sekundite jooksul \u00f5hukese klooni. K\u00e4ivitame selle p\u00e4ringu. Kogume metriika ja soovitusi. N\u00e4itame visualiseerimist. Ja see kloon j\u00e4\u00e4b edasi, et seda p\u00e4ringut saaks kuidagi optimeerida, lisada indekseid jne. <\/p>\n<p><\/p>\n<p>Ja Slack annab meile samuti v\u00e4lja pakutud koost\u00f6\u00f6 v\u00f5imalused. Kuna see on lihtsalt kanal, saab otse seal thread'is selle p\u00e4ringu arutelu alustada, pingida oma kolleege, DBA'sid, kes on ettev\u00f5tte sees. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/b4a6410b625107c5bbbf57c021159914.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga loomulikult on ka probleeme. Kuna see on t\u00f5eline maailm ja me kasutame serverit, millel hostime korraga palju kloone, peame piirama m\u00e4lu ja protsessoriv\u00f5imsuse koguseid, mis on kloonidele k\u00e4ttesaadavad. <\/p>\n<p><\/p>\n<p>Aga et need testid oleksid usutavad, tuleb see probleem kuidagi lahendada. <\/p>\n<p><\/p>\n<p>On selge, et oluline punkt on samad andmed. Aga seda meil juba on. Ja me tahame saavutada sama konfiguratsiooni. Ja me saame anda praktiliselt sama konfiguratsiooni. <\/p>\n<p><\/p>\n<p>Oleks lahe omada sama riistvara nagu tootmises, kuid see v\u00f5ib erineda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5efae55189175262d56a33b89c55ed29.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e4letagem, kuidas Postgres m\u00e4lu kasutab. Meil on kaks vahem\u00e4lu. \u00dcks failis\u00fcsteemist ja teine omalt poolt Postgres, st Shared Buffer Cache. <\/p>\n<p><\/p>\n<p>Oluline on m\u00e4rkida, et Shared Buffer Cache eraldatakse Postgresi k\u00e4ivitamisel vastavalt sellele, millise suuruse te konfiguratsioonis m\u00e4\u00e4rate. <\/p>\n<p><\/p>\n<p>Ja teine \u200b\u200bp\u00e4ringuk\u00e4ivitus kasutab kogu saadaval ruumi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f1f3c85e786649f83d5c17e6724086a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kui me teeme mitmeid kloone \u00fchel masinal, siis t\u00e4itame j\u00e4rk-j\u00e4rgult m\u00e4lu. Ja ideaalis peaks Shared Buffer Cache olema 25% kogu masinas saadaval olevast m\u00e4lu mahust. <\/p>\n<p><\/p>\n<p>Ja selgub, et kui me seda parameetrit ei muuda, saame \u00fchel masinal k\u00e4ivitada vaid 4 instantsi, st kokku 4 sellist \u00f5hukest klooni. Ja see on muidugi halb, sest tahaksime neid palju rohkem omada. <\/p>\n<p><\/p>\n<p>Aga teisest k\u00fcljest kasutatakse Buffer Cache'i p\u00e4ringute t\u00e4itmiseks, indeksite jaoks, st plaan s\u00f5ltub sellest, kui suured meie kased on. Ja kui me lihtsalt v\u00f5tame selle parameetri ja v\u00e4hendame, v\u00f5ivad meie plaanid oluliselt muutuda.<\/p>\n<p><\/p>\n<p>N\u00e4iteks kui prod-s on meil suur vahem\u00e4lu, siis Postgres eelistab indeksit. Aga kui pole, siis on SeqScan. Mis m\u00f5te oleks, kui meie plaanid ei \u00fchtiks? <\/p>\n<p><\/p>\n<p>Aga siin j\u00f5uame sellise lahenduseni, et tegelikult plaan Postgresis ei s\u00f5ltu konkreetsest Shared Bufferi suurusest plaanis, vaid see s\u00f5ltub effective_cache_size'ist.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (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 on eeldatav vahem\u00e4lu maht, mis meile k\u00e4tte saadaval on, st Buffer Cache ja failis\u00fcsteemi vahem\u00e4lu kokku. See m\u00e4\u00e4ratakse konfiguratsiooni kaudu. Ja seda m\u00e4lu ei eraldata. <\/p>\n<p><\/p>\n<p>Ja selle parameetri t\u00f5ttu saame Postgrest natuke petta, \u00f6eldes, et meile on tegelikult palju andmeid k\u00e4tte saadaval, isegi kui neid andmeid meil ei ole. Ja seega plaanid vastavad t\u00e4pselt produktsioonile. <\/p>\n<p><\/p>\n<p>Aga see v\u00f5ib m\u00f5jutada ajastust. Ja optimeerime p\u00e4ringud ajastuse j\u00e4rgi, kuid oluline on, et ajastus s\u00f5ltub paljuski erinevatest teguritest: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>S\u00f5ltub hetkel toimuvast koormusest produktiivses keskkonnas. <\/p>\n<p>\n<\/li>\n<li>\n<p>S\u00f5ltub masina omadustest. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Ja see on kaudne parameeter, kuid tegelikult saame optimeerida just selle p\u00f5hjal, kui palju andmeid see p\u00e4ring loeb, et saada tulemus. <\/p>\n<p><\/p>\n<p>Ja kui soovite, et ajastus oleks v\u00f5imalikult sarnane sellele, mida n\u00e4eme prod-is, peame valima v\u00f5imalikult sarnase riistvara ja v\u00f5ib-olla isegi rohkem, et k\u00f5ik kloonid mahtuda. Kuid see on kompromiss, st saate sarnased plaanid, n\u00e4ete, kui palju andmeid konkreetne p\u00e4ring loeb, ja saate teha j\u00e4relduse \u2013 on see p\u00e4ring hea (v\u00f5i migratsioon) v\u00f5i halb, seda tuleb veel optimeerida. <\/p>\n<p><\/p>\n<p>Vaatame, kuidas Joe optimeerimine t\u00e4psemalt k\u00e4ib. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/26c892a0b2d417f9806cfb77d2ea47f6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00f5tame p\u00e4ringu reaalsest s\u00fcsteemist. Antud juhul on andmebaas \u2013 1 terabyte. Ja me soovime arvutada v\u00e4rskete postituste arvu, millel on rohkem kui 10 meeldimist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/befd651abed6688127f52db39138a4be.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me saadame s\u00f5numi kanalisse, kloon lahti. Ja me n\u00e4eme, et selline p\u00e4ring kulgeb 2,5 minutiga. See on esimene asi, mida me m\u00e4rkame.<\/p>\n<p><\/p>\n<p>B Joe n\u00e4itab automaatseid soovitusi, mis p\u00f5hinevad plaanil ja m\u00f5\u00f5tmetel. <\/p>\n<p><\/p>\n<p>Me n\u00e4eme, et p\u00e4ring t\u00f6\u00f6tleb liiga palju andmeid, et saada suhteliselt v\u00e4he ridu. Ja vajalik on mingi spetsialiseeritud indeks, kuna me oleme m\u00e4rganud, et p\u00e4ringus on liiga palju filtreeritud ridu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7f40e41314ebc682a1a64a2958dec16c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vaatame l\u00e4hemalt, mis juhtus. T\u00f5epoolest, me n\u00e4eme, et lugesime peaaegu poolteist gigabaiti andmeid failik\u00fcst v\u00f5i isegi kettalt. Ja see pole hea, kuna saime vaid 142 rida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/30aaff5da2536fa27efc6591f645d6f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja n\u00e4iliselt on meil siin indeksiskann ja see peaks olema kiiresti t\u00e4idetud, kuid kuna me filtreerisime liiga palju ridu (me pidime neid arvestama), kulges p\u00e4ring aeglaselt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/40958fbc04d4eb738f6a16488647bd8c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja see juhtus plaanis, kuna p\u00e4ringu ja indeksi tingimused ei \u00fchtinud osaliselt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/196ca5116e641c72bc1009e97c390bc7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vaatame, kas suudame indeksi t\u00e4psemaks teha ja vaatame, kuidas p\u00e4ringu t\u00e4itmine p\u00e4rast seda muutub. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/646a73964f0b6d3615eedb8acb3aa216.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Indeksi loomine v\u00f5ttis palju aega, kuid n\u00fc\u00fcd kontrollime p\u00e4ringut ja n\u00e4eme, et aeg 2,5 minutist on n\u00fc\u00fcd vaid 156 millisekundit, mis on piisavalt hea. Ja loeme vaid 6 megabaiti andmeid.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5cce2d6ecf2314c0575c0fed107f6d5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja n\u00fc\u00fcd kasutame ainult indeksi skannimist.<\/p>\n<p><\/p>\n<p>Teine oluline teema on see, et soovime plaani esitada selgemal viisil. Oleme rakendanud visuaali koos Flame Graphsiga. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f4f545bfbf52fd66b6cbe45e1d6d0b6c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See on teine p\u00e4ring, rikkalikum. Ja Flame Graphs'i ehitame kahe parameetri p\u00f5hjal: see on andmete hulk, mida konkreetne s\u00f5lm plaanis luges, ja ajastus, st s\u00f5lme t\u00e4itmise aeg. <\/p>\n<p><\/p>\n<p>Siin saame konkreetselt s\u00f5lmede vahel v\u00f5rrelda. Ja on selge, milline neist v\u00f5tab rohkem v\u00f5i v\u00e4hem ruumi, mida tavaliselt on keeruline teha teiste visualiseerimismeetodite puhul. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/c477d2f32241c69eb0b38ef45ff4708b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Loomulikult teavad k\u00f5ik explain.depesz.com. Selle visualiseerimise hea omadus on see, et salvestame tekstiplaani ja toome v\u00e4lja m\u00f5ned olulised parameetrid tabelisse, et oleks v\u00f5imalik sorteerida. <\/p>\n<p><\/p>\n<p>Ja arendajad, kes ei ole sellesse teemasse s\u00fcvenenud, kasutavad samuti explain.depesz.com, kuna neile on lihtsam m\u00f5ista, millised m\u00f5\u00f5dikud on olulised ja millised mitte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a7352b5b9abf27294375c78bec69d4d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On olemas uus visuaaliseerimise l\u00e4henemine \u2013 explain.dalibo.com. Nad teevad puu-struktuuri visualiseerimise, kuid siin on s\u00f5lmede omavaheline v\u00f5rdlemine v\u00e4ga keeruline. Siin on v\u00f5imalik h\u00e4sti m\u00f5ista struktuuri, t\u00f5si, kui p\u00e4ring on suur, tuleb skrullida edasi-tagasi, aga see on ka variant. <\/p>\n<p><\/p>\n<h2 id=\"kollaboraciya\">Koost\u00f6\u00f6<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7101c0b95eafed8fd9305a4630399e3b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja nagu ma juba \u00fctlesin, annab Slack meile koost\u00f6\u00f6 v\u00f5imaluse. N\u00e4iteks kui me kohtame keerulist p\u00e4ringut, mille optimeerimine ei ole selge, saame Slackis selle k\u00fcsimuse oma kolleegidega arutada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stan\u015fler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/14b8f9c3401ecb68ac1ef56bc0cb0fa5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meie arvates on oluline katsetada t\u00e4ism\u00f5\u00f5dus andmetega. Selleks oleme loonud t\u00f6\u00f6riista Update Database Lab, mis on avatud allikaga. Saate kasutada ka Joe bot'i. Saate selle otse praegu v\u00f5tta ja endale rakendada. K\u00f5ik juhendid on seal saadaval. <\/p>\n<p><\/p>\n<p>Oluline on m\u00e4rkida, et lahendus ise ei ole revolutsiooniline, kuna on olemas Delphix, kuid see on ettev\u00f5tte lahendus. See on t\u00e4ielikult suletud ja maksab v\u00e4ga palju. Me spetsialiseerume Postgres'ile. Need on k\u00f5ik avatud allika tooted. Liituge meiega! <\/p>\n<p><\/p>\n<p>Sellega l\u00f5petan. Ait\u00e4h!<\/p>\n<p><\/p>\n<h2 id=\"voprosy\">K\u00fcsimused<\/h2>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! V\u00e4ga huvitav, eriti minu jaoks, kuna ma olen m\u00f5ni aeg tagasi lahendanud sarnase \u00fclesande. Seet\u00f5ttu on mul terve hulk k\u00fcsimusi. Loodan, et suudan v\u00e4hemalt osa nendest esitada.<\/em><\/p>\n<p><\/p>\n<p><em>Huvitav, kuidas te selle keskkonna jaoks ruumi arvutate? Tehnoloogia eeldab, et teatud tingimustes v\u00f5ivad teie kloonid kasvada maksimaalsesse suurusesse. \u00dcksk\u00f5ik kui palju, kui teil on k\u00fcmme terabaidi andmebaas ja 10 klooni, on lihtne simuleerida olukorda, kus iga kloon kaalub 10 unikaalset andmestikku. Kuidas te seda ruumi arvutate, st seda delta, millest r\u00e4\u00e4kisite, kus need kloonid elavad?<\/em><\/p>\n<p><\/p>\n<p>Hea k\u00fcsimus. Siin on oluline j\u00e4lgida konkreetseid kloone. Kui m\u00f5ni kloon muutub liiga suureks ja hakkab kasvama, saame k\u00f5igepealt kasutajale selle kohta hoiatuse anda v\u00f5i kohe selle klooni peatada, et meil ei tekiks eba\u00f5nnestumise olukorda. <\/p>\n<p><\/p>\n<p><em>Jah, mul on seotud k\u00fcsimus. Ehk siis, kuidas te tagate nende moodulite eluts\u00fckli? Meil on see probleem ja eraldi lugu. Kuidas see toimub?<\/em><\/p>\n<p><\/p>\n<p>Iga klooni puhul on mingisugune ttl. P\u00f5him\u00f5tteliselt on meil fikseeritud ttl. <\/p>\n<p><\/p>\n<p><em>Kui kaua, kui saladus ei ole?<\/em><\/p>\n<p><\/p>\n<p>1 tund, st kui see on mitteaktiivne \u2013 1 tund. Kui seda ei kasutata, siis me h\u00e4vitame selle. Aga siin pole midagi \u00fcllatavat, sest me saame klooni t\u00f5sta sekunditega. Ja kui see uuesti vajalikuks osutub, siis \u2013 palun. <\/p>\n<p><\/p>\n<p><em>Technoloogiate valik huvitab mind ka, sest n\u00e4iteks kasutame me paralleelselt mitmeid viise erinevatel p\u00f5hjusel. Miks just ZFS? Miks te ei kasutanud LVM-i? Te mainisite, et LVM-iga oli probleeme. Millised need probleemid olid? Minu arvates on k\u00f5ige optimaalsem variant SCSI puhul, tootlikkuse m\u00f5ttes.<\/em> <\/p>\n<p><\/p>\n<p><em>Mis on ZFS-i peamine probleem? See, et pead t\u00f6\u00f6tama \u00fchel hostil, st k\u00f5ik instantsid elavad \u00fche operatsioonis\u00fcsteemi raames. SCSI puhul saad aga \u00fchenduda erinevate seadmetega. Kitsaskohad on ainult need blokid, mis on SCSI-l. Ja k\u00fcsimus on just tehnoloogiate valikus. Miks mitte LVM?<\/em><\/p>\n<p><\/p>\n<p>LVM-i kohta saame r\u00e4\u00e4kida kohtumisel. SCSI osas \u2013 see on lihtsalt kallis. ZFS-i s\u00fcsteemi saame juurutada kus iganes. Sa v\u00f5id selle oma masinas seadistada. Sa saad lihtsalt alla laadida repot ja selle \u00fcles seada. ZFS t\u00f6\u00f6tab praktiliselt igal pool, kui me r\u00e4\u00e4gime Linuxist. Ehk saame v\u00e4ga paindliku lahenduse. Ja ZFS ise on karbist v\u00e4lja v\u00e4ga palju pakkuda. Sa saad sinna laadida piiramatult andmeid, \u00fchendada palju kettaid, seal on snapshots. Ja nagu ma juba mainisin, on seda lihtne administreerida. Ehk siis see paistab kasutamisel v\u00e4ga mugav. See on testitud, see on olemas olnud juba kaua. Sellel on v\u00e4ga suur kogukond, mis kasvab. ZFS on v\u00e4ga usaldusv\u00e4\u00e4rne lahendus. <\/p>\n<p><\/p>\n<p>Nikolai Samohvalov: Kas ma v\u00f5in veel kommenteerida? Minu nimi on Nikolai, me t\u00f6\u00f6tame koos Anatoliiga. Olen n\u00f5us, et SCSI on suurep\u00e4rane. Ja m\u00f5nedel meie klientidel on n\u00e4iteks Pure Storage jne. <\/p>\n<p><\/p>\n<p>Anatoli \u00f5igesti m\u00e4rkis, et meie eesm\u00e4rk on modulaarne l\u00e4henemine. Tulevikus v\u00f5ib realiseerida \u00fche liidese \u2013 tee snapshot, tee kloon, h\u00e4vita kloon. See k\u00f5ik on lihtne. Ja salvestusseade on suurep\u00e4rane, kui see on olemas.<\/p>\n<p><\/p>\n<p>Aga ZFS on k\u00f5igile k\u00e4ttesaadav. Alates DelPhix'ist on neid juba piisavalt, neil on 300 klienti. Neist Fortune 100 is on 50 klienti, see t\u00e4hendab, et nad sihivad NASA-d jne. On aeg, et see tehnoloogia oleks k\u00e4tte saadav k\u00f5igile. Seet\u00f5ttu on meil avatud l\u00e4htekoodiga p\u00f5hituum. Meil on osa liidest, mis ei ole avatud l\u00e4htekoodiga. See on platvorm, mida me n\u00e4itame. Aga me tahame, et see oleks k\u00e4tte saadav iga\u00fchele. Me soovime teha revolutsiooni, et k\u00f5ik testijad l\u00f5petaksid aimamise s\u00fclearvutites. Me peame kirjutama SELECT ja kohe n\u00e4gema, et see on aeglane. Ei ole enam aega oodata, et DBA sellest r\u00e4\u00e4gib. See on meie peamine eesm\u00e4rk. Ja ma arvan, et me j\u00f5uame sinna k\u00f5ik. Ja seda me teeme, et see oleks k\u00f5igile k\u00e4tte saadav. Seet\u00f5ttu ZFS, sest see saab olema k\u00e4ttesaadav igal pool. Ait\u00e4h kogukonnale probleemide lahendamise eest ja selle eest, et seal on avatud l\u00e4htekoodi litsents jne. <\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! Minu nimi on Maksim. Me lahendasime samu probleeme. Meil endal on see lahendatud. Kuidas te jagate ressursse nende kloonide vahel? Iga kloon v\u00f5ib igal ajahetkel tegeleda oma asjadega: \u00fcks testib \u00fchte, teine teist, kellelgi on indeks ehitamisel, kellelgi on raskem t\u00f6\u00f6. Ja kui CPU on v\u00f5imalik jagada, siis kuidas te jagate IO-d?<\/em><\/p>\n<p><\/p>\n<p><em>Teine k\u00fcsimus eba\u00fchtlike keskkondade kohta. Oletame, et mul on siin ZFS ja k\u00f5ik on suurep\u00e4rane, aga kliendil tootmises on ext4, n\u00e4iteks. Kuidas sellisel juhul k\u00e4ib?<\/em><\/p>\n<p><\/p>\n<p>K\u00fcsimused on v\u00e4ga head. Mainisin veidi seda probleemi seoses ressursside jagamisega. Lahendus on j\u00e4rgmine. Kujutage ette, et te testite stagingus. Ka seal v\u00f5ib samal ajal tekkida olukord, kus keegi toob \u00fche koormuse, keegi teine teise. Ja l\u00f5puks te n\u00e4ete arusaamatuid m\u00f5\u00f5dikuid. Sama probleem v\u00f5ib olla tootmises. Kui soovite kontrollida mingit p\u00e4ringut ja n\u00e4ete, et sellega on mingi probleem \u2013 see t\u00f6\u00f6tab aeglaselt, siis tegelikult ei olnud probleem p\u00e4ringus, vaid see, et m\u00f5ni teine koormus on paralleelselt k\u00e4imas. <\/p>\n<p><\/p>\n<p>Seet\u00f5ttu on oluline keskenduda sellele, milline plaan on, kuidas me plaanis edasi liigume ja kui palju andmeid me selleks \u00fcles t\u00f5stame. Kui n\u00e4iteks meie kettad on millegagi koormatud, m\u00f5jutab see kindlasti ajakava. Ent me saame andmete arvu p\u00f5hjal hinnata, kui koormatud see p\u00e4ring on. Ei ole nii t\u00e4htis, et samal ajal on ka m\u00f5ni muu t\u00e4itmine. <\/p>\n<p><\/p>\n<p><em>Mul on kaks k\u00fcsimust. See on v\u00e4ga \u00e4ge asi. Kas on olnud juhtumeid, kus andmed tootmises on kriitilise t\u00e4htsusega, n\u00e4iteks krediitkaardinumbrid? Kas on juba midagi valmis v\u00f5i on see eraldi \u00fclesanne? Ja teine k\u00fcsimus \u2013 kas MySQL jaoks on midagi sellist olemas?<\/em><\/p>\n<p><\/p>\n<p>Andmete osas. Me teeme obfuskeeringut, seni kuni me ei tee seda. Kuid kui te k\u00e4itate Joe't, kui te ei anna arendajatele juurdep\u00e4\u00e4su, siis ligip\u00e4\u00e4su andmetele ei ole. Miks? Sest Joe ei n\u00e4ita andmeid. Ta n\u00e4itab ainult m\u00f5\u00f5dikuid, plaane ja k\u00f5ik. See tehti spetsiaalselt, kuna see on \u00fcks meie kliendi n\u00f5uetest. Nad soovisid v\u00f5imalust optimeerida, kuid mitte anda k\u00f5igile juurdep\u00e4\u00e4su. <\/p>\n<p><\/p>\n<p>MySQL-i osas. Seda s\u00fcsteemi saab kasutada igasuguste asjade jaoks, mis salvestavad olekut kettale. Ja kuna me tegeleme Postgres'iga, siis esmalt teeme me t\u00e4ielikult automatiseerimise Postgres'ile. Me tahame automatiseerida andmete saamist varukoopiast. Me konfigureerime Postgres'i \u00f5igesti. Me teame, kuidas teha nii, et plaanid kattuksid jne. <\/p>\n<p><\/p>\n<p>Kuna s\u00fcsteem on skaleeritav, saab seda kasutada ka MySQL-i jaoks. Sellised n\u00e4ited on olemas. Sarnane asi on Yandexil, aga nad ei avalda seda kuskil. Nad kasutavad seda Yandex.Metrixis. Seal on just MySQL-i lugu. Kuid tehnoloogiad on samad, ZFS. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h ettekande eest! Mul on ka paar k\u00fcsimust. Te mainisite, et kloonimist saab kasutada anal\u00fc\u00fcsiks, n\u00e4iteks seal lisaindeksite koostamiseks. Kas saaksite veidi l\u00e4hemalt r\u00e4\u00e4kida, kuidas see t\u00f6\u00f6tab?<\/em><\/p>\n<p><\/p>\n<p><em>Ja annan kohe teise k\u00fcsimuse seoses \u00fchtlasele seadmestikule ja \u00fchtlasele plaanile. Plaan s\u00f5ltub ka statistikatest, mida Postgres kogub. Kuidas te selle probleemi lahendate?<\/em><\/p>\n<p><\/p>\n<p>Konkreetsete juhtumite anal\u00fc\u00fcsist ei ole midagi, kuna me pole veel seda kasutanud, kuid selline v\u00f5imalus on olemas. Kui r\u00e4\u00e4gime indeksitest, siis kujutage ette, et tabelis, kus on sadu miljoneid kirjeid, tehakse p\u00e4ringud veerule, mis tavaliselt ei ole tootmises indekseeritud. Ja me tahame seal mingid andmed v\u00e4lja lugeda. Kui see p\u00e4ring tootmises k\u00e4ivitada, on v\u00f5imalus, et tootmises tekib seiskumine, kuna p\u00e4ring v\u00f5ib seal kesta minuteid. <\/p>\n<p><\/p>\n<p>Olgu, teeme peene klooni, mida pole hirmus paariks minutiks peatada. Ja et oleks mugavam anal\u00fc\u00fctikat arvutada, lisame indeksid neile veergudele, mis meid huvitavad. <\/p>\n<p><\/p>\n<p><em>Kas indeks luuakse iga kord uuesti?<\/em><\/p>\n<p><\/p>\n<p>Saame teha nii, et puutume andmete k\u00fclge, teeme snapshot'id ning taastume seej\u00e4rel nendelt snapshot'idelt ja k\u00e4ivitame uued p\u00e4ringud. Ehk saame t\u00f5sta uusi kloone juba olemasolevate indeksitega.<\/p>\n<p><\/p>\n<p>Mis puutub statistika k\u00fcsimusse, siis kui me taastume varukoopiast, kui me teeme replikatsiooni, siis meie statistika on kindlasti sama. Sest me toome kogu f\u00fc\u00fcsilise andmestruktuuri, ehk andmed koos k\u00f5igi statistika meetritega. <\/p>\n<p><\/p>\n<p>Siin on teine probleem. Kui teie jaoks on kasutuses pilve lahendus, siis seal on saadaval vaid loogilised dump'id, sest Google ja Amazon ei luba v\u00f5tta f\u00fc\u00fcsilist koopiat. See tekitab probleemi. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h ettekande eest. Siin k\u00f5las kaks head k\u00fcsimust MySQL'i ja ressursside jagamise kohta. Kuid p\u00f5him\u00f5tteliselt, k\u00f5ik kokkuv\u00f5ttes viib meid sellele, et see teema ei ole seotud konkreetsete andmebaasimootorite, vaid \u00fcldiselt failis\u00fcsteemiga. Seega, ressursside jagamise k\u00fcsimused tuleks lahendada sealt, mitte l\u00f5pus, et see on Postgres, vaid failis\u00fcsteemis. <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/dts-dronten\/\"   title=\"serveris\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2602\">serveris<\/a>, instantsis.<\/em> <\/p>\n<p><\/p>\n<p><em>Minu k\u00fcsimus on veidi erinev. See on rohkem suunatud andmebaasi mitmekihilisusele, kus on mitu kihti. N\u00e4iteks, me oleme seadnud \u00fclesande k\u00fcmnete terabaitide pildi v\u00e4rskendamiseks, mille puhul toimub replikatsioon. Ja me kasutame seda lahendust konkreetselt andmebaaside jaoks. Replikatsioon toimub, andmed uuendatakse. Samal ajal t\u00f6\u00f6tab 100 t\u00f6\u00f6tajat, kes pidevalt k\u00e4ivitavad erinevaid snapshot'e. Mida teha? Kuidas v\u00e4ltida konflikti, et nad k\u00e4ivitasid \u00fche ja siis failis\u00fcsteem muutus ning need snapshot'id k\u00f5ik l\u00e4ksid segamini?<\/em> <\/p>\n<p><\/p>\n<p>Nad ei s\u00f5ida, kuna ZFS t\u00f6\u00f6tab nii. Saame hoida eraldi \u00fches voos failis\u00fcsteemi muudatusi, mis t\u00e4nu replikatsioonile tulevad. Ja hoida klone vanadel andmeversioonidel, mida arendajad kasutavad. See t\u00f6\u00f6tab meil, sellega on k\u00f5ik korras.<\/p>\n<p><\/p>\n<p><em>Tuleb v\u00e4lja, et uuendus toimub nagu t\u00e4iendav kiht ja k\u00f5ik uued haarangud tulevad juba selle kihi p\u00f5hjal, jah?<\/em> <\/p>\n<p><\/p>\n<p>Eelmiste kihtide p\u00f5hjal, mis tulid eelmiste replikatsioonidega. <\/p>\n<p><\/p>\n<p><em>Eelmised kihid kukuvad \u00e4ra, aga nad viitavad vanale kihile, ja uued pildid saavad olema viimase kihi p\u00f5hjal, mis saadi uuendamise k\u00e4igus?<\/em><\/p>\n<p><\/p>\n<p>\u00dcldiselt, jah. <\/p>\n<p><\/p>\n<p><em>Seej\u00e4rel on meil palju kihte. Ja aja jooksul tuleb neid tihendada?<\/em><\/p>\n<p><\/p>\n<p>Jah, t\u00e4iesti \u00f5ige. On mingi aken. Hoidame n\u00e4dalasi haaranguid. See s\u00f5ltub, milline ressurss teil on. Kui teil on v\u00f5imalus hoida palju andmeid, siis saab haaranguid pikka aega hoida. Need ei kustuta ennast. Andmete rikkumist ei toimu. Kui haarangud on vananenud, nagu me arvame, st see s\u00f5ltub ettev\u00f5tte poliitikast, siis saame need lihtsalt kustutada ja ruumi vabastada. <\/p>\n<p><\/p>\n<p><em>Tere, ait\u00e4h ettekande eest! Joe k\u00fcsimuse kohta. Te \u00fctlesite, et kliendile ei soovitud andmetele juurdep\u00e4\u00e4su anda. T\u00e4pselt \u00f6eldes, kui inimesel on Explain Analyze tulemus, siis ta v\u00f5ib andmeid vaadata.<\/em> <\/p>\n<p><\/p>\n<p>Just nii. N\u00e4iteks v\u00f5ime kirjutada: \"SELECT FROM WHERE email = kellelegi\". St me ei n\u00e4e andmeid, aga m\u00f5ningaid kaudseid m\u00e4rke saame vaadata. Seda tuleb m\u00f5ista. Aga teisest k\u00fcljest on see k\u00f5ik n\u00e4htav. Meil on logide audit, meil on kolleegide kontroll, kes samuti n\u00e4evad, millega arendajad tegelevad. Ja kui keegi proovib nii teha, siis turvateenistus tuleb tema juurde ja tegeleb selle k\u00fcsimusega. <\/p>\n<p><\/p>\n<p><em>Tere p\u00e4evast! Ait\u00e4h ettekande eest! Mul on l\u00fchike k\u00fcsimus. Kui ettev\u00f5ttes Slacki ei kasutata, kas sellega on praegu mingisugune seos olemas v\u00f5i on arendajatele v\u00f5imalik k\u00e4ivitada instantsid, et testrakendus saaks andmebaasidega \u00fchendada?<\/em><\/p>\n<p><\/p>\n<p>Hetkel on ainult Slacki tugi, st ei ole \u00fchtegi muud messengerit, kuid oleks v\u00e4ga m\u00f5nus toetada ka teisi messengerite. Mida te saate teha? Saate v\u00e4lja arendada oma DB Lab'i ilma Joe'ita, kasutada REST API-t v\u00f5i meie platvormi ning luua kloone ning \u00fchendada PSQL-iga. Kuid seda saab teha, kui olete valmis andma oma arendajatele juurdep\u00e4\u00e4su andmetele, kuna siin ei ole enam mingit ekraani. <\/p>\n<p><\/p>\n<p><em>Mulle ei ole see vahekiht vajalik, vaid mul on vaja sellist v\u00f5imalust.<\/em><\/p>\n<p><\/p>\n<p>Siis - jah, seda on v\u00f5imalik teha.<\/p>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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. Anatoli Stanstler (Postgres.ai) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/97939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=97939"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/97939\/revisions"}],"predecessor-version":[{"id":159884,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/97939\/revisions\/159884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/97940"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=97939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=97939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=97939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}