{"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 Stansler (Postgres.ai)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 tootmises h\u00e4sti? Suurtes v\u00f5i kiiresti kasvavates ettev\u00f5tetes ei ole juurdep\u00e4\u00e4s tootmisele k\u00f5igile. Ja isegi juurdep\u00e4\u00e4suga ei saa k\u00f5iki p\u00e4ringuid valutult kontrollida ning andmebaasi koopia loomine v\u00f5tab sageli tunde. Selle probleemiga tegelemiseks l\u00f5ime tehis DBA \u2014 Joe. Ta on juba edukalt rakendatud mitmes ettev\u00f5ttes ja aitab k\u00fcmneid arendajaid. <\/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 Stansler (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 Stansler. T\u00f6\u00f6tab ettev\u00f5ttes <noindex><a rel=\"nofollow\" href=\"https:\/\/postgres.ai\/\">Postgres.ai<\/a><\/noindex>. Meie eesm\u00e4rk on kiirendada arendusprotsessi, v\u00e4hendades Postgres'iga seotud viivitusi arendajatel, DBA-l ja QA-l.<\/p>\n<p><\/p>\n<p>Meil on toredad kliendid ja t\u00e4na p\u00fchendame osa oma ettekandest juhtumitele, millega oleme nende t\u00f6\u00f6 k\u00e4igus kokku puutunud. R\u00e4\u00e4gin, kuidas aitasime neil lahendada piisavalt t\u00f5siseid probleeme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5bd7d2538a4940afb28d6375a9516760.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui me teeme arengut ja teeme keerulisi koormatud migratsioone, k\u00fcsime endalt: 'Kas see migratsioon \u00f5nnestub?'. Kasutame \u00fclevaateid, kasutame kogenud kolleegide ja DBA-ekspertide teadmisi. Nemad saavad \u00f6elda, kas see \u00f5nnestub v\u00f5i mitte. <\/p>\n<p><\/p>\n<p>Kuid v\u00f5ib-olla oleks parem, kui saaksime seda testida t\u00e4iskoopiates. T\u00e4na r\u00e4\u00e4gime, millised on praegused testimise l\u00e4henemisviisid, kuidas neid paremini rakendada ja milliseid t\u00f6\u00f6riistu kasutada. R\u00e4\u00e4gime ka nende l\u00e4henemiste eeliste ja puuduste \u00fcle ning sellest, mida saame siin parandada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 otse prod-s indekseid teinud v\u00f5i muudatusi teinud? T\u00f5eliselt palju inimesi. Ja kellel on see viinud andmete kadumiseni v\u00f5i seiskumisteni? Siis on see valu teile tuttav. \u00d5nneks on varukoopiad olemas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 on testimine prod-s. Kas siis, kui arendaja t\u00f6\u00f6tab kohalikult, kasutades testandmeid ja piiratud valikut. Siis viime selle prod-sse ja saame sellise olukorra.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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. T\u00f5en\u00e4oliselt ei ole seda parem teha. <\/p>\n<p><\/p>\n<p>Kuidas siis paremini teha? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a8727bc2cd217d89edaf9df8588306d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>V\u00f5tame stagingi ja suuname sinna mingi osa prod-ist. V\u00f5i parimal juhul v\u00f5tame t\u00f5elise prod-i, k\u00f5ik andmed. Ja p\u00e4rast seda, kui oleme kohalikult arendanud, kontrollime seda veel ka stagingis. <\/p>\n<p><\/p>\n<p>See v\u00f5imaldab meil eemaldada osa vigu, st n\u00e4iteks mitte lubada prod-s. <\/p>\n<p><\/p>\n<p>Millised on probleemid? <\/p>\n<p><\/p>\n<ul>\n<li>Probleem on selles, et jagame seda staging keskkonda kolleegidega. Ja v\u00e4ga sageli juhtub, et teed mingisuguse muudatuse, ja hop \u2013 ja mingeid andmeid ei ole, t\u00f6\u00f6 l\u00e4heb raisku. Staging oli mitme terabaidi suurune. Ja selle uuesti k\u00e4ivitamine v\u00f5tab kaua aega. Otsustame selle homseks edasi l\u00fckata. Meie arendus on peatunud. <\/li>\n<li>Ja muidugi t\u00f6\u00f6tab seal palju meie kolleegi, palju meeskondi. Ja me peame k\u00e4sitsi koordineerima. See on ebamugav. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/ad4612f2b06ac09e666e33196d898a79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja tuleb \u00f6elda, et meil on ainult \u00fcks katse, \u00fcks v\u00f5imalus, kui soovime andmebaasis mingeid muudatusi teha, andmeid puudutada, struktuuri muuta. Ja kui midagi l\u00e4heb valesti, kui migratsioonis on viga, siis me ei saa kiiresti tagasi kerida. <\/p>\n<p><\/p>\n<p>See on parem kui eelmine l\u00e4henemine, kuid siiski on suur t\u00f5en\u00e4osus, et m\u00f5ni viga j\u00f5uab tootmisse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/73faffc3ef6e368a0901145c48b903b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Miks ei saa igale arendajale anda testkeskkonda, t\u00e4iskohaga koopiat? Ma arvan, et on selge, mis takistab. <\/p>\n<p><\/p>\n<p>Kellel on andmebaas, mis on suurem kui terabyte? Suuremal osal rahvast. <\/p>\n<p><\/p>\n<p>Ja on selge, et hoida masinate infrastruktuuri iga arendaja jaoks, kui tootmine on nii suur, on v\u00e4ga kallis ja ka aegan\u00f5udev. <\/p>\n<p><\/p>\n<p>Meil on kliente, kes m\u00f5istsid, kui oluline on k\u00f5ik muudatused testida t\u00e4ismahus koopiatel. Kuid nende andmebaas on v\u00e4iksem kui tera, ning ressursid, et iga arendaja jaoks testimisstandi hoida, puuduvad. Seet\u00f5ttu peavad nad laadima dump'id oma kohalikule masinale ja testima seel\u00e4bi. See v\u00f5tab palju aega. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 \u00fche terabaiandmete allalaadimine tunnis juba v\u00e4ga hea saavutus. Kuid nad kasutavad loogilisi dump'e, laadides neid pilvest kohalikule masinale. Nende allalaadimise kiirus on umbes 200 gigabaiti tunnis. Ja lisaks on vaja aega, et loogilisest dump'ist taastuda, indekseid rakendada jne.<\/p>\n<p><\/p>\n<p>Kuid nad kasutavad seda l\u00e4henemist, kuna see v\u00f5imaldab hoida tootmiskeskkonna usaldusv\u00e4\u00e4rsena. <\/p>\n<p><\/p>\n<p>Mida me siin teha saame? Teeme nii, et testimisstandid oleksid odavad ja anname igale arendajale oma isikliku testimisstandi.<\/p>\n<p><\/p>\n<p>Ja see on teostatav. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a763fc2677fe93df884b80561b5270a2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja ja, sellise l\u00e4henemisviisi korral, kus loome iga arendaja jaoks \u00f5hukesed kloonid, saame selle jagada \u00fchel masinal. N\u00e4iteks kui teil on nelja terabaidi andmebaas ja soovite anda selle 10 arendajale, ei pea teil olema 10 x nelja terabaiti andmebaase. \u00dcks masin piisab selleks, et luua iga arendaja jaoks \u00f5hukesed eraldatud koopiad, kasutades \u00fchte masinat. Kuidas see t\u00f6\u00f6tab, selgitan natuke hiljem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e8e9df7effb0d0241d90315f92b994c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Reaalne 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 saada iseseisvaid koopiaid 30 sekundiga. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Te ei pea ootama testimispinda ja s\u00f5ltuma selle suurusest. Saate selle sekundite jooksul. Need on t\u00e4ielikult eraldatud keskkonnad, kuid jagavad andmeid omavahel. <\/p>\n<p><\/p>\n<p>See on \u00e4ge. Siin r\u00e4\u00e4gime maagiast ja paralleelsest universumist. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/87e6a7e45548ed5dabd4fad01ea70616.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meie puhul toimib see OpenZFS s\u00fcsteemi abil. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 toob juba v\u00e4lja kastist toetuse snapshot'ide ja kloonide jaoks. See on usaldusv\u00e4\u00e4rne ja skaleeritav. Selle haldamine on v\u00e4ga lihtne. Saate selle kahe k\u00e4suga k\u00e4ivitada. <\/p>\n<p><\/p>\n<p>On ka teisi v\u00f5imalusi:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>LVM,<\/p>\n<p>\n<\/li>\n<li>\n<p>SAN (n\u00e4iteks Pure Storage).<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Andmebaasi labor, millest ma r\u00e4\u00e4gin, on modulaarsed. Seda saab rakendada kasutades erinevaid variante. Kuid praegu keskendume OpenZFS-ile, kuna LVM-iga olid konkreetselt probleeme. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 iga kord, kui me andmeid muudame, neid uuesti kirjutada, salvestame me need lihtsalt, m\u00e4rkides, et need uued andmed kuuluvad uuele ajamomendile, uuele snapshots. <\/p>\n<p><\/p>\n<p>Ja edaspidi, kui me soovime tagasi minna v\u00f5i teha uue klooni mingist vanemast versioonist, \u00fctlemeki: \u201eOlgu, palun andke meile need andmepangad, mis on nii t\u00e4histatud.\u201c <\/p>\n<p><\/p>\n<p>Ja kasutaja t\u00f6\u00f6tab selliste andmete kogumiga. Ta hakkab neid j\u00e4rk-j\u00e4rgult muutma, luues oma snapshots. <\/p>\n<p><\/p>\n<p>Ja meil on hargnemine. Igal arendajal on meie puhul v\u00f5imalus omada oma kloni, mida ta redigeerib, ning \u00fcldised andmed jagatakse k\u00f5ikide vahel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/78efd8b87f6559839af20a939b7c89d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sellise s\u00fcsteemi k\u00e4ivitamiseks tuleb lahendada kaks probleemi: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Esimene on andmeallikas, kust te andmeid v\u00f5tate. Saab seadistada replikaate production'ist. V\u00f5ite kasutada juba olemasolevaid varukoopiaid, loodan, et need on olemas. WAL-E, WAL-G v\u00f5i Barman. Kui kasutate m\u00f5nda pilvelahendust, n\u00e4iteks RDS v\u00f5i Cloud SQL, v\u00f5ite kasutada loogilisi dump'e. Siiski soovitame kasutada varukoopiaid, kuna sellisel l\u00e4henemisel s\u00e4ilib ka failide f\u00fc\u00fcsiline struktuur, mis aitab l\u00e4hemale p\u00e4\u00e4seda neile meetrikaile, mida n\u00e4eksite production'is, et tuvastada olemasolevad probleemid. <\/p>\n<p>\n<\/li>\n<li>\n<p>Teine on koht, kus soovite Database Labi majutada. See v\u00f5ib olla Cloud v\u00f5i On-premise. Oluline on m\u00e4rkida, et ZFS toetab andmete tihendamist. Ja teeb seda piisavalt h\u00e4sti. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Kujutage ette, et igal sellisel kloonil, s\u00f5ltuvalt toimingutest, mida me andmebaasiga teeme, hakkab kogunema mingi dev. Selleks tuleb ka dev'ile ruumi. Kuid kuna me v\u00f5tsime andmebaasi 4,5 terabaiti, tihendab ZFS selle 3,5 terabaidiks. S\u00f5ltuvalt seadetest saab seda varieerida. Ja meil j\u00e4\u00e4b veel ruumi dev'ile. <\/p>\n<p><\/p>\n<p>Sellist s\u00fcsteemi saab kasutada erinevate juhtumite jaoks. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Need to optimize database queries? Our developers and DBAs are here for you. <\/p>\n<p>\n<\/li>\n<li>\n<p>This can be utilized in QA testing to validate specific migrations before we deploy to production. We can also create specialized environments for QA with real data, allowing for testing of new features. This process takes seconds instead of waiting hours or even days in cases where thin clones aren\u2019t employed. <\/p>\n<p>\n<\/li>\n<li>\n<p>Additionally, if the company lacks an analytics system, we can allocate a thin clone of the production database for long queries or for special indexes that could be used in analytics.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5fb0944f063c981f27449d948a59b73b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>With this approach:<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>There is a low likelihood of errors in production since all changes have been tested on full-sized data. <\/p>\n<p>\n<\/li>\n<li>\n<p>We promote a culture of testing because there's no need to wait for hours for your own environment anymore. <\/p>\n<p>\n<\/li>\n<li>\n<p>There are no barriers or waiting times between tests. You can genuinely go and check. This improves the process as we accelerate development. <\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>\n<p>Refactoring will be reduced. Fewer bugs will reach production. We will spend less time refactoring later. <\/p>\n<p>\n<\/li>\n<li>\n<p>We can revert irreversible changes. This is not available in standard approaches. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<ol>\n<li>This is beneficial because we share resources for testing environments. <\/li>\n<\/ol>\n<p><\/p>\n<p>It's already good, but what else could we enhance?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/d692f76b865c18ed4c178d1a1440774b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>With such a system, we can significantly lower the entry barrier to this type of testing. <\/p>\n<p><\/p>\n<p>Currently, there is a vicious circle where a developer must become an expert to access real full-scale data. They have to be trusted with such access. <\/p>\n<p><\/p>\n<p>But how can one grow without it? And what if you only have access to a very small set of test data? Then you won't gain real experience. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/221f7b02294878aea1d0ebe6df5d9717.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>How to break out of this cycle? As the first interface, convenient for developers at any level, we chose a Slack bot. However, it can be any other interface. <\/p>\n<p><\/p>\n<p>Mida see v\u00f5imaldab teha? Saame v\u00f5tta konkreetse p\u00e4ringu ja saata selle andmebaasi spetsiaalsesse kanalisse. Me loome automaatselt sekunditega \u00f5hukese klooni. K\u00e4itame selle p\u00e4ringu. Kogume metrikad ja soovitused. N\u00e4itame visualiseerimist. Ja edasi j\u00e4\u00e4b see kloon selleks, et saaksime p\u00e4ringut kuidagi optimeerida, lisada indekseid jne. <\/p>\n<p><\/p>\n<p>Slack pakub meile ka koost\u00f6\u00f6v\u00f5imalusi paketi sees. Kuna see on lihtsalt kanal, saab seal p\u00e4ringu kohta arutelu alustada, pingsida oma kolleege, DBA-sid, kes on ettev\u00f5ttes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/b4a6410b625107c5bbbf57c021159914.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuid muidugi on ka probleeme. Kuna see on reaalses maailmas ja kasutame serverit, kus toimetame mitme klooniga, peame piirama m\u00e4lu ja protsessoriv\u00f5imsuse hulka, mis kloonidele on k\u00e4ttesaadav. <\/p>\n<p><\/p>\n<p>Aga et need testid oleksid realistlikud, tuleb see probleem kuidagi lahendada. <\/p>\n<p><\/p>\n<p>On selge, et oluline aspekt on andmete \u00fchtekuuluvus. Kuid see on meil juba olemas. Soovime saavutada sama konfiguratsiooni. Ja saame anda praktiliselt sama konfiguratsiooni. <\/p>\n<p><\/p>\n<p>\u00c4ge oleks omada sama riistvara nagu tootmises, kuid see v\u00f5ib erineda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5efae55189175262d56a33b89c55ed29.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tuletame meelde, kuidas Postgres m\u00e4lu kasutab. Meil on kaks vahem\u00e4lu. \u00dcks failis\u00fcsteemist ja teine, Postgresi enda, st Shared Buffer Cache. <\/p>\n<p><\/p>\n<p>Oluline on m\u00e4rkida, et Shared Buffer Cache eraldatakse Postgresi k\u00e4ivitamisel s\u00f5ltuvalt sellest, millise suuruse m\u00e4\u00e4rate konfiguratsioonis. <\/p>\n<p><\/p>\n<p>Teine vahem\u00e4lu kasutab kogu saadaval oleva ruumi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f1f3c85e786649f83d5c17e6724086a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kui teeme mitu klooni \u00fchel masinal, siis hakkame j\u00e4rk-j\u00e4rgult m\u00e4lu t\u00e4itma. Ja ideaalis peaks Shared Buffer Cache olema 25% kogu m\u00e4lu mahust, mis masinal on saadaval. <\/p>\n<p><\/p>\n<p>Selgub, et kui me seda parameetrit ei muuda, saame \u00fchel masinal k\u00e4itada ainult 4 instantsi, st 4 \u00fcsna \u00f5hukest klooni. Ja see pole muidugi hea, sest tahame neid palju rohkem. <\/p>\n<p><\/p>\n<p>Teiselt poolt kasutatakse Buffer Cache'i p\u00e4ringute t\u00e4itmiseks, indeksite jaoks, st plaan s\u00f5ltub sellest, kui suured meie vahem\u00e4lud on. Ja kui me lihtsalt v\u00f5tame selle parameetri ja v\u00e4hendame seda, siis v\u00f5ivad meie plaanid oluliselt muutuda.<\/p>\n<p><\/p>\n<p>N\u00e4iteks, kui meil on produkus suur vahem\u00e4lu, siis Postgres eelistab indeksi kasutamist. Kui ei, siis kasutatakse SeqScan'i. Mis oleks m\u00f5te, kui need plaanid ei klappiks? <\/p>\n<p><\/p>\n<p>Kuid siin j\u00f5uame selleni, et t\u00f5eliselt ei s\u00f5ltu Postgres'e plaan konkreetsest Shared Buffer suurusest, vaid sellest, mida defineerib effective_cache_size.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/1457fd7b65c342f64733b952130125cf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Effective_cache_size on eeldatav vahem\u00e4lu maht, mis meile k\u00e4ttesaadav on, st Buffer Cache ja failis\u00fcsteemi vahem\u00e4lu kogumaht. See m\u00e4\u00e4ratakse seadistustes. Ja see m\u00e4lu ei ole eraldatud. <\/p>\n<p><\/p>\n<p>Selle parameetri t\u00f5ttu saame me Petta Postgres'e, \u00f6eldes, et meil on tegelikult palju andmeid k\u00e4ttesaadavad, isegi kui meil neid andmeid pole. Niiviisi kattuvad plaanid t\u00e4ielikult tootmisest. <\/p>\n<p><\/p>\n<p>Aga see v\u00f5ib m\u00f5jutada ajastust. Optimeerime p\u00e4ringud ajastuse j\u00e4rgi, kuid oluline on, et ajastus s\u00f5ltub paljuski teguritest: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>See s\u00f5ltub hetkelisest koormusest producuses. <\/p>\n<p>\n<\/li>\n<li>\n<p>See s\u00f5ltub masina omadustest. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Ja see on kaudne parameeter, kuid t\u00f5eliselt saame optimeerida just andmete hulga p\u00f5hjal, mida see p\u00e4ring loeb, et saavutada tulemus. <\/p>\n<p><\/p>\n<p>Ja kui soovite, et ajastus oleks l\u00e4hedane sellele, mida n\u00e4eme tootmises, peame v\u00f5tma maksimaalselt sarnase raudvara ja v\u00f5ib-olla isegi rohkem, et k\u00f5ik kloonid \u00e4ra mahuksid. Kuid see on kompromiss, see t\u00e4hendab, et saate samasugused plaanid, n\u00e4ete, kui palju andmeid konkreetne p\u00e4ring loeb, ja saate j\u00e4reldada \u2013 kas see p\u00e4ring on hea (v\u00f5i migratsioon) v\u00f5i halb, ja seda tuleb veel optimeerida. <\/p>\n<p><\/p>\n<p>Anal\u00fc\u00fcsime, kuidas Joe optimeerimise protsess tegelikult k\u00e4ib. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 1 terabait. Ja me tahame arvutada v\u00e4rskete postituste arvu, millel on \u00fcle 10 meeldimise. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/befd651abed6688127f52db39138a4be.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kirjutame s\u00f5numi kanalisse, kloon avanes meie jaoks. Ja me n\u00e4eme, et selline p\u00e4ring t\u00f6\u00f6tab 2,5 minuti jooksul. See on esimene, mida me m\u00e4rkame.<\/p>\n<p><\/p>\n<p>Joe n\u00e4itab automaatseid soovitusi, mis p\u00f5hinevad plaanil ja m\u00f5\u00f5dikutel. <\/p>\n<p><\/p>\n<p>Me n\u00e4eme, et p\u00e4ring t\u00f6\u00f6tleb liiga palju andmeid, et saada suhteliselt v\u00e4ike rida. Ja on vajalik m\u00f5ni spetsialiseeritud indeks, kuna 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 Stansler (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 faili vahem\u00e4lust v\u00f5i isegi diskilt. Ja see pole hea, kuna saime k\u00e4tte vaid 142 rida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/30aaff5da2536fa27efc6591f645d6f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja tundub, et meil on siin indeksiskane ja see pidi kiiresti t\u00f6\u00f6tama, kuid kuna filtreerisime liiga palju ridu (me pidime neid arvestama), t\u00f6\u00f6tas p\u00e4ring aeglaselt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 plaani t\u00f5ttu, kuna p\u00e4ringu tingimused ja indeksi tingimused ei \u00fchtinud osaliselt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/196ca5116e641c72bc1009e97c390bc7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Proovime teha indeksi t\u00e4psemaks 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 Stansler (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 piisavalt aega, kuid n\u00fc\u00fcd kontrollime p\u00e4ringut ja n\u00e4eme, et aeg, mis oli 2,5 minutit, on n\u00fc\u00fcd vaid 156 millisekundit, mis on \u00fcsna hea. Ja loeme vaid 6 megabaiti andmeid.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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 indeksiskane.<\/p>\n<p><\/p>\n<p>Teine oluline lugu on see, et me tahame plaani esitada arusaadavamal viisil. Oleme rakendanud visualiseerimist Flame Graphs abil. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (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, keerukam p\u00e4ring. Flame Graph-e ehitame kahest parameetrist: andmete hulgast, mida konkreetne s\u00f5lm on anal\u00fc\u00fcsinud, ja ajast, st s\u00f5lme t\u00e4itmise ajast. <\/p>\n<p><\/p>\n<p>Siin saame t\u00e4pselt v\u00f5rrelda s\u00f5lmi. On selge, milline neist n\u00f5uab rohkem v\u00f5i v\u00e4hem, mis on tavaliselt teistes visualiseerimise meetodites keeruline. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/c477d2f32241c69eb0b38ef45ff4708b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Muidugi, k\u00f5ik tunnevad explain.depesz.com'i. Selle visualiseerimise hea omadus on see, et me salvestame tekstiplani ja toome v\u00e4lja m\u00f5ned peamised parameetrid tabelis, et saaksime need j\u00e4rjestada. <\/p>\n<p><\/p>\n<p>Ja arendajad, kes pole veel sellesse teemasse s\u00fcvenenud, kasutavad samuti explain.depesz.com'i, kuna neile on lihtsam aru saada, millised m\u00f5\u00f5dikud on olulised ja millised mitte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a7352b5b9abf27294375c78bec69d4d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On uus l\u00e4henemine visualiseerimisele \u2013 explain.dalibo.com. Nad teevad puu struktuuri visualiseerimise, kuid siin on v\u00e4ga keeruline s\u00f5lmi omavahel v\u00f5rrelda. Siin on hea m\u00f5ista struktuuri, kuid kui p\u00e4ring on suur, tuleb kerida edasi-tagasi, kuid 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 Stansler (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 tundub ebaselge, saame Slackis selle k\u00fcsimuse oma kolleegide seas arutada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bot Joe. Anatoli Stansler (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/14b8f9c3401ecb68ac1ef56bc0cb0fa5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me arvame, et on oluline testida t\u00e4ismahus andmete peal. Selleks oleme loonud t\u00f6\u00f6riista Update Database Lab, mis on saadaval avatud l\u00e4htekoodiga. Samuti v\u00f5ite kasutada bot Joe-d. Saate selle kohe endale v\u00f5tta ja rakendada. K\u00f5ik juhendid on seal saadaval. <\/p>\n<p><\/p>\n<p>Oluline on ka m\u00e4rkida, et see lahendus iseenesest ei ole revolutsiooniline, kuna Delphix on olemas, aga see on ettev\u00f5tetasandi lahendus. See on t\u00e4iesti suletud ja maksab v\u00e4ga palju. Meie spetsialiseerume just Postgressile. K\u00f5ik meie tooted on avatud l\u00e4htekoodiga. 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 mulle, kuna ma lahendasin umbes sellise \u00fclesande m\u00f5ni aeg tagasi. Seet\u00f5ttu on mul mitmeid k\u00fcsimusi. Loodan, et saan v\u00e4hemalt m\u00f5ned neist esitada.<\/em><\/p>\n<p><\/p>\n<p><em>Kuidas te kuvatavat ruumi selle keskkonna jaoks arvutate? Tehnoloogia t\u00e4hendab, et teatud asjaoludel v\u00f5ivad teie kloonid suureneda maksimaalse suuruseni. Lihtsalt \u00f6eldes, kui teil on k\u00fcmme terabaiti andmeid ja 10 klooni, siis on kerge modelleerida olukorda, kus iga kloon kannab 10 unikaalset andmestikku. Kuidas te seda ruumi arvutate, st seda delta, millest olete r\u00e4\u00e4kinud, kus need kloonid elavad?<\/em><\/p>\n<p><\/p>\n<p>Hea k\u00fcsimus. Siin on oluline j\u00e4lgida konkreetseid kloone. Ja kui kloonil toimub m\u00f5ni liiga suur muutus ja see hakkab suurenema, siis saame k\u00f5igepealt kasutajale selle kohta hoiatuse anda v\u00f5i kohe selle klooni peatada, et meil ei tekiks t\u00f5rkeolukorda. <\/p>\n<p><\/p>\n<p><em>Jah, mul on t\u00e4iendav k\u00fcsimus. Kuidas te tagate nende moodulite eluts\u00fckli? Meil on see probleem ja t\u00e4iesti eraldi lugu. Kuidas see toimub?<\/em><\/p>\n<p><\/p>\n<p>Igal kloonil on mingi ttl. \u00dcldiselt on meil fikseeritud ttl. <\/p>\n<p><\/p>\n<p><em>Mis see on, kui saladus ei ole?<\/em><\/p>\n<p><\/p>\n<p>1 tund, stabiilselt \u2013 1 tund. Kui seda ei kasutata, siis h\u00e4vitame selle. Siiski pole siin \u00fcllatust, kuna saame kloone sekunditega luua. Ja kui seda taas vajatakse, siis olge lahkesti. <\/p>\n<p><\/p>\n<p><em>Mulle on tehnoloogiate valik samuti huvitav, kuna me, n\u00e4iteks, kasutame paralleelselt mitmeid meetodeid erinevatel p\u00f5hjustel. Miks just ZFS? Miks te ei kasutanud LVM-i? Te mainisite, et LVM-iga olid probleemid. Millised need probleemid olid? Minu arvates on k\u00f5ige optimaalsem lahendus, mis p\u00f5hineb s\u00fcdamekompleksil, arvestades j\u00f5udlust.<\/em> <\/p>\n<p><\/p>\n<p><em>Mis on peamine probleem ZFS-iga? See, et peate k\u00e4ivitama selle \u00fchel hostil, mis t\u00e4hendab, et k\u00f5ik instances elavad \u00fche operatsioonis\u00fcsteemi raamides. Ja s\u00fcdamekompleksi puhul saate erinevat riistvara \u00fchendada. Kitsaskohad on ainult need plokid, mis on s\u00fcdamekompleksis. Ja huvitav on just tehnoloogiate valiku k\u00fcsimus. Miks mitte LVM?<\/em><\/p>\n<p><\/p>\n<p>Conkreetsem LVM-i arutame kohtumisel. Andmesalvestuslahendused \u2013 see on lihtsalt kulukas. ZFS-s\u00fcsteemi saame rakendada igal pool. Sa v\u00f5id selle oma masinas \u00fcles seada. Lihtsalt laadi alla repositoorium ja k\u00e4ivita see. ZFS sobib praktiliselt k\u00f5igile, kui r\u00e4\u00e4gime Linuxist. See t\u00e4hendab, et saame v\u00e4ga paindliku lahenduse. Ja ZFS annab juba iseenesest v\u00e4ga palju funktsioone. Sa saad laadida sinna l\u00f5pmatus koguses andmeid, \u00fchendada palju kettaid, on olemas snapshot'id. Ja nagu ma juba \u00fctlesin, on selle haldamine v\u00e4ga lihtne. See on t\u00f5eliselt mugav kasutada. See on t\u00f5estatud, tal on palju aastaid kogemust. Sellel on suur kasvav kogukond. ZFS on v\u00e4ga usaldusv\u00e4\u00e4rne lahendus. <\/p>\n<p><\/p>\n<p>Nikolai Samokhvalov: Kas ma saaksin veel kommenteerida? Minu nimi on Nikolai, t\u00f6\u00f6tan koos Anatoliiga. Olen n\u00f5us, et andmesalvestuslahendused on suurep\u00e4rased. Ja m\u00f5nel meie kliendil on olemas Pure Storage jne. <\/p>\n<p><\/p>\n<p>Anatoli t\u00f5i \u00f5igesti esile, et meie fookus on modulaarsete lahenduste loomisel. Tulevikus saame rakendada \u00fche liidese \u2013 tee snapshot, tee kloon, h\u00e4vita kloon. See on k\u00f5ik lihtne. Ja andmesalvestuslahendus on suurep\u00e4rane, kui see on olemas.<\/p>\n<p><\/p>\n<p>Aga ZFS on kergesti k\u00e4tte saadaval. Piisab DelPhixist, neil on 300 klienti. Neist Fortune 100 seas on 50 klienti, st nad sihivad NASA-d jne. On aeg, et see tehnoloogia oleks k\u00f5ikidele kergesti k\u00e4ttesaadav. Seet\u00f5ttu on meil avatud l\u00e4htekoodiga tuum. Meil on osa liidesest, mis ei ole avatud l\u00e4htekoodiga. See on platvorm, mida me tutvustame. Aga me tahame, et k\u00f5igil oleks sellele ligip\u00e4\u00e4s. Soovime teha revolutsiooni, et k\u00f5ik testijad saaksid l\u00f5petada arvutite peal spekuleerimise. Peame kirjutama SELECT ja kohe n\u00e4gema, et see on aeglane. Piisab ootamisest, kuni DBA sellest r\u00e4\u00e4gib. See on meie peamine eesm\u00e4rk. Ja ma usun, et me j\u00f5uame selleni. Ja selle ehitame, et see oleks k\u00f5igile. Seet\u00f5ttu ZFS, sest see saab olema igal pool kergesti k\u00e4tte saadav. Ait\u00e4h kogukonnale probleemide lahendamise eest ja avatud l\u00e4htekoodiga litsentsi eest jne. <\/p>\n<p><\/p>\n<p><em>Tere! Ait\u00e4h ettekande eest! Minu nimi on Maxim. Me lahendasime samasuguseid probleeme. Meie juures on need lahendatud. Kuidas jagate ressursse nende kloonide vahel? Iga kloon v\u00f5ib igal hetkel tegeleda oma asjadega: \u00fcks testib \u00fchte, teine teist, kellelgi ehitatakse indeksit, kellelgi on k\u00e4imas keeruline t\u00f6\u00f6. Ja kui CPU-d saab veel jagada, siis kuidas jagate IO-d? See on esimene k\u00fcsimus.<\/em><\/p>\n<p><\/p>\n<p><em>Ja teine k\u00fcsimus seondub stendide erinevusele. Oletame, et mul on siin ZFS ja k\u00f5ik on suurep\u00e4rane, aga kliendi prod keskkonnas on ext4, n\u00e4iteks. Kuidas sellisel juhul toimida?<\/em><\/p>\n<p><\/p>\n<p>K\u00fcsimused on t\u00f5esti head. Mainisin veidi seda probleemi, et jagame ressursse. Lahendus on j\u00e4rgmine. Kujutage ette, et testite staging keskkonnas. Seal v\u00f5ib samuti korraga tekkida olukord, kus keegi annab \u00fche koormuse, keegi teine teise. Ja l\u00f5puks n\u00e4ete veidraid m\u00f5\u00f5dikuid. Sama probleem v\u00f5ib esineda ka prod keskkonnas. Kui soovite m\u00f5nda p\u00e4ringut testida ja n\u00e4ete, et sellega on mingi probleem \u2013 see t\u00f6\u00f6tab aeglaselt, siis tegelikult pole probleem p\u00e4ringus, vaid selles, et on mingi paralleelne koormus. <\/p>\n<p><\/p>\n<p>Seet\u00f5ttu on oluline keskenduda sellele, milline on plaan, millised on sammud meie plaani raames ja kui palju andmeid me selleks t\u00f5stame. See, et meil on diskid, n\u00e4iteks, koormatud millegagi, m\u00f5jutab otseselt ajakava. Kuid saame andmete hulga p\u00f5hjal hinnata, kui koormav see p\u00e4ring on. Pole nii oluline, et samal ajal toimub veel m\u00f5ni t\u00e4itmine. <\/p>\n<p><\/p>\n<p><em>Mul on kaks k\u00fcsimust. See on t\u00f5esti lahe asi. Kas on olnud juhtumeid, kus andmed tootmises on kriitilise t\u00e4htsusega, n\u00e4iteks krediitkaardinumber? Kas on midagi valmis tehtud v\u00f5i on see eraldi \u00fclesanne? Ja teine k\u00fcsimus \u2013 kas MySQL jaoks on midagi sarnast?<\/em><\/p>\n<p><\/p>\n<p>Andmete osas. Me teeme obfuskatsiooni nii kaua, kui me seda ei tee. Aga kui te kasutate Joe'd, ja kui te ei anna arendajatele juurdep\u00e4\u00e4su, siis andmetele ligip\u00e4\u00e4su ei ole. Miks? Sest Joe ei n\u00e4ita andmeid. Ta n\u00e4itab ainult n\u00e4itajaid, plaane ja muud. Nii tehti teadlikult, kuna see on \u00fcks meie kliendi n\u00f5udmistest. Nad soovisid optimeerimise v\u00f5imalust, aga samas mitte anda k\u00f5igile hoolimatult ligip\u00e4\u00e4su. <\/p>\n<p><\/p>\n<p>MySQL-i kohta. Seda s\u00fcsteemi saab kasutada igasugusel otstarbel, mis salvestab oleku kettale. Ja kuna me tegeleme Postgres'iga, teeme praegu k\u00f5igepealt t\u00e4ielikku automatiseerimist Postgres'e jaoks. Me tahame automatiseerida andmete hankimist varukoopiast. Konfigureerime Postgres'i \u00f5igesti. Me teame, kuidas tagada, et plaanid kattuksid jms. <\/p>\n<p><\/p>\n<p>Kuna s\u00fcsteem on laiendatav, saab seda kasutada ka MySQL jaoks. Selliseid n\u00e4iteid leidub. Sarnane lahendus on ka Yandexil, kuid nad ei avalda seda kuskil. Nad kasutavad seda sisemiselt Yandex.Metriks. Ja seal ongi tegemist MySQL looga. Ent tehnoloogiad on samad, ZFS. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h ettekande eest! Mul on paar k\u00fcsimust. Mainisite, et kloonimist saab kasutada anal\u00fc\u00fctikas, n\u00e4iteks t\u00e4iendavate indeksite loomiseks. Kas saaksite r\u00e4\u00e4kida, kuidas see t\u00f6\u00f6tab?<\/em><\/p>\n<p><\/p>\n<p><em>Ja esitan kohe teise k\u00fcsimuse identsete standide ning plaanide osas. Aja s\u00f5ltub ka Postgres'i kogutud statistikatest. Kuidas te seda probleemi lahendate?<\/em><\/p>\n<p><\/p>\n<p>Konkreetsete juhtumite anal\u00fc\u00fctika osas meil pole veel kogemusi, kuid see v\u00f5imalus on olemas. Kui r\u00e4\u00e4gime indeksitest, siis kujutage ette, et p\u00e4ringut aetakse l\u00e4bi tabeli, kus on sadu miljoneid kirjeid ja veergu, mis tavaliselt prod-is ei ole indekseeritud. Ja me tahame seal andmeid arvutada. Kui seda p\u00e4ringut prod-is korraldada, v\u00f5ib esineda v\u00f5imalus, et prod-is on peatus, kuna p\u00e4ring t\u00f6\u00f6tab seal minut aega. <\/p>\n<p><\/p>\n<p>Selge, teeme peene klooni, mida ei ole hirmus m\u00f5neks minutiks peatada. Ja et anal\u00fc\u00fctikat oleks mugavam j\u00e4lgida, lisame indeksid neisse veergudesse, kus meid andmed 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 muudetud andmetest teeme snapshot'id, ja seej\u00e4rel taastume sellest snapshot'ist ning edastame uusi p\u00e4ringuid. See t\u00e4hendab, et saame luua uusi kloone juba eelnevalt m\u00e4\u00e4ratud indeksitega.<\/p>\n<p><\/p>\n<p>Statistika kohta, kui taastume varukoopiast v\u00f5i teeme replikatsiooni, siis meie statistika j\u00e4\u00e4b t\u00e4pselt samaks. Sest toome tagasi kogu andmekonstruktsiooni, st andmed koos k\u00f5ikide statistikam\u00f5\u00f5dikute ja metrikatega. <\/p>\n<p><\/p>\n<p>Siin on teine probleem. Kui kasutate pilvelahendust, on seal saadaval ainult loogilised dump'id, sest Google ja Amazon ei luba f\u00fc\u00fcsilist koopiat v\u00f5tta. See toob kaasa sellise probleemi. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h esituse eest. Siin k\u00f5las kaks head k\u00fcsimust MySQL ja ressursside jagamise kohta. Kuid p\u00f5him\u00f5tteliselt on see teema, mis ei puuduta ainult konkreetseid andmebaase, vaid k\u00e4sitleb laiemalt failis\u00fcsteemi. Seega peaksid ka ressursside jagamise k\u00fcsimused olema sealt l\u00e4htuvad, mitte alla viimase, et see on Postgres, vaid failis\u00fcsteemi tasandil. <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/dts-dronten\/\"   title=\"serveril\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2602\">serveril<\/a>, instance.<\/em> <\/p>\n<p><\/p>\n<p><em>Minu k\u00fcsimus on pisut teistsugune. See on l\u00e4hedasem andmebaasi mitmekihilisusele, kus on mitu kihti. N\u00e4iteks oleme seadistanud k\u00fcmnete terabaitide suuruse pildi uuendamise, meie replikatsioon on t\u00f6\u00f6s. Me kasutame selle lahendust andmebaasides. Replikatsioon toimub, andmete uuendamine aset leiab. Samal ajal t\u00f6\u00f6tab 100 t\u00f6\u00f6tajat, kes pidevalt k\u00e4ivitavad neid erinevaid hetkepilte. Mida teha? Kuidas v\u00e4ltida konflikte, et nad k\u00e4ivitasid \u00fchte, kuid siis failis\u00fcsteem muudeti ja need hetkepildid k\u00f5ik katki l\u00e4ksid?<\/em> <\/p>\n<p><\/p>\n<p>Need ei l\u00e4he katki, sest ZFS t\u00f6\u00f6tab just niimoodi. Me saame hoida \u00fches voos eraldi failis\u00fcsteemi muudatused, mis tulevad replikatsiooni kaudu. Ja vanade andmeversioonide peal hoida kloone, mida arendajad kasutavad. Ja see t\u00f6\u00f6tab meil h\u00e4sti, k\u00f5ik on korras.<\/p>\n<p><\/p>\n<p><em>Tundub, et v\u00e4rskendus toimub lisakihtina, ja k\u00f5ik uued pildid p\u00f5hinevad just sellel kihil, eks?<\/em> <\/p>\n<p><\/p>\n<p>Eelmised kihid, mis olid varasemate replikatsioonide k\u00e4igus tehtud. <\/p>\n<p><\/p>\n<p><em>Eelmised kihid kaovad, kuid nad viitavad vanale kihile, ja uued pildid v\u00f5tavad nad viimasest kihist, mis saadi v\u00e4rskenduse k\u00e4igus?<\/em><\/p>\n<p><\/p>\n<p>\u00dcldiselt, jah. <\/p>\n<p><\/p>\n<p><em>Seega, meil tuleb hulganisti kihte. Ja aja jooksul tuleb neid kokku suruda?<\/em><\/p>\n<p><\/p>\n<p>Jah, see on \u00f5ige. On mingi aeg. Me salvestame n\u00e4dalased snappid. See s\u00f5ltub sellest, kui palju ressursse teil on. Kui teil on v\u00f5imalus palju andmeid salvestada, saate snappe pika aja jooksul hoida. Need ei kustuta end ise. Andmete rikkumist ei toimu. Kui snappid on ajale jalgu j\u00e4\u00e4nud, nagu me arvame, s.t. 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 teema osas. Te \u00fctlesite, et tellija ei tahtnud andmetele iga\u00fchel ligip\u00e4\u00e4su anda. Rangelt \u00f6eldes, kui inimesel on Explain Analyze tulemus, siis ta v\u00f5ib andmeid piiluda.<\/em> <\/p>\n<p><\/p>\n<p>Just so. For example, we can write: \"SELECT FROM WHERE email = some value\". That is, we won't see the actual data, but we can look at some indirect signs. This needs to be understood. However, on the other hand, everything is visible. We have log auditing, and we have oversight from other colleagues who can also see what the developers are doing. If someone tries to do that, the security service will come to them and address the issue. <\/p>\n<p><\/p>\n<p><em>Good afternoon! Thank you for the presentation! I have a quick question. If Slack is not used in the company, is there any current connection to it, or can developers deploy instances to connect a test application to the databases?<\/em><\/p>\n<p><\/p>\n<p>Currently, there is a connection to Slack, meaning there's no other messenger being used, but we really want to support other messengers as well. What can you do? You can deploy a DB Lab without Joe, access it via REST API or our platform, create clones, and connect using PSQL. But that can only be done if you are willing to give your developers access to the data, as there won't be any screen in that case. <\/p>\n<p><\/p>\n<p><em>I don\u2019t need this intermediary; I need that capability.<\/em><\/p>\n<p><\/p>\n<p>Siis \u2013 jah, see on v\u00f5imalik.<\/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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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:description\" content=\"\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\" \/>\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 Stanler (Postgres.ai) | ProHoster","description":"Kuidas backend-arendaja m\u00f5istab, et SQL-k\u00e4sk t\u00f6\u00f6tab h\u00e4sti \u00abprod\u00bb keskkonnas? Suurtes v\u00f5i kiiresti kasvavates ettev\u00f5tetes ei ole juurdep\u00e4\u00e4s \u00abprodile\u00bb kaugel k\u00f5igile. 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 \u2014 Joe. Ta on juba edukalt","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:description":"\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","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"},"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}]}}