{"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\/lv\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","title":{"rendered":"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/3bb5cc6d6be1699fc72342a74aa4020a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u0101 backend izstr\u0101d\u0101t\u0101js saprot, ka SQL vaic\u0101jums labi darbosies \"prod\"? Liel\u0101s vai strauji augo\u0161\u0101s kompanij\u0101s piek\u013cuve \"prod\" nav pieejama visiem. Un pat ar piek\u013cuvi ne visus vaic\u0101jumus var bezbail\u012bgi p\u0101rbaud\u012bt, turkl\u0101t datub\u0101zes kopiju izveido\u0161ana bie\u017ei aiz\u0146em stundas. Lai risin\u0101tu \u0161\u012bs probl\u0113mas, m\u0113s izveidoj\u0101m m\u0101ksl\u012bgu DBA \u2014 Joe. Vi\u0146\u0161 jau ir sekm\u012bgi ieviests vair\u0101k\u0101s kompanij\u0101s un pal\u012bdz ne vienam desmitam izstr\u0101d\u0101t\u0101ju. <\/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-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/48e63de499e46be4be19aa8c926e5716.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sveiki visiem! Mani sauc Anatolijs Stansler. Es str\u0101d\u0101ju uz\u0146\u0113mum\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/postgres.ai\/\">Postgres.ai<\/a><\/noindex>. M\u0113s pied\u0101v\u0101jam risin\u0101jumus, kas pa\u0101trina izstr\u0101des procesu, nov\u0113r\u0161ot aiztures, kas saist\u012btas ar Postgres darbu, izstr\u0101d\u0101t\u0101jiem, DBA un QA.<\/p>\n<p><\/p>\n<p>Mums ir lieliski klienti, un \u0161odien da\u013ca no m\u016bsu prezent\u0101cijas b\u016bs velt\u012bta gad\u012bjumiem, ar kuriem esam sask\u0101ru\u0161ies, str\u0101d\u0101jot ar vi\u0146iem. Es past\u0101st\u012b\u0161u, k\u0101 m\u0113s pal\u012bdz\u0113j\u0101m vi\u0146iem atrisin\u0101t diezgan nopietnas probl\u0113mas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5bd7d2538a4940afb28d6375a9516760.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kad m\u0113s veicam izstr\u0101di un veicam sare\u017e\u0123\u012btas slodzes migr\u0101cijas, uzdodam sev jaut\u0101jumu: \"Vai migr\u0101cija nostr\u0101d\u0101s?\". M\u0113s izmantojam apskatus, m\u0113s izmantojam pieredz\u0113ju\u0161o kol\u0113\u0123u un DBA ekspertu zin\u0101\u0161anas. Un vi\u0146i var teikt \u2013 vai t\u0101 nostr\u0101d\u0101s vai n\u0113. <\/p>\n<p><\/p>\n<p>Bet, iesp\u0113jams, b\u016btu lab\u0101k, ja m\u0113s var\u0113tu pa\u0161i to p\u0101rbaud\u012bt uz pilna apjoma kopij\u0101m. Un \u0161odien m\u0113s tie\u0161i run\u0101sim par to, k\u0101di ir \u0161obr\u012bd pieejamie pieejas veidi test\u0113\u0161anai un k\u0101 to var lab\u0101k dar\u012bt un ar k\u0101diem instrumentiem. T\u0101pat m\u0113s run\u0101sim par to, k\u0101di ir \u0161\u0101du pieeju plusi un m\u012bnusi, un ko m\u0113s varam uzlabot \u0161aj\u0101 jom\u0101. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/aca9f4c4fbbfc6db9c24f862216fb5d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kur\u0161 k\u0101dreiz tie\u0161i uz prod ir veicis indeksus vai veicis k\u0101das izmai\u0146as? Sal\u012bdzino\u0161i daudz. Un cik bie\u017ei tas ir novedis pie datu zuduma vai d\u012bkst\u0101ves? T\u0101p\u0113c jums ir paz\u012bstama \u0161\u012b s\u0101pe. Paldies Dievam, ir dubl\u0113jumi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7795bf3cb1f3f6f9919ca42758fa51e9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pirmais pieejas veids ir test\u0113\u0161ana prod. Vai tas, kad izstr\u0101d\u0101t\u0101js s\u0113\u017e ar savu viet\u0113jo ma\u0161\u012bnu, vi\u0146am ir test\u0113\u0161anas dati, ir k\u0101da ierobe\u017eota izlase. M\u0113s izlai\u017eam uz prod, un rodas \u0161\u0101da situ\u0101cija.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/05b120bf57904f553422f419337d5220.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tas ir s\u0101p\u012bgi, tas ir d\u0101rgi. Varb\u016bt t\u0101 lab\u0101k nedar\u012bt. <\/p>\n<p><\/p>\n<p>Bet k\u0101 lab\u0101k r\u012bkoties? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a8727bc2cd217d89edaf9df8588306d9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0145emsim staging un novirz\u012bsim uz turieni k\u0101du da\u013cu no prod. Vai lab\u0101kaj\u0101 gad\u012bjum\u0101 \u0146emsim patiesu prod, visus datus. Un p\u0113c tam, kad esam izstr\u0101d\u0101ju\u0161i lok\u0101li, papildus p\u0101rbaud\u012bsim ar\u012b staging. <\/p>\n<p><\/p>\n<p>Tas \u013caus mums nov\u0113rst k\u0101du da\u013cu k\u013c\u016bdu, t.i., nepie\u013caut t\u0101s uz prod. <\/p>\n<p><\/p>\n<p>K\u0101das ir probl\u0113mas? <\/p>\n<p><\/p>\n<ul>\n<li>Probl\u0113ma ir t\u0101, ka m\u0113s \u0161o staging kop\u0101 dal\u0101m ar kol\u0113\u0123iem. Un \u013coti bie\u017ei notiek t\u0101, ka tu veic k\u0101du izmai\u0146u, un p\u0113k\u0161\u0146i \u2013 nav nevienu datu, darbs v\u0113j\u0101. Staging bija vair\u0101ku terabaitu izm\u0113r\u0101. Un ir j\u0101gaida, kam\u0113r tas atkal uzs\u0101ksies. Un m\u0113s nolemjam, ka to uzlabosim r\u012bt. Viss, m\u016bsu izstr\u0101de ir apst\u0101jusies. <\/li>\n<li>Un, protams, tur str\u0101d\u0101 daudz kol\u0113\u0123u, daudz komandu. Un ir j\u0101saska\u0146o roku darb\u0101. Tas ir ne\u0113rti. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/ad4612f2b06ac09e666e33196d898a79.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un j\u0101saka, ka mums ir tikai viena iesp\u0113ja, viens \u0161\u0101viens, ja m\u0113s v\u0113lamies veikt k\u0101das izmai\u0146as datu b\u0101z\u0113, pieskarties datiem, main\u012bt strukt\u016bru. Un, ja kaut kas noiet greizi, ja migr\u0101cij\u0101 bija k\u013c\u016bda, tad m\u0113s \u0101tri vairs nevar\u0113sim atgriezties. <\/p>\n<p><\/p>\n<p>Tas ir lab\u0101k nek\u0101 iepriek\u0161\u0113j\u0101 pieeja, bet joproj\u0101m past\u0101v liela iesp\u0113ja, ka k\u0101da k\u013c\u016bda non\u0101ks ra\u017eo\u0161anas vid\u0113.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/73faffc3ef6e368a0901145c48b903b1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kas mums trauc\u0113 dot katram izstr\u0101d\u0101t\u0101jam test\u0113\u0161anas vid\u0113, piln\u012bgu kopiju? Es dom\u0101ju, ka ir skaidrs, kas trauc\u0113. <\/p>\n<p><\/p>\n<p>Kam ir datu b\u0101ze, kas p\u0101rsniedz terabaitu? Vair\u0101k nek\u0101 pusei z\u0101les. <\/p>\n<p><\/p>\n<p>Un, protams, ir skaidrs, ka uztur\u0113t ma\u0161\u012bnas katram izstr\u0101d\u0101t\u0101jam, kad ir tik liela ra\u017eo\u0161ana, ir \u013coti d\u0101rgi, turkl\u0101t tas aiz\u0146em ilgu laiku. <\/p>\n<p><\/p>\n<p>Mums ir klienti, kuri sapratu\u0161i, ka ir \u013coti svar\u012bgi test\u0113t visas izmai\u0146as uz piln\u0101m kopij\u0101m, bet vi\u0146iem datu b\u0101ze ir maz\u0101ka par terabaitu, un nav resursu, lai katram izstr\u0101d\u0101t\u0101jam uztur\u0113tu test\u0113\u0161anas vidi. T\u0101p\u0113c vi\u0146iem ir j\u0101lejupiel\u0101d\u0113 dubl\u0113jumi lok\u0101li uz ma\u0161\u012bnu un j\u0101veic test\u0113\u0161ana \u0161\u0101d\u0101 veid\u0101. Tas aiz\u0146em lielu laiku. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/8c1c804db71ffb5b79b5284670b3427b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pat ja j\u016bs to dar\u0101t iek\u0161\u0113j\u0101 infrastrukt\u016br\u0101, lejupl\u0101d\u0113t vienu terabaitu datu stund\u0101 \u2013 tas jau ir \u013coti labi. Bet vi\u0146i izmanto lo\u0123iskos dubl\u0113jumus, vi\u0146i lejupiel\u0101d\u0113 lok\u0101li no m\u0101ko\u0146a. Vi\u0146u \u0101trums ir apm\u0113ram 200 gigabaiti stund\u0101. Un v\u0113l ir j\u0101\u0146em laiks, lai no lo\u0123isk\u0101 dubl\u0113juma atv\u0113rts, uzliktu indeksus utt.<\/p>\n<p><\/p>\n<p>Bet vi\u0146i \u0161o pieeju izmanto, jo tas \u013cauj uztur\u0113t ra\u017eo\u0161anas vidi uzticamu. <\/p>\n<p><\/p>\n<p>Ko m\u0113s \u0161eit varam dar\u012bt? Apskat\u012bsim, k\u0101 padar\u012bt test\u0113\u0161anas vid\u0113 l\u0113tus un dot katram izstr\u0101d\u0101t\u0101jam savu individu\u0101lo test\u0113\u0161anas vidi.<\/p>\n<p><\/p>\n<p>Un tas ir iesp\u0113jams. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a763fc2677fe93df884b80561b5270a2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un \u0161aj\u0101 pieej\u0101, kad m\u0113s veidojam pl\u0101nus klonus katram izstr\u0101d\u0101t\u0101jam, m\u0113s to varam koplietot uz vienas ma\u0161\u012bnas. Piem\u0113ram, ja jums ir \u010detru terabaitu datu b\u0101ze un j\u016bs v\u0113laties to dot 10 izstr\u0101d\u0101t\u0101jiem, jums nav nepiecie\u0161ams 10 x \u010detru terabaitu datu b\u0101zes. Pietiks ar vienu ma\u0161\u012bnu, lai veidotu pl\u0101nus izol\u0113tus kopijas katram izstr\u0101d\u0101t\u0101jam, izmantojot vienu ma\u0161\u012bnu. K\u0101 tas darbojas, es past\u0101st\u012b\u0161u nedaudz v\u0113l\u0101k. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e8e9df7effb0d0241d90315f92b994c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Re\u0101ls piem\u0113rs:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Datu b\u0101ze \u2013 4,5 terabaiti. <\/p>\n<p>\n<\/li>\n<li>\n<p>M\u0113s varam ieg\u016bt neatkar\u012bgas kopijas 30 sekun\u017eu laik\u0101. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Nav j\u0101gaida uz test\u0113\u0161anas vidi un j\u0101pieder pie t\u0101, cik liela t\u0101 ir. J\u016bs varat to ieg\u016bt sekund\u0113s. Tas b\u016bs piln\u012bb\u0101 izol\u0113ts vid\u0113s, bet tie dal\u012bs datus starp sevi. <\/p>\n<p><\/p>\n<p>Tas ir lieliski. \u0160eit m\u0113s run\u0101jam par ma\u0123iju un paral\u0113lo visumu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/87e6a7e45548ed5dabd4fad01ea70616.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u016bsu gad\u012bjum\u0101 tas darbojas ar OpenZFS sist\u0113mu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/e75fed43703e26152a5a85f807064cb4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenZFS ir copy-on-write failu sist\u0113ma, kas pati no kastes atbalsta snapshots un klonus. T\u0101 ir uzticama un m\u0113rogojama. To ir \u013coti viegli p\u0101rvald\u012bt. To var uzst\u0101d\u012bt burtiski ar div\u0101m komand\u0101m. <\/p>\n<p><\/p>\n<p>Ir ar\u012b citas iesp\u0113jas:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>LVM,<\/p>\n<p>\n<\/li>\n<li>\n<p>SAS (piem\u0113ram, Pure Storage).<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Database Lab, par kuru es run\u0101ju, ir modul\u0101rs. To var realiz\u0113t, izmantojot \u0161\u012bs iesp\u0113jas. Bet pagaid\u0101m m\u0113s koncentr\u0113jamies uz OpenZFS, jo konkr\u0113ti ar LVM bija probl\u0113mas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/41a49f6760ee96b55f49606f8e453992.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u0101 tas darbojas? T\u0101 viet\u0101, lai katru reizi p\u0101rrakst\u012btu datus, kad m\u0113s tos main\u0101m, m\u0113s tos saglab\u0101jam, vienk\u0101r\u0161i atz\u012bm\u0113jot, ka \u0161ie jauni dati attiecas uz jaunu laika br\u012bdi, uz jaunu snapshot. <\/p>\n<p><\/p>\n<p>Un atliku\u0161aj\u0101 laik\u0101, kad m\u0113s v\u0113lamies atgriezties vai v\u0113lamies veidot jaunu klonu ar k\u0101du vec\u0101ku versiju, m\u0113s vienk\u0101r\u0161i sak\u0101m: \u201eOk, dodiet mums \u0161os datu blokos, kuri ir \u0161\u0101di atz\u012bm\u0113ti.\u201d <\/p>\n<p><\/p>\n<p>Un \u0161is lietot\u0101js str\u0101d\u0101s ar \u0161\u0101du datu kopu. Vi\u0146\u0161 tos pak\u0101peniski main\u012bs, veidos savus snapshots. <\/p>\n<p><\/p>\n<p>Un mums b\u016bs zaro\u0161ana. Katram izstr\u0101d\u0101t\u0101jam m\u016bsu gad\u012bjum\u0101 b\u016bs iesp\u0113ja ieg\u016bt savu klonu, kuru vi\u0146\u0161 redi\u0123\u0113, un tie dati, kas ir kop\u012bgi, tiks dal\u012bti starp visiem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/78efd8b87f6559839af20a939b7c89d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lai uzst\u0101d\u012btu \u0161\u0101du sist\u0113mu, j\u0101risina divas probl\u0113mas: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Pirma ir ir datu avots, no kura j\u016bs tos \u0146emsiet. Varat iestat\u012bt replik\u0101ciju no ra\u017eo\u0161anas. Varat izmantot jau izveidotos dubl\u0113jumus, kuriem, cerams, jums ir iestat\u012btas. WAL-E, WAL-G vai Barman. Un pat ja j\u016bs izmantojat k\u0101du m\u0101ko\u0146u risin\u0101jumu, piem\u0113ram, RDS vai Cloud SQL, j\u016bs varat izmantot lo\u0123iskos dubl\u0113jumus. Bet m\u0113s joproj\u0101m iesak\u0101m izmantot dubl\u0113jumus, jo \u0161\u0101d\u0101 pieej\u0101 saglab\u0101jas ar\u012b fizisk\u0101 failu strukt\u016bra, kas \u013caus b\u016bt tuv\u0101k taj\u0101m metriskaj\u0101m v\u0113rt\u012bb\u0101m, ko j\u016bs redz\u0113tu ra\u017eo\u0161an\u0101, lai identific\u0113tu eso\u0161\u0101s probl\u0113mas. <\/p>\n<p>\n<\/li>\n<li>\n<p>Otr\u0101 ir vieta, kur v\u0113laties mitin\u0101t Database Lab. Tas var b\u016bt m\u0101ko\u0146os, tas var b\u016bt uz vietas. \u0160eit svar\u012bgi teikt, ka ZFS atbalsta datu saspie\u0161anu. Un to tas \u013coti labi dara. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Iedom\u0101jieties, ka katram \u0161\u0101dam klonam, atkar\u012bb\u0101 no t\u0101m darb\u012bb\u0101m, kuras m\u0113s veicam ar datu b\u0101zi, att\u012bst\u012bsies k\u0101ds dev. \u0160im dev ar\u012b b\u016bs nepiecie\u0161ama vieta. Bet pateicoties tam, ka m\u0113s izmantojam datu b\u0101zi ar 4,5 terabaitiem, ZFS to saspiest l\u012bdz 3,5 terabaitiem. Atkar\u012bb\u0101 no iestat\u012bjumiem to var vari\u0113t. Un mums v\u0113l paliks vieta dev. <\/p>\n<p><\/p>\n<p>\u0160\u0101du sist\u0113mu var izmantot da\u017e\u0101diem gad\u012bjumiem. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Tas ir izstr\u0101d\u0101t\u0101jiem, DBA, lai p\u0101rbaud\u012btu vaic\u0101jumus, optimiz\u0113tu tos. <\/p>\n<p>\n<\/li>\n<li>\n<p>To var izmantot QA test\u0113\u0161an\u0101, lai p\u0101rbaud\u012btu konkr\u0113tu migr\u0101ciju, pirms m\u0113s to laid\u012bsim ra\u017eo\u0161an\u0101. Un m\u0113s varam izveidot \u012bpa\u0161us vidi QA ar re\u0101liem datiem, kur vi\u0146i var test\u0113t jauno funkcionalit\u0101ti. Un tas aiz\u0146ems sekundes, nevis stundas, varb\u016bt pat dienas citos gad\u012bjumos, kur pl\u0101nveida kopijas netiek izmantotas. <\/p>\n<p>\n<\/li>\n<li>\n<p>Un v\u0113l viens atsevi\u0161\u0137s gad\u012bjums. Ja uz\u0146\u0113mum\u0101 nav izveidota anal\u012btikas sist\u0113ma, m\u0113s varam pie\u0161\u0137irt pl\u0101nu klonu produkta datu b\u0101zei un nodot to ilgiem vaic\u0101jumiem vai \u012bpa\u0161iem indeksiem, kurus var izmantot anal\u012btik\u0101.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5fb0944f063c981f27449d948a59b73b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ar \u0161o pieeju:<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>Zema k\u013c\u016bdu varb\u016bt\u012bba ra\u017eo\u0161an\u0101, jo visas izmai\u0146as tika p\u0101rbaud\u012btas uz pilnizm\u0113ra datiem. <\/p>\n<p>\n<\/li>\n<li>\n<p>Mums par\u0101d\u0101s test\u0113\u0161anas kult\u016bra, jo tagad vairs nav j\u0101gaida stund\u0101m ilgi sava stenda. <\/p>\n<p>\n<\/li>\n<li>\n<p>Un nav \u0161\u0137\u0113rs\u013cu, nav gaid\u012b\u0161anas starp test\u0113\u0161an\u0101m. J\u016bs patie\u0161\u0101m varat iet un p\u0101rbaud\u012bt. Un tas b\u016bs lab\u0101k, jo m\u0113s pa\u0101trin\u0101m izstr\u0101di. <\/p>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<ul>\n<li>\n<p>B\u016bs maz\u0101k refaktoriz\u0113\u0161anas. Maz\u0101k k\u013c\u016bdu non\u0101ks ra\u017eo\u0161an\u0101. M\u0113s maz\u0101k t\u0101s refaktoriz\u0113sim v\u0113l\u0101k. <\/p>\n<p>\n<\/li>\n<li>\n<p>M\u0113s varam veikt neatgriezeniskas izmai\u0146as. \u0160is nav standarta pieeju sast\u0101vda\u013ca. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<ol>\n<li>Tas ir izdev\u012bgi, jo m\u0113s dal\u0101m resursus test\u0113\u0161anas vidi. <\/li>\n<\/ol>\n<p><\/p>\n<p>Jau labi, bet ko v\u0113l var\u0113tu pa\u0101trin\u0101t?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/d692f76b865c18ed4c178d1a1440774b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pateicoties \u0161\u0101dai sist\u0113mai, m\u0113s varam b\u016btiski samazin\u0101t iek\u013c\u016b\u0161anas slieksni \u0161\u0101d\u0101 test\u0113\u0161an\u0101. <\/p>\n<p><\/p>\n<p>Pa\u0161laik past\u0101v apburtais loks, kur\u0101 izstr\u0101d\u0101t\u0101jam, lai ieg\u016btu piek\u013cuvi re\u0101liem pilna izm\u0113ra datiem, ir j\u0101k\u013c\u016bst par ekspertu. Vi\u0146am j\u0101\u013cauj piek\u013c\u016bt \u0161iem datiem. <\/p>\n<p><\/p>\n<p>Bet k\u0101 att\u012bst\u012bties, ja t\u0101da nav. Un kas notiks, ja tev ir pieejami tikai \u013coti mazi testa datu kopumi? Tad re\u0101lu pieredzi nevar ieg\u016bt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/221f7b02294878aea1d0ebe6df5d9717.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u0101 izk\u013c\u016bt no \u0161\u012b loka? K\u0101 pirmo saskarni, kas ir \u0113rta izstr\u0101d\u0101t\u0101jiem jebkura l\u012bme\u0146a, m\u0113s izv\u0113l\u0113j\u0101mies Slack robotu. Bet tas var b\u016bt jebkura cita saskarne. <\/p>\n<p><\/p>\n<p>Ko tas \u013cauj dar\u012bt? Var \u0146emt konkr\u0113tu piepras\u012bjumu un nos\u016bt\u012bt to \u012bpa\u0161\u0101 kan\u0101l\u0101 datu b\u0101zei. M\u0113s autom\u0101tiski p\u0101rsniegsim pl\u0101no klonu p\u0101ris sekund\u0113s. Izpild\u012bsim \u0161o piepras\u012bjumu. Sav\u0101ksim metrikas un ieteikumus. Par\u0101d\u012bsim vizualiz\u0101ciju. Un p\u0113c tam \u0161is klons paliks, lai \u0161o piepras\u012bjumu var\u0113tu optimiz\u0113t, pievienot indeksus utt. <\/p>\n<p><\/p>\n<p>Un ar\u012b Slack mums nodro\u0161ina sadarb\u012bbas iesp\u0113jas no kastes. T\u0101 k\u0101 tas ir vienk\u0101r\u0161i kan\u0101ls, tie\u0161i tur var s\u0101kt diskusiju par \u0161o piepras\u012bjumu thread'\u0101, pingot savus kol\u0113\u0123us, DBA, kuri ir uz\u0146\u0113mum\u0101. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/b4a6410b625107c5bbbf57c021159914.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bet, protams, ir ar\u012b probl\u0113mas. T\u0101 k\u0101 tas ir re\u0101ls pasaules, un m\u0113s izmantojam serveri, kur\u0101 vienlaic\u012bgi mitin\u0101m daudz klonu, mums j\u0101ierobe\u017eo atmi\u0146as un procesora jauda, kas ir pieejama kloniem. <\/p>\n<p><\/p>\n<p>Bet, lai \u0161ie testi b\u016btu ticami, \u0161\u012b probl\u0113ma ir j\u0101risina. <\/p>\n<p><\/p>\n<p>Ir skaidrs, ka svar\u012bgs moments ir vien\u0101di dati. Bet tie mums jau ir. Un m\u0113s v\u0113lamies sasniegt vien\u0101da konfigur\u0101cija. Un m\u0113s varam pied\u0101v\u0101t praktiski vien\u0101du konfigur\u0101ciju. <\/p>\n<p><\/p>\n<p>B\u016btu lieliski, ja mums b\u016btu t\u0101da pa\u0161a aparat\u016bra k\u0101 ra\u017eo\u0161an\u0101, bet t\u0101 var at\u0161\u0137irties. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5efae55189175262d56a33b89c55ed29.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Atcer\u0113simies, k\u0101 Postgres str\u0101d\u0101 ar atmi\u0146u. Mums ir divi ke\u0161i. Viens no failu sist\u0113mas un viens no pa\u0161a Postgres, proti, Shared Buffer Cache. <\/p>\n<p><\/p>\n<p>Ir svar\u012bgi atz\u012bm\u0113t, ka Shared Buffer Cache tiek pie\u0161\u0137irts, kad tiek palaists Postgres, atkar\u012bb\u0101 no t\u0101, k\u0101du izm\u0113ru j\u016bs nor\u0101d\u012bsiet konfigur\u0101cij\u0101. <\/p>\n<p><\/p>\n<p>Otro ke\u0161u izmanto visas pieejam\u0101s vietas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f1f3c85e786649f83d5c17e6724086a9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un, kad m\u0113s veidojam vair\u0101kus klonus vien\u0101 ma\u0161\u012bn\u0101, izn\u0101k, ka pak\u0101peniski aizpild\u0101m atmi\u0146u. Un, princip\u0101, Shared Buffer Cache ir 25 % no visa pieejam\u0101 atmi\u0146as apjoma uz datora. <\/p>\n<p><\/p>\n<p>L\u012bdz ar to, ja m\u0113s nemain\u012bsim \u0161o parametru, m\u0113s var\u0113sim uz vienas ma\u0161\u012bnas palaist tikai 4 instance, t. i., tikai 4 t\u0101dus pl\u0101nus klonus. Un tas, protams, ir slikti, jo m\u0113s v\u0113lamies tos daudz vair\u0101k. <\/p>\n<p><\/p>\n<p>Bet, no otras puses, Buffer Cache tiek izmantots vaic\u0101jumu izpildei, indeksiem, t. i., pl\u0101ns ir atkar\u012bgs no t\u0101, cik lieli ir m\u016bsu ke\u0161i. Un, ja m\u0113s vienk\u0101r\u0161i samazin\u0101sim \u0161o parametru, m\u016bsu pl\u0101ni var var\u0113tu iev\u0113rojami main\u012bties.<\/p>\n<p><\/p>\n<p>Piem\u0113ram, ja m\u016bsu prod pus\u0113 ke\u0161s ir liels, tad Postgres izv\u0113l\u0113sies izmantot indeksu. Ja n\u0113, tad tiks veikta SeqScan. Un k\u0101ds b\u016btu j\u0113ga, ja m\u016bsu pl\u0101ni nesakristu? <\/p>\n<p><\/p>\n<p>Ta\u010du \u0161aj\u0101 zi\u0146\u0101 m\u0113s non\u0101kam pie t\u0101da risin\u0101juma, ka paties\u012bb\u0101 pl\u0101ns Postgres nav atkar\u012bgs no konkr\u0113t\u0101 Shared Buffer izm\u0113ra, bet gan no effective_cache_size.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (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 ir paredzamais ke\u0161a apjoms, kas mums ir pieejams, t. i., kop\u0113jais Buffer Cache un failu sist\u0113mas ke\u0161s. To nosaka konfigur\u0101cija. Un \u0161\u012b atmi\u0146a netiek pie\u0161\u0137irta. <\/p>\n<p><\/p>\n<p>T\u0101d\u0113j\u0101di m\u0113s varam kaut k\u0101 apm\u0101n\u012bt Postgres, sakot, ka mums paties\u012bb\u0101 ir pieejami daudz dati, pat ja mums \u0161o datu nav. Un t\u0101d\u0113j\u0101di pl\u0101ni piln\u012bgi sakrit\u012bs ar ra\u017eo\u0161anu. <\/p>\n<p><\/p>\n<p>Tom\u0113r tas var ietekm\u0113t laiku. Un m\u0113s optimiz\u0113jam vaic\u0101jumus p\u0113c laika, ta\u010du ir svar\u012bgi, ka laiks ir atkar\u012bgs no daudziem faktoriem: <\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Tas ir atkar\u012bgs no t\u0101s slodzes, kas pa\u0161laik past\u0101v prod. <\/p>\n<p>\n<\/li>\n<li>\n<p>Tas ir atkar\u012bgs no pa\u0161as ma\u0161\u012bnas raksturlielumiem. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Un tas ir netie\u0161s parametrs, ta\u010du paties\u012bb\u0101 m\u0113s varam optimiz\u0113t tie\u0161i p\u0113c datu apjoma, ko \u0161is vaic\u0101jums izlas\u012bs, lai ieg\u016btu rezult\u0101tu. <\/p>\n<p><\/p>\n<p>Un, ja v\u0113lamies, lai laika izpilde b\u016btu tuva tai, ko redzam ra\u017eo\u0161an\u0101, mums j\u0101\u0146em p\u0113c iesp\u0113jas l\u012bdz\u012bg\u0101ka aparat\u016bra un, iesp\u0113jams, pat vair\u0101k, lai visi kloni ietilptu. Bet tas ir kompromiss, t.i., j\u016bs sa\u0146emsiet t\u0101dus pa\u0161us pl\u0101nus, redz\u0113siet, cik daudz datu konkr\u0113tais vaic\u0101jums las\u012bs, un var\u0113siet izdar\u012bt secin\u0101jumus \u2014 vai \u0161is vaic\u0101jums ir labs (vai migr\u0101cija) vai slikts, to v\u0113l j\u0101optimiz\u0113. <\/p>\n<p><\/p>\n<p>Apskat\u012bsim, k\u0101 tie\u0161i ar Joe notiek optimiz\u0101cija. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/26c892a0b2d417f9806cfb77d2ea47f6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0145emsim vaic\u0101jumu no re\u0101l\u0101s sist\u0113mas. \u0160aj\u0101 gad\u012bjum\u0101 datu b\u0101ze sast\u0101v no 1 terabaita. Un m\u0113s v\u0113lamies saskait\u012bt jaun\u0101kos ierakstus, kam bija vair\u0101k nek\u0101 10 pat\u012bk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/befd651abed6688127f52db39138a4be.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u0113s rakst\u0101m zi\u0146ojumu kan\u0101l\u0101, klons ir izveidots. Un m\u0113s redz\u0113sim, ka \u0161\u0101ds vaic\u0101jums izpild\u012bsies 2,5 min\u016bt\u0113s. Tas ir pirmais, ko m\u0113s paman\u012bsim.<\/p>\n<p><\/p>\n<p>B Joe r\u0101d\u012bs autom\u0101tisk\u0101s rekomend\u0101cijas, kas balst\u012btas uz pl\u0101nu un metrik\u0101m. <\/p>\n<p><\/p>\n<p>M\u0113s redz\u0113sim, ka vaic\u0101jums apstr\u0101d\u0101 p\u0101r\u0101k daudz datu, lai ieg\u016btu relat\u012bvi nelielu rindu skaitu. Un ir nepiecie\u0161ams k\u0101ds specializ\u0113ts indekss, jo m\u0113s paman\u012bj\u0101m, ka vaic\u0101jum\u0101 ir p\u0101r\u0101k daudz filtr\u0113tu rindu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7f40e41314ebc682a1a64a2958dec16c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Apskat\u012bsim s\u012bk\u0101k, kas notika. Patie\u0161\u0101m, m\u0113s redzam, ka esam izlas\u012bju\u0161i gandr\u012bz pusotru gigabaitu datu no failu ke\u0161atmi\u0146as vai pat no diska. Un tas nav labi, jo m\u0113s sa\u0146\u0113m\u0101m tikai 142 rindas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/30aaff5da2536fa27efc6591f645d6f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un, \u0161\u0137iet, mums \u0161eit ir indeksu sken\u0113\u0161ana, un tam vajadz\u0113ja \u0101tri izpild\u012bties, bet, \u0146emot v\u0113r\u0101, ka m\u0113s filtr\u0113j\u0101m p\u0101r\u0101k daudz rindu (mums t\u0101s bija j\u0101saskaita), vaic\u0101jums izpild\u012bj\u0101s l\u0113ni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/40958fbc04d4eb738f6a16488647bd8c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un tas notika pl\u0101na d\u0113\u013c, jo da\u013c\u0113ji nesakr\u012bt nosac\u012bjumi vaic\u0101jum\u0101 un nosac\u012bjumi indeks\u0101. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/196ca5116e641c72bc1009e97c390bc7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u0113\u0123in\u0101sim izveidot prec\u012bz\u0101ku indeksu un paskat\u012bsimies, k\u0101 izpilde main\u012bsies p\u0113c tam. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/646a73964f0b6d3615eedb8acb3aa216.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Indeksa izveide pras\u012bja pietiekami ilgu laiku, ta\u010du tagad m\u0113s p\u0101rbaud\u0101m vaic\u0101jumu un redzam, ka laiks viet\u0101 no 2,5 min\u016bt\u0113m ir k\u013cuvis tikai 156 milisekundes, kas ir diezgan labi. Un m\u0113s las\u0101m tikai 6 megabaitus datu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/5cce2d6ecf2314c0575c0fed107f6d5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un tagad tiek izmantota tikai indeksa sken\u0113\u0161ana.<\/p>\n<p><\/p>\n<p>V\u0113l viena svar\u012bga lieta ir t\u0101, ka m\u0113s v\u0113lamies pl\u0101nu att\u0113lot k\u0101d\u0101 saprotam\u0101k\u0101 veid\u0101. M\u0113s esam ieviesu\u0161i vizualiz\u0101ciju, izmantojot Flame Graphs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/f4f545bfbf52fd66b6cbe45e1d6d0b6c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tas ir cits vaic\u0101jums, bag\u0101t\u0101ks. Un Flame Graphs m\u0113s veidojam p\u0113c diviem parametriem: tas ir datu apjoms, ko konkr\u0113t\u0101 pl\u0101na noda izlas\u012bja, un laika izpilde, t.i., mezgla izpildes laiks. <\/p>\n<p><\/p>\n<p>\u0160eit m\u0113s varam sal\u012bdzin\u0101t konkr\u0113ti mezglus sav\u0101 starp\u0101. B\u016bs saprotams, kur\u0161 no tiem aiz\u0146em vair\u0101k vai maz\u0101k, ko parasti ir gr\u016bti izdar\u012bt citos vizualiz\u0101cijas veidos. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/c477d2f32241c69eb0b38ef45ff4708b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Protams, visi zina explain.depesz.com. \u0160\u012bs vizualiz\u0101cijas laba iez\u012bme ir t\u0101, ka m\u0113s saglab\u0101jam teksta pl\u0101nu un ar\u012b izvirz\u0101m da\u017eus galvenos parametrus tabul\u0101, lai var\u0113tu tos sak\u0101rtot. <\/p>\n<p><\/p>\n<p>Un izstr\u0101d\u0101t\u0101ji, kuri v\u0113l nav padzi\u013cin\u0101ti iepazinu\u0161ies ar \u0161o t\u0113mu, ar\u012b izmanto explain.depesz.com, jo vi\u0146iem ir viegl\u0101k saprast, kuras metrisk\u0101s v\u0113rt\u012bbas ir svar\u012bgas, bet kuras ne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/a7352b5b9abf27294375c78bec69d4d4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ir jauns pieejas veids vizualiz\u0101cijai \u2013 explain.dalibo.com. Vi\u0146i veido kokveida vizualiz\u0101ciju, bet \u0161eit ir \u013coti gr\u016bti sal\u012bdzin\u0101t mezglus sav\u0101 starp\u0101. \u0160eit labi var saprast strukt\u016bru, tom\u0113r, ja b\u016bs liels piepras\u012bjums, tad b\u016bs j\u0101p\u0101rvietojas uz priek\u0161u un atpaka\u013c, bet ar\u012b tas ir variants. <\/p>\n<p><\/p>\n<h2 id=\"kollaboraciya\">Kopdarbs<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/7101c0b95eafed8fd9305a4630399e3b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un, k\u0101 es jau min\u0113ju, Slack mums sniedz iesp\u0113ju kopdarbam. Piem\u0113ram, ja m\u0113s sastopam sare\u017e\u0123\u012btu piepras\u012bjumu, kuru nav skaidri iesp\u0113jams optimiz\u0113t, m\u0113s varam \u0161aj\u0101 jaut\u0101jum\u0101 preciz\u0113t ar kol\u0113\u0123iem Slack diskusij\u0101. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"DBA-bots Joe. Anatolijs Stanslers (Postgres.ai)\" src=\"\/wp-content\/uploads\/2020\/10\/14b8f9c3401ecb68ac1ef56bc0cb0fa5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mums \u0161\u0137iet svar\u012bgi test\u0113t uz pilna izm\u0113ra datiem. T\u0101p\u0113c m\u0113s izveidoj\u0101m r\u012bku Update Database Lab, kas ir pieejams atv\u0113rt\u0101 koda. J\u016bs varat izmantot ar\u012b botu Joe. J\u016bs varat to \u0146emt tie\u0161i tagad un ieviest sav\u0101 vid\u0113. Visi ce\u013cve\u017ei tur ir pieejami. <\/p>\n<p><\/p>\n<p>Svar\u012bgi ir ar\u012b atz\u012bm\u0113t, ka pats risin\u0101jums nav nekas revol\u016bcisks, jo ir Delphix, bet tas ir uz\u0146\u0113muma risin\u0101jums. Tas ir piln\u012bb\u0101 sl\u0113gts un \u013coti d\u0101rgs. M\u016bsu specializ\u0101cija ir Postgres. Tie ir visi atv\u0113rt\u0101 koda produkti. Pie\u0146emiet m\u016bs! <\/p>\n<p><\/p>\n<p>Ar to es beidzu. Paldies!<\/p>\n<p><\/p>\n<h2 id=\"voprosy\">Jaut\u0101jumi<\/h2>\n<p><\/p>\n<p><em>Sveiki! Paldies par zi\u0146ojumu! \u013boti interesanti, \u012bpa\u0161i man, jo man bija l\u012bdz\u012bga uzdevuma risin\u0101\u0161ana k\u0101du laiku atpaka\u013c. T\u0101p\u0113c man ir vair\u0101ki jaut\u0101jumi. Ceru, ka vismaz da\u013cu no tiem var\u0113\u0161u uzdot.<\/em><\/p>\n<p><\/p>\n<p><em>Interesanti, k\u0101 j\u016bs apr\u0113\u0137in\u0101t vietu \u0161ai videi? Tehnolo\u0123ija paredz, ka noteiktos apst\u0101k\u013cos j\u016bsu kloni var palielin\u0101ties l\u012bdz maksim\u0101lajam izm\u0113ram. Vienk\u0101r\u0161i sakot, ja jums ir desmit terabaitu datu b\u0101ze un 10 kloni, tad ir viegli simul\u0113t t\u0101du situ\u0101ciju, kad katrs klons satur 10 unik\u0101lus datus. K\u0101 j\u016bs apr\u0113\u0137in\u0101t \u0161o vietu, t.i., to dal\u012bjumu, par kuru j\u016bs run\u0101j\u0101t, kur\u0101 dz\u012bvos \u0161ie kloni?<\/em><\/p>\n<p><\/p>\n<p>Labs jaut\u0101jums. \u0160eit ir svar\u012bgi sekot l\u012bdzi konkr\u0113tiem kloniem. Un, ja k\u0101d\u0101 klon\u0101 notiek p\u0101r\u0101k liels main\u012bjums un tas s\u0101k augt, m\u0113s varam vispirms br\u012bdin\u0101t lietot\u0101ju, vai ar\u012b uzreiz aptur\u0113t \u0161o klonu, lai nerad\u012btu failu situ\u0101ciju. <\/p>\n<p><\/p>\n<p><em>J\u0101, man ir papildu jaut\u0101jums. Proti, k\u0101 j\u016bs nodro\u0161in\u0101t \u0161o modu\u013cu dz\u012bves ciklu? Mums tas ir probl\u0113ma un vesela atsevi\u0161\u0137a st\u0101sts. K\u0101 tas notiek?<\/em><\/p>\n<p><\/p>\n<p>Katram klonam ir noteikts ttl. Pamat\u0101 mums ir fiks\u0113ts ttl. <\/p>\n<p><\/p>\n<p><em>Cik, ja nav nosl\u0113pums?<\/em><\/p>\n<p><\/p>\n<p>1 stunda, proti, bezdarb\u012bba \u2013 1 stunda. Ja tas netiek izmantots, m\u0113s to izdz\u0113\u0161am. Bet \u0161eit nav nek\u0101da p\u0101rsteiguma, jo m\u0113s varam uzs\u0101kt klonu sekund\u0113s. Un, ja tas atkal b\u016bs nepiecie\u0161ams, tad \u2013 l\u016bdzu. <\/p>\n<p><\/p>\n<p><em>Man ir interese par tehnolo\u0123iju izv\u0113les jaut\u0101jumiem, jo m\u0113s, piem\u0113ram, paral\u0113li izmantojam vair\u0101kus veidus da\u017e\u0101du iemeslu d\u0113\u013c. K\u0101p\u0113c tie\u0161i ZFS? K\u0101p\u0113c j\u016bs neizmantoj\u0101t LVM? J\u016bs piemin\u0113j\u0101t, ka ar LVM bija probl\u0113mas. K\u0101das bija probl\u0113mas? Manupr\u0101t, visoptim\u0101l\u0101kais variants ir ar S\u0136D, \u0146emot v\u0113r\u0101 veiktsp\u0113ju.<\/em> <\/p>\n<p><\/p>\n<p><em>K\u0101da ir galven\u0101 probl\u0113ma ar ZFS? Tas, ka jums j\u0101paliek uz viena hosta, t. i., visi instances dz\u012bvos vien\u0101 oper\u0113t\u0101jsist\u0113m\u0101. Bet S\u0136D gad\u012bjum\u0101, j\u016bs varat pievienot da\u017e\u0101du aparat\u016bru. Un \u0161aur\u0101 vieta ir tikai t\u0101s vien\u012bbas, kas ir uz S\u0136D. Un interesants jaut\u0101jums ir tie\u0161i par tehnolo\u0123iju izv\u0113li. K\u0101p\u0113c ne LVM?<\/em><\/p>\n<p><\/p>\n<p>Par LVM var\u0113sim run\u0101t meetup laik\u0101. Par S\u0136D \u2013 tas ir vienk\u0101r\u0161i d\u0101rgi. M\u0113s varam ieviest ZFS kur vien v\u0113lamies. J\u016bs varat to izveidot sav\u0101 ma\u0161\u012bn\u0101. J\u016bs varat vienk\u0101r\u0161i lejupiel\u0101d\u0113t repo un uzst\u0101d\u012bt to. ZFS var uzst\u0101d\u012bt praktiski visur, ja run\u0101jam par Linux. T. i., m\u0113s ieg\u016bstam \u013coti elast\u012bgu risin\u0101jumu. Un pats ZFS dabiski pied\u0101v\u0101 \u013coti daudz. Varat iekr\u0101t tur neierobe\u017eotu datu apjomu, pievienot lielu skaitu diskus, ir snapshots. Un, k\u0101 es jau min\u0113ju, to ir vienk\u0101r\u0161i administr\u0113t. T. i., tas \u0161\u0137iet \u013coti pat\u012bkams lieto\u0161an\u0101. Tas ir p\u0101rbaud\u012bts, tam ir daudz gadi. Tam ir \u013coti liela kopiena, kas aug. ZFS ir \u013coti uzticams risin\u0101jums. <\/p>\n<p><\/p>\n<p>Nikolajs Samohvalovs: Vai varu v\u0113l nedaudz koment\u0113t? Mani sauc Nikolajs, m\u0113s kop\u0101 ar Anatoliju str\u0101d\u0101jam. Es piekr\u012btu, ka S\u0136D ir lielisks. Un daudziem m\u016bsu klientiem ir Pure Storage utt. <\/p>\n<p><\/p>\n<p>Anatolijs pareizi nor\u0101d\u012bja, ka m\u0113s m\u0113r\u0137\u0113jam uz modularit\u0101ti. Un n\u0101kotn\u0113 var realiz\u0113t vienu interfeisu \u2013 izveidot momentkopiju, izveidot klonu, izn\u012bcin\u0101t klonu. Tas viss ir viegli. Un datu glab\u0101\u0161anas sist\u0113ma ir lieliska, ja t\u0101 ir.<\/p>\n<p><\/p>\n<p>Bet ZFS ir pieejams visiem. Pietiek ar Delphix, vi\u0146iem ir 300 klientu. No tiem Fortune 100 ir 50 klienti, t.i., vi\u0146i ir v\u0113rsti uz NASA un t\u0101 t\u0101l\u0101k. Ir pien\u0101cis laiks, kad \u0161\u012b tehnolo\u0123ija b\u016bs pieejama ikvienam. T\u0101p\u0113c mums ir open source pamats. Mums ir da\u013ca interfeisa, kas nav open source. T\u0101 ir platforma, kuru m\u0113s par\u0101d\u012bsim. Bet m\u0113s v\u0113lamies, lai tas b\u016btu pieejams ikvienam. M\u0113s v\u0113lamies revolucioniz\u0113t, lai visi test\u0113t\u0101ji vairs neuzmin\u0113tu uz portat\u012bvajiem datoriem. Mums j\u0101raksta SELECT un uzreiz j\u0101nok\u013c\u016bst pie t\u0101, ka tas ir l\u0113ns. Pietiek gaid\u012bt, kam\u0113r DBA par to past\u0101st\u012bs. T\u0101 ir galven\u0101 m\u0113r\u0137is. Un es dom\u0101ju, ka m\u0113s pie t\u0101 visi non\u0101ksim. Un \u0161o lietu m\u0113s dar\u0101m, lai t\u0101 b\u016btu visiem. T\u0101p\u0113c ZFS, jo tas b\u016bs pieejams visur. Paldies kopienai par probl\u0113mu risin\u0101\u0161anu un par open source licenci utt. <\/p>\n<p><\/p>\n<p><em>Sveiki! Paldies par zi\u0146ojumu! Mani sauc Maksims. M\u0113s risin\u0101j\u0101m t\u0101das pa\u0161as probl\u0113mas. M\u0113s t\u0101s risin\u0101j\u0101m. K\u0101 j\u016bs sadal\u0101t resursus starp \u0161iem kloniem? Katrs klons katru br\u012bdi var darboties sav\u0101d\u0101k: viens test\u0113 vienu, otrs citu, k\u0101dam tiek b\u016bv\u0113ts indekss, k\u0101dam ir smaga darba izpilde. Un, ja CPU var v\u0113l sadal\u012bt, tad k\u0101 ar IO, k\u0101 j\u016bs dal\u0101t? Tas ir pirmais jaut\u0101jums.<\/em><\/p>\n<p><\/p>\n<p><em>Un otrais jaut\u0101jums par stendu at\u0161\u0137ir\u012bb\u0101m. Pie\u0146emsim, man \u0161eit ir ZFS un viss ir lieliski, bet klientam produkcij\u0101 nav ZFS, bet, piem\u0113ram, ext4. K\u0101 \u0161aj\u0101 gad\u012bjum\u0101?<\/em><\/p>\n<p><\/p>\n<p>Jaut\u0101jumi ir \u013coti labi. Es nedaudz piemin\u0113ju \u0161o probl\u0113mu, ka m\u0113s dal\u0101m resursus. Un risin\u0101jums ir \u0161\u0101ds. Iedom\u0101jieties, ka j\u016bs test\u0113jat staging vid\u0113. Jums ar\u012b var b\u016bt t\u0101da pa\u0161a situ\u0101cija, ka k\u0101ds rada vienu slodzi, k\u0101ds citu. Un beig\u0101s j\u016bs redzat neskaidras metrisk\u0101s v\u0113rt\u012bbas. Pat t\u0101da pati probl\u0113ma var b\u016bt ar produkciju. Kad j\u016bs v\u0113laties p\u0101rbaud\u012bt k\u0101du piepras\u012bjumu un redzat, ka ar to ir k\u0101da probl\u0113ma \u2013 tas l\u0113ni izpild\u0101s, tad paties\u012bb\u0101 probl\u0113ma nav bijusi piepras\u012bjum\u0101, bet taj\u0101, ka ir k\u0101da paral\u0113la slodze. <\/p>\n<p><\/p>\n<p>T\u0101p\u0113c \u0161eit svar\u012bgi ir koncentr\u0113ties uz to, k\u0101ds b\u016bs pl\u0101ns, pa k\u0101diem so\u013ciem m\u0113s virz\u012bsimies, un cik datu m\u0113s tam pie\u0146emsim. Tas, ka m\u016bsu diski, piem\u0113ram, b\u016bs noslogoti ar kaut ko, tie\u0161i ietekm\u0113s laiku. Bet m\u0113s varam p\u0113c datu apjoma nov\u0113rt\u0113t, cik smags ir \u0161is piepras\u012bjums. Nav tik b\u016btiski, ka vienlaikus b\u016bs ar\u012b k\u0101ds izpild\u012bjums. <\/p>\n<p><\/p>\n<p><em>Man ir divi jaut\u0101jumi. Tas ir \u013coti for\u0161s risin\u0101jums. Vai ir biju\u0161i gad\u012bjumi, kad dati ra\u017eo\u0161an\u0101 ir kritiski svar\u012bgi, piem\u0113ram, kred\u012btkartes numuri? Vai jau ir kaut kas gatavs, vai ar\u012b t\u0101 ir atsevi\u0161\u0137a uzdevuma lieta? Un otrais jaut\u0101jums \u2013 vai ir kaut kas t\u0101ds ar\u012b MySQL?<\/em><\/p>\n<p><\/p>\n<p>Par datiem. M\u0113s veiksim obfusk\u0101ciju, kam\u0113r to nedar\u0101m. Bet, ja j\u016bs izv\u0113r\u0161at tie\u0161i Joe, ja nedodat piek\u013cuvi izstr\u0101d\u0101t\u0101jiem, tad piek\u013cuves pie datiem nav. K\u0101p\u0113c? T\u0101p\u0113c, ka Joe ner\u0101da datus. Vi\u0146\u0161 r\u0101da tikai metrikas, pl\u0101nus un viss. Tas tika speci\u0101li izstr\u0101d\u0101ts, jo tas ir viens no m\u016bsu klienta pras\u012bjumiem. Vi\u0146i v\u0113l\u0113j\u0101s iesp\u0113ju optimiz\u0113t, bet vienlaikus nedot piek\u013cuvi visiem. <\/p>\n<p><\/p>\n<p>Par MySQL. \u0160o sist\u0113mu var izmantot jebkam, kas glab\u0101 st\u0101vokli disk\u0101. Un, \u0146emot v\u0113r\u0101, ka m\u0113s str\u0101d\u0101jam ar Postgres, m\u0113s pa\u0161reiz vispirms piln\u012bb\u0101 automatiz\u0113jam visus Postgres procesus. M\u0113s v\u0113lamies automatiz\u0113t datu ieg\u016b\u0161anu no dubl\u0113juma. M\u0113s pareizi konfigur\u0113jam Postgres. M\u0113s zin\u0101m, k\u0101 pan\u0101kt, lai pl\u0101ni sakristu utt. <\/p>\n<p><\/p>\n<p>Bet, \u0146emot v\u0113r\u0101, ka sist\u0113ma ir papla\u0161in\u0101ma, to var\u0113s izmantot ar\u012b MySQL. Ir t\u0101di piem\u0113ri. L\u012bdz\u012bga sist\u0113ma ir Yandex, bet vi\u0146i to nepublic\u0113 nevien\u0101 viet\u0101. Vi\u0146i to izmanto iek\u0161\u0113ji Yandex.Metrik\u0101. Un tie\u0161i tur ir st\u0101sts par MySQL. Bet tehnolo\u0123ijas ir t\u0101s pa\u0161as, ZFS. <\/p>\n<p><\/p>\n<p><em>Paldies par prezent\u0101ciju! Man ar\u012b ir p\u0101ris jaut\u0101jumu. J\u016bs piemin\u0113j\u0101t, ka klon\u0113\u0161anu var izmantot anal\u012btikai, piem\u0113ram, lai veidotu tur papildu indeksus. Vai varat nedaudz s\u012bk\u0101k past\u0101st\u012bt, k\u0101 tas darbojas?<\/em><\/p>\n<p><\/p>\n<p><em>Un otro jaut\u0101jumu uzdo\u0161u par stendu un pl\u0101nu konsekvenci. Pl\u0101ns atkar\u012bgs ar\u012b no statistikas, ko sav\u0101c Postgres. K\u0101 j\u016bs risin\u0101t \u0161o probl\u0113mu?<\/em><\/p>\n<p><\/p>\n<p>Nav ir konkr\u0113tas anal\u012btikas gad\u012bjumu, jo m\u0113s to v\u0113l neesam izmantoju\u0161i, ta\u010du \u0161\u0101da iesp\u0113ja past\u0101v. Ja run\u0101jam par indeksiem, tad iedom\u0101jieties, ka tiek izpild\u012bts vaic\u0101jums tabulai ar simtiem miljoniem ierakstu un kolonnai, kas parasti nav indeks\u0113ta produkcij\u0101. Un mums tur ir j\u0101saskaita dati. Ja \u0161o vaic\u0101jumu izpild\u0101m produkcij\u0101, past\u0101v iesp\u0113ja, ka tiks rad\u012bta d\u012bkst\u0101ve, jo vaic\u0101jums tur var darboties min\u016bti. <\/p>\n<p><\/p>\n<p>Labi, izveidosim pl\u0101nu klonu, kuru nav bail uz da\u017e\u0101m min\u016bt\u0113m apst\u0101t. Un, lai \u0113rt\u0101k b\u016btu saskait\u012bt anal\u012btiku, pievienosim indeksus t\u0101m kolonn\u0101m, kur\u0101s mums interes\u0113 dati. <\/p>\n<p><\/p>\n<p><em>Indeks b\u016bs j\u0101izveido katru reizi?<\/em><\/p>\n<p><\/p>\n<p>Var izdar\u012bt t\u0101, ka m\u0113s pieskaramies datiem, izveidojam snapshots un p\u0113c \u0161\u012b snapshots atjaunojamies un izpild\u0101m jaunus vaic\u0101jumus. T.i., var izdar\u012bt t\u0101, ka varam uzs\u0101kt jaunus klonus ar jau izveidotiem indeksiem.<\/p>\n<p><\/p>\n<p>Kas attiecas uz jaut\u0101jumu par statistiku, tad, ja m\u0113s atjaunojamies no dubl\u0113juma, ja m\u0113s veicam replik\u0101ciju, tad m\u016bsu statistika b\u016bs tie\u0161i t\u0101da pati. Jo mums b\u016bs piln\u012bgi visa fizisk\u0101 datu strukt\u016bra, t.i., m\u0113s p\u0101rvad\u0101sim datus t\u0101, k\u0101 tie ir, ar vis\u0101m statistikas metriku. <\/p>\n<p><\/p>\n<p>\u0160eit ir cita probl\u0113ma. Ja jums tiek izmantots m\u0101ko\u0146u risin\u0101jums, tad tur ir pieejami tikai lo\u0123iski dubl\u0113jumi, jo Google, Amazon ne\u013cauj \u0146emt fizisku kopiju. Tur b\u016bs t\u0101da probl\u0113ma. <\/p>\n<p><\/p>\n<p><em>Paldies par zi\u0146ojumu. \u0160eit izskan\u0113ja divi labi jaut\u0101jumi par MySQL un par resursu sadal\u012b\u0161anu. Bet, b\u016bt\u012bb\u0101, viss samazin\u0101s l\u012bdz tam, ka tas ir temats nevis konkr\u0113t\u0101m DBMS, bet kopum\u0101 failu sist\u0113mai. Un, attiec\u012bgi, resursu sadal\u012b\u0161ana ar\u012b j\u0101risk\u0113 no turienes, nevis beigu, ka tas ir Postgres, bet failu sist\u0113m\u0101, <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/lv\/server\/dts-dronten\/\"   title=\"serveri\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2602\">serveri<\/a>, instanc\u0113.<\/em> <\/p>\n<p><\/p>\n<p><em>Mans jaut\u0101jums ir par citu t\u0113mu. Tas ir tuv\u0101ks datu b\u0101zes daudzsl\u0101\u0146ain\u012bbai, kur ir vair\u0101ki sl\u0101\u0146i. M\u0113s, piem\u0113ram, esam konfigur\u0113ju\u0161i desmit terabait\u012bga att\u0113la atjaunin\u0101\u0161anu, mums notiek replik\u0101cija. Un m\u0113s konkr\u0113ti izmantojam \u0161o risin\u0101jumu datu b\u0101z\u0113m. Notiek replik\u0101cija, norisin\u0101s datu atjaunin\u0101\u0161ana. \u0160aj\u0101 laik\u0101 str\u0101d\u0101 100 darbinieku, kuri past\u0101v\u012bgi izpilda da\u017e\u0101dus \u0161os snapshots. Ko dar\u012bt? K\u0101 nodro\u0161in\u0101t, ka nerodas konflikti, ka vi\u0146i izpild\u012bja vienu, bet p\u0113c tam failu sist\u0113ma tika aizst\u0101ta un visi \u0161ie snapshots bija nepareizi?<\/em> <\/p>\n<p><\/p>\n<p>Vi\u0146i nebrauks, jo t\u0101 darbojas ZFS. M\u0113s varam atsevi\u0161\u0137i saglab\u0101t izmai\u0146as failu sist\u0113m\u0101, kas non\u0101k caur replik\u0101ciju. Un tur\u0113t klonus vec\u0101kaj\u0101s datu versij\u0101s, ko izmanto izstr\u0101d\u0101t\u0101ji. Un tas pie mums darbojas, ar to viss ir k\u0101rt\u012bb\u0101.<\/p>\n<p><\/p>\n<p><em>San\u0101k, ka atjaunin\u0101\u0161ana notiks k\u0101 papildu sl\u0101nis, un visi jauni att\u0113li tiks veidoti, pamatojoties uz \u0161o sl\u0101ni, vai ne?<\/em> <\/p>\n<p><\/p>\n<p>No iepriek\u0161\u0113jiem sl\u0101\u0146iem, kas bija no iepriek\u0161\u0113j\u0101m replik\u0101cij\u0101m. <\/p>\n<p><\/p>\n<p><em>Iepriek\u0161\u0113jie sl\u0101\u0146i atsl\u0113gsies, bet tie nor\u0101d\u012bs uz veco sl\u0101ni, un jaun\u0101s bildes tiks \u0146emtas no p\u0113d\u0113j\u0101 sl\u0101\u0146a, kas tika ieg\u016bts atjaunin\u0101jum\u0101?<\/em><\/p>\n<p><\/p>\n<p>Kopum\u0101, j\u0101. <\/p>\n<p><\/p>\n<p><em>Tad k\u0101 sekas mums b\u016bs \u013coti daudz sl\u0101\u0146u. Un ar laiku tos vajadz\u0113s komprim\u0113t?<\/em><\/p>\n<p><\/p>\n<p>J\u0101, viss pareizi. Ir k\u0101ds logs. M\u0113s saglab\u0101jam ned\u0113\u013cas momentuz\u0146\u0113mumus. Tas atkar\u012bgs no t\u0101, cik daudz resursu jums ir. Ja jums ir iesp\u0113ja uzkr\u0101t daudz datu, var saglab\u0101t momentuz\u0146\u0113mumus ilgu laiku. Tie pa\u0161i nenodz\u0113s\u012bsies. Neb\u016bs nek\u0101das datu sagroz\u012b\u0161anas. Ja momentuz\u0146\u0113mumi ir novecoju\u0161i, k\u0101 mums \u0161\u0137iet, t. i., tas ir atkar\u012bgs no uz\u0146\u0113muma politikas, tad m\u0113s varam tos vienk\u0101r\u0161i dz\u0113st un atbr\u012bvot vietu. <\/p>\n<p><\/p>\n<p><em>Sveiki, paldies par zi\u0146ojumu! Par Joe jaut\u0101jumu. J\u016bs teic\u0101t, ka pas\u016bt\u012bt\u0101js negrib\u0113ja dot piek\u013cuvi visiem datiem. Stingri sakot, ja cilv\u0113kam ir rezult\u0101ts Explain Analyze, vi\u0146\u0161 var redz\u0113t datus.<\/em> <\/p>\n<p><\/p>\n<p>Viss t\u0101. Piem\u0113ram, m\u0113s varam uzrakst\u012bt: \u00abSELECT FROM WHERE email = tas\u00bb. T. i., m\u0113s neredz\u0113sim pa\u0161us datus, bet da\u017eus netie\u0161us r\u0101d\u012bt\u0101jus m\u0113s varam apskat\u012bt. To vajag saprast. Bet no otras puses, tas viss ir redzams. Mums ir \u017eurn\u0101la audits, mums ir citu kol\u0113\u0123u uzraudz\u012bba, kuri ar\u012b redz, ko dara izstr\u0101d\u0101t\u0101ji. Un ja k\u0101ds m\u0113\u0123in\u0101s t\u0101 dar\u012bt, tad dro\u0161\u012bbas dienests pie vi\u0146iem ierad\u012bsies un risin\u0101s \u0161o jaut\u0101jumu. <\/p>\n<p><\/p>\n<p><em>Labdien! Paldies par zi\u0146ojumu! Man ir \u012bss jaut\u0101jums. Ja uz\u0146\u0113mum\u0101 Slack netiek izmantots, vai ir k\u0101da piesaist\u012b\u0161ana tam \u0161obr\u012bd, vai var izstr\u0101d\u0101t\u0101jiem izveidot instanc\u0113s, lai pievienotu test\u0113\u0161anas aplik\u0101ciju datu b\u0101z\u0113m?<\/em><\/p>\n<p><\/p>\n<p>\u0160obr\u012bd ir saist\u012bba ar Slack, t. i., nav neviena cita zi\u0146ojumapmai\u0146as lietotne, bet \u013coti grib\u0113tos izveidot atbalstu ar\u012b citiem zi\u0146ojumapmai\u0146as r\u012bkiem. Ko j\u016bs varat dar\u012bt? J\u016bs varat ieviest DB Lab bez Joe, izmantot REST API vai m\u016bsu platformu, lai izveidotu klonus un piesl\u0113gtos PSQL. Bet to var izdar\u012bt, ja esat gatavi dot saviem izstr\u0101d\u0101t\u0101jiem piek\u013cuvi datiem, jo \u0161eit ekr\u0101na vairs neb\u016bs. <\/p>\n<p><\/p>\n<p><em>Man \u0161\u012b starpne nav nepiecie\u0161ama, bet ir nepiecie\u0161ama \u0161\u0101da iesp\u0113ja.<\/em><\/p>\n<p><\/p>\n<p>Tad \u2013 j\u0101, to var izdar\u012bt.<\/p>\n<p>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/524542\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a backend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e SQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u00ab\u043f\u0440\u043e\u0434\u0435\u00bb? \u0412 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0438\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u00ab\u043f\u0440\u043e\u0434\u0443\u00bb \u0435\u0441\u0442\u044c \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0443 \u0432\u0441\u0435\u0445. \u0414\u0430 \u0438 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u0411\u0414 \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0430\u0441\u044b. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e DBA \u2014 Joe. \u041e\u043d \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97940,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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-bots Joe. Anatolijs Stanclers (Postgres.ai) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/dba-bot-joe-anatolij-stansler-postgres-ai","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/97939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=97939"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/97939\/revisions"}],"predecessor-version":[{"id":159884,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/97939\/revisions\/159884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/97940"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=97939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=97939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=97939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}