Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Gisugyot nako nga basahon ang transcript sa taho sa pagsugod sa 2016 ni Andrey Salnikov "Mga kasagarang kasaypanan sa mga aplikasyon nga nagdala sa pag-bloat sa postgresql"

Niini nga taho, akong analisahon ang mga nag-unang mga sayup sa mga aplikasyon nga mahitabo sa yugto sa pagdesinyo ug pagsulat sa code sa aplikasyon. Ug kuhaon ra nako ang mga kasaypanan nga mosangpot sa pagbuto sa Postgresql. Ingon sa usa ka lagda, kini ang sinugdanan sa pagtapos sa pasundayag sa imong sistema sa kinatibuk-an, bisan kung sa sinugdan wala’y nakita nga kinahanglanon alang niini.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Nalipay sa pag-abiabi sa tanan! Kini nga taho dili sama ka teknikal sa nauna gikan sa akong kauban. Kini nga pakigpulong gitumong sa mga nag-develop sa back-end nga sistema labi na tungod kay kami adunay medyo daghang mga kliyente. Ug silang tanan naghimo sa parehas nga mga sayup. Sultihan ko ikaw mahitungod kanila. Akong ipasabut kung unsa ang makamatay ug daotan nga hinungdan sa mga sayup.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Nganong nahimo ang mga sayop? Gihimo kini sa duha ka rason: sa random, tingali kini molihok tungod sa pagkawalay alamag sa pipila ka mga mekanismo nga mahitabo sa lebel tali sa base ug sa aplikasyon, maingon man sa base mismo.

Hatagan ko ikaw ug tulo ka mga pananglitan nga adunay makalilisang nga mga litrato kung giunsa ang pagkadaot sa mga butang. Akong ihulagway sa daklit ang mekanismo nga nahitabo didto. Ug sa unsa nga paagi sa pag-atubang uban kanila, sa diha nga sila nahitabo, ug unsa nga preventive mga pamaagi sa paggamit sa pagpugong sa mga sayop. Isulti ko kanimo ang bahin sa mga gamit sa auxiliary ug maghatag mapuslanon nga mga link.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Gigamit nako ang usa ka database sa pagsulay diin ako adunay duha ka lamesa. Usa ka plato nga adunay mga account sa kustomer, ang lain adunay mga operasyon sa kini nga mga account. Ug uban sa pipila ka periodicity, among gi-update ang mga balanse niini nga mga account.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ang inisyal nga datos sa plato: gamay ra kini, 2 MB. Ang oras sa pagtubag alang sa database ug labi na alang sa plato maayo usab. Ug usa ka maayo nga pagkarga - 2 nga mga operasyon matag segundo sa plato.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ug pinaagi niini nga taho, ipakita ko kanimo ang mga graph aron klaro kung unsa ang nahitabo. Kanunay adunay 2 ka slide nga adunay mga graph. Ang una nga slide mao ang mahitabo sa kinatibuk-an sa server.

Ug niini nga sitwasyon, atong makita nga kita adunay usa ka gamay nga plato. Ang index gamay ra sa 2 MB. Kini ang unang tsart sa wala.

Ang kasagaran nga oras sa pagtubag sa tibuuk nga server lig-on usab, gamay. Kini ang taas nga tuo nga graph.

Ang ubos nga wala nga graph mao ang pinakataas nga mga transaksyon. Atong makita nga ang mga transaksyon dali nga nahuman. Ug ang autovacuum wala pa molihok dinhi, tungod kay - kini usa ka pagsugod nga pagsulay. Dayon kini molihok ug mapuslanon kanato.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ang ikaduhang slide kanunay nga ipahinungod sa test plate. Niini nga sitwasyon, kanunay namong gi-update ang mga balanse sa account sa kliyente. Ug nakita namon nga ang kasagaran nga oras sa pagtubag alang sa operasyon sa pag-update maayo, wala’y usa ka millisecond. Nakita namon nga ang mga kapanguhaan sa processor (kini ang taas nga tuo nga graph) gigamit usab nga parehas ug gamay.

Ang ubos nga tuo nga graph nagpakita kung unsa ka daghan ang operating ug memorya sa disk nga atong naagian sa pagpangita sa atong gusto nga linya sa dili pa kini i-update. Ug ang gidaghanon sa mga operasyon sa plato mao ang 2 kada segundo, sama sa akong giingon sa sinugdanan.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ug karon aduna kitay trahedya. Tungod sa pipila ka rason, nahitabo ang dugay nang nakalimtan nga transaksyon. Ang mga hinungdan kasagaran ang tanan banal:

  • Usa sa labing kasagaran mao nga nagsugod kami sa pag-access sa usa ka eksternal nga serbisyo sa code sa aplikasyon. Ug kini nga serbisyo wala motubag kanamo. Sa ato pa, nag-abli kami og transaksyon, nagbag-o sa database ug miadto gikan sa aplikasyon aron magbasa sa mail o sa laing serbisyo sulod sa among imprastraktura, ug sa pipila ka rason wala kini motubag kanamo. Ug ang among sesyon nagbitay sa usa ka estado - wala mahibal-an kung kanus-a kini masulbad.
  • Ang ikaduha nga sitwasyon mao kung ang usa ka eksepsiyon nahitabo sa among code tungod sa pipila ka rason. Ug wala namo giproseso ang pagsira sa transaksyon sa eksepsiyon. Ug nakakuha kami usa ka nagbitay nga sesyon nga adunay bukas nga transaksyon.
  • Ug ang katapusan nga usa kay kasagaran usab. Kini dili maayo nga kalidad nga code. Ang ubang mga frameworks nagbukas sa usa ka transaksyon. Nagbitay kini, ug dili nimo mahibal-an sa aplikasyon nga gibitay nimo kini.

Asa man paingon ang maong mga butang?

Sa kamatuoran nga ang among mga lamesa ug mga indeks nagsugod sa pag-ulbo pag-ayo. Kini mao ang eksaktong sama nga bloat epekto. Alang sa database, kini ipahayag sa kamatuoran nga kita adunay usa ka mahait nga pagtaas sa panahon sa pagtubag sa database, ang load sa database server modaghan. Ug isip resulta, mag-antos ang among aplikasyon. Tungod kay kung sa imong code migahin ka og 10 milliseconds sa usa ka hangyo sa database, 10 milliseconds sa imong logic, nan ang imong function nagtrabaho sa 20 milliseconds. Ug karon maguol pag-ayo ang imong kahimtang.

Ug tan-awon nato kung unsay mahitabo. Ang ubos nga wala nga graph nagpakita nga kita adunay taas nga taas nga transaksyon. Ug kung atong tan-awon ang ibabaw nga wala nga graph, atong makita nga ang gidak-on sa lamesa milukso gikan sa duha ka megabytes ngadto sa 300 megabytes. Sa samang higayon, ang gidaghanon sa mga datos sa lamesa wala mausab, nga mao, adunay usa ka medyo dako nga kantidad sa basura.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ang kinatibuk-ang kahimtang sa termino sa kasagaran nga oras sa pagtubag sa server nausab usab sa daghang mga order sa kadako. Kana mao, ang tanan nga mga hangyo sa server nagsugod sa hingpit nga pagkahugno. Ug sa samang higayon, ang internal nga mga proseso sa Postgres sa atubangan sa autovacuum gilusad, nga naningkamot sa pagbuhat sa usa ka butang ug sa paggamit sa mga kapanguhaan.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Unsay mahitabo sa atong plato? Pareho ra. Ang kasagaran nga oras sa pagtubag sa tablet milukso sa daghang mga order sa kadako. Kung ilabi na sa mga termino sa nahurot nga mga kahinguhaan, nan atong makita nga ang load sa processor miuswag pag-ayo. Kini ang taas nga tuo nga graph. Ug kini misaka tungod kay ang processor kinahanglan nga moagi sa usa ka hugpong sa mga walay pulos nga mga linya sa pagpangita sa usa nga imong gikinahanglan. Kini ang ubos nga tuo nga graph. Ug ingon usa ka sangputanan, ang gidaghanon sa mga tawag matag segundo nagsugod sa pagkunhod, tungod kay ang database wala’y oras sa pagproseso sa parehas nga gidaghanon sa mga hangyo.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Kinahanglan nga makabalik kita sa kinabuhi. Nagsaka kami sa Internet ug nahibal-an nga ang taas nga mga transaksyon nagdala sa usa ka problema. Atong makit-an ug gipatay kini nga transaksyon. Ug maayo ang tanan alang kanamo. Ang tanan molihok ingon nga kini kinahanglan.

Kami mikalma, apan sa wala madugay among namatikdan nga ang aplikasyon dili molihok sama sa kaniadto sa emerhensya. Ang mga hangyo giproseso sa parehas nga labi ka hinay, ug labi ka hinay. Usa ug tunga ngadto sa duha ka beses nga mas hinay ilabi na sa akong pananglitan. Ang load sa server mas taas usab kay sa wala pa ang aksidente.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ug ang pangutana: "Unsa ang mahitabo sa base niining higayona?". Ug sa basehan adunay mosunod nga sitwasyon. Sa tsart sa transaksyon, imong makita nga kini mihunong ug wala nay dugay nga mga transaksyon. Apan ang mga sukod sa plato sa panahon sa aksidente mitubo nga makamatay. Ug wala kini mokunhod sukad niadto. Ang kasagaran nga oras sa base nag-stabilize. Ug ang mga tubag ingon og igo nga moadto sa usa ka madawat nga katulin alang kanamo. Ang Autovacuum nahimong mas aktibo ug nagsugod sa pagbuhat sa usa ka butang sa tablet, tungod kay kini kinahanglan nga pala sa dugang nga data.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Sa partikular, sa test scoreboard, diin atong giusab ang mga balanse: ang tubag sa panahon alang sa hangyo daw mibalik sa normal. Apan sa pagkatinuod kini usa ug tunga ka pilo nga mas taas.

Ug pinaagi sa load sa processor, atong makita nga ang load sa processor wala mobalik sa gitinguha nga bili sa wala pa ang crash. Ug ang mga hinungdan anaa ra sa ubos nga tuo nga graph. Kini makita nga adunay usa ka pagpangita sa pipila ka kantidad sa memorya. Sa ato pa, aron pangitaon ang gusto nga linya, gigugol namon ang mga kahinguhaan sa database server kung naghan-ay sa wala’y pulos nga datos. Ang gidaghanon sa mga transaksyon kada segundo mi-stabilize.

Sa kinatibuk-an, maayo, apan ang sitwasyon mas grabe pa kaysa kaniadto. Ang dayag nga pagkadaot sa database isip sangputanan sa among aplikasyon nga naglihok sa kini nga database.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ug aron masabtan kung unsa ang nahitabo didto, kung wala ka sa miaging taho, nan karon usa ka gamay nga teorya. Teorya bahin sa internal nga proseso. Ngano nga autovacuum ug unsa ang gibuhat niini?

Sa literal sa usa ka nutshell alang sa pagsabot. Sa usa ka punto sa panahon kami adunay usa ka lamesa. Naa mi mga laray sa lamesa. Kini nga mga linya mahimong aktibo, buhi, kinahanglan naton karon. Gimarkahan sila sa berde sa litrato. Ug adunay mga patay nga linya nga nagtrabaho na, na-update, adunay mga bag-ong entry nga nagpakita kanila. Ug sila gimarkahan nga dili na sila interesado sa database. Apan naghigda sila sa lamesa tungod sa mga peculiarities sa Postgres.

Ngano nga kinahanglan nimo ang usa ka autovacuum? Ang Autovacuum moabut sa usa ka punto, nagtawag sa database ug nangutana niini: "Palihug ihatag kanako ang id sa labing karaan nga transaksyon nga karon bukas sa database." Gibalik sa database kini nga id. Ug ang autovacuum, nga nagsalig niini, moagi sa mga linya sa lamesa. Ug kung nakita niya nga ang pipila ka mga linya giusab sa labi ka karaan nga mga transaksyon, nan siya adunay katungod nga markahan kini ingon mga linya nga magamit naton pag-usab sa umaabot pinaagi sa pagsulat sa bag-ong datos didto. Kini usa ka proseso sa background.

Niini nga panahon, nagpadayon kami sa pagtrabaho kauban ang database, nagpadayon kami sa paghimo sa pipila ka mga pagbag-o sa lamesa. Ug sa kini nga mga linya, nga magamit namon pag-usab, nagsulat kami bag-ong datos. Ug sa ingon niini nga paagi nakakuha kami usa ka siklo, nga mao, ang pipila ka mga patay nga daan nga linya makita didto sa tanan nga oras, imbes nga kini among isulat ang mga bag-ong linya nga kinahanglan namon. Ug kini ang normal nga kahimtang aron magtrabaho ang PostgreSQL.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Unsay nahitabo atol sa aksidente? Giunsa kini nga proseso nahitabo?

Kami adunay usa ka plato sa usa ka kondisyon, ang uban buhi, ang uban patay nga linya. Miabot na ang autovacuum. Gipangutana niya ang database kung unsa ang among labing karaan nga transaksyon, unsa ang id niini. Nakuha nako kini nga id, nga mahimong daghang oras ang edad, tingali napulo ka minuto ang edad. Depende kung unsa ka bug-at ang imong load sa database. Ug nangita siyag mga linya nga mamarkahan niya nga gigamit na usab. Ug wala koy nakit-an nga mga linya sa among lamesa.

Apan niining panahona nagpadayon kami sa pagtrabaho uban sa lamesa. Gihimo namo ang usa ka butang niini, i-update kini, usbon ang datos. Unsa ang kinahanglan buhaton sa database niining panahona? Wala siyay kapilian gawas sa pagdugang og bag-ong mga linya sa katapusan sa kasamtangan nga lamesa. Ug sa ingon sa kanato ang gidak-on sa lamesa nagsugod sa inflated.

Kinahanglan gyud namo ang mga berdeng linya aron magtrabaho. Apan sa panahon sa ingon nga problema, kini nahimo nga ang porsyento sa mga berde nga linya labi ka ubos sa tibuuk nga gidaghanon sa lamesa.

Ug kung magpatuman kami usa ka pangutana, ang database kinahanglan nga moagi sa tanan nga mga linya, pula ug berde, aron makit-an ang husto nga linya. Ug ang epekto sa pagpaburot sa lamesa nga wala’y pulos nga datos gitawag nga "bloat", nga mokaon usab sa among disk space. Hinumdomi, kaniadto 2 MB, karon 300 MB na? Karon usba ang megabytes ngadto sa gigabytes ug mawala nimo ang tanan nimong mga kahinguhaan sa disk nga dali ra.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Unsa ang mga implikasyon alang kanato?

  • Sa akong pananglitan, ang lamesa ug indeks mitubo sa 150 ka beses. Ang pipila sa among mga kliyente adunay mas daghang makamatay nga mga kaso kung ang espasyo sa disk nagsugod na nga mahurot.
  • Ang mga lamesa dili gayud mokunhod sa ilang kaugalingon. Ang autovacuum sa pipila ka mga kaso mahimong maputol ang ikog sa lamesa kung adunay mga patay nga linya lamang. Apan tungod kay adunay kanunay nga pagtuyok, ang usa ka berde nga linya mahimong magbitay sa katapusan ug dili ma-update, ug ang tanan nga nahabilin sa usa ka lugar sa sinugdanan sa plato marekord. Apan kini usa ka dili mahimo nga panghitabo nga ang imong lamesa mismo mokunhod sa gidak-on, mao nga dili ka maglaum niini.
  • Ang database kinahanglan nga maghan-ay sa tibuok nga pundok sa walay pulos nga mga linya. Ug nag-usik kami sa mga kapanguhaan sa disk, nag-usik sa mga kapanguhaan sa processor ug kuryente.
  • Ug kini direkta nga makaapekto sa among aplikasyon, tungod kay kung sa sinugdanan migugol kami og 10 milliseconds sa usa ka hangyo, 10 milliseconds sa among code, unya sa panahon sa crash nagsugod kami sa paggugol sa usa ka segundo sa usa ka hangyo ug 10 milliseconds sa code, i.e., usa ka order sa mikunhod ang performance sa magnitude nga aplikasyon. Ug sa dihang nasulbad na ang aksidente, nagsugod kami sa paggasto og 20 milliseconds kada hangyo, 10 milliseconds kada code. Nagpasabot kini nga naunlod gihapon mi og usa ug tunga ka beses sa performance. Ug kini tanan tungod sa usa ka transaksyon nga nagbitay, ug, tingali, tungod sa among sayup.
  • Ug ang pangutana: "Unsaon nako mabawi ang tanan?" Aron ang tanan maayo sa amon ug ang mga hangyo modagan sama ka paspas sa wala pa ang aksidente.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Alang niini, adunay usa ka piho nga siklo sa trabaho nga gihimo.

Una kinahanglan naton pangitaon ang mga problema nga mga lamesa nga nabuak. Atong nasabtan nga ang ubang mga lamesa mas aktibo nga nagrekord, ang uban dili kaayo aktibo. Ug alang niini gigamit namon ang extension pgstattuple. Pinaagi sa pag-install sa kini nga extension, mahimo kang magsulat og mga pangutana aron matabangan ka nga makit-an ang mga lamesa nga igo nga nabuak.

Kung nakit-an nimo kini nga mga lamesa, kinahanglan nga i-compress kini. Adunay na mga himan alang niini. Sa among kompanya, gigamit namon ang tulo nga mga himan. Ang una mao ang built-in nga VACUUM FULL. Siya mapintas, mapintas ug walay kaluoy, apan usahay siya mapuslanon kaayo. pg_repack ΠΈ pgcompacttable mga third-party utilities para sa pag-compress sa mga lamesa. Ug mas mabinantayon sila bahin sa database.

Gigamit sila depende kung unsa ang labi ka kombenyente alang kanimo. Apan hisgutan ko kini sa katapusan. Ang nag-unang butang mao nga adunay tulo ka mga himan. Adunay daghan nga mapilian.

Pagkahuman namong gitul-id ang tanan, gisiguro nga maayo ang tanan, kinahanglan naton mahibal-an kung giunsa mapugngan kini nga kahimtang sa umaabot:

  • Sayon ra ang pagpugong. Kinahanglan nimo nga bantayan ang gidugayon sa mga sesyon sa Master server. Ilabi na delikado nga mga sesyon sa idle sa kahimtang sa transaksyon. Mao kini ang mga bag-o lang nagbukas sa usa ka transaksyon, adunay gibuhat ug mibiya, o nagbitay lang, nawala sa code.
  • Ug alang kanimo, isip mga developer, importante nga sulayan ang code sa panahon nga kini nga mga sitwasyon motungha. Dili kini lisud buhaton. Kini mahimong usa ka mapuslanon nga tseke. Makalikay ka sa daghang "bata" nga mga problema nga may kalabutan sa taas nga mga transaksyon.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Niini nga mga graph, gusto nakong ipakita kanimo kung giunsa ang pagbag-o sa lamesa ug ang pamatasan sa database pagkahuman nako gipasa ang VACUUM FULL sa lamesa sa kini nga kaso. Dili kini ang akong produksiyon.

Ang gidak-on sa lamesa mibalik dayon sa iyang normal nga kahimtang sa pagtrabaho sa usa ka magtiayon nga mga megabytes. Kini wala kaayo makaapekto sa kasagaran nga oras sa pagtubag sa tibuok server.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Apan ilabi na sa among lamesa sa pagsulay, diin among gi-update ang mga balanse sa account, among nakita nga ang kasagaran nga oras sa pagtubag sa usa ka hangyo sa pag-update sa data sa tablet gipakunhod ngadto sa pre-crash nga lebel. Ang mga kahinguhaan nga gigamit sa processor aron ipatuman kini nga hangyo nahulog usab sa pre-crash nga lebel. Ug ang ubos nga tuo nga graph nagpakita nga karon nakit-an namon ang eksakto nga linya nga kinahanglan namon dayon, nga wala mag-agi sa pundok sa mga patay nga linya nga naa sa wala pa ma-compress ang lamesa. Ug ang kasagaran nga oras sa pagpangutana nagpabilin nga hapit sa parehas nga lebel. Apan ania ako, hinoon, ang sayup sa akong hardware.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Dinhi natapos ang unang istorya. Siya ang labing komon. Ug kini mahitabo sa tanan, bisan unsa pa ang kasinatian sa kliyente, kung unsa ka kwalipikado ang mga programmer. Sa madugay o sa madali mahitabo kini.

Ang ikaduha nga istorya, diin among giapod-apod ang load ug gi-optimize ang mga kapanguhaan sa server

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

  • Nagdako na mi ug nahimong seryoso guys. Ug nakasabut kami nga kami adunay usa ka replika ug maayo alang kanamo nga balansehon ang karga: pagsulat sa Agalon, ug basaha gikan sa replika. Ug kasagaran kini nga sitwasyon mitungha kung gusto namon mag-andam usa ka matang sa mga taho o ETL. Ug ang negosyo malipayon kaayo bahin niini. Gusto gyud niya ang lainlaing mga taho nga adunay daghang komplikado nga analytics.
  • Ang mga taho molungtad sa daghang oras, tungod kay ang komplikado nga analytics dili makalkula sa millisecond. Kami, sama sa maisog nga mga lalaki, nagsulat og code. Gihimo namo sa insert nga aplikasyon nga among girekord sa Agalon, naghimo kami og mga taho sa replika.
  • Among giapod-apod ang load.
  • Ang tanan nagtrabaho sa hingpit. Nindot mi.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ug unsa ang hitsura niini nga sitwasyon? Sa partikular, sa kini nga mga tsart, gidugang usab nako ang gidugayon sa mga transaksyon gikan sa replika alang sa gidugayon sa transaksyon. Ang tanan nga ubang mga graph nagtumong lamang sa Master Server.

Niining panahona, midako na ang akong report board. Daghan pa sila. Atong makita nga ang kasagaran nga oras sa pagtubag sa server lig-on. Atong makita nga kita adunay usa ka taas nga running transaction sa replica nga modagan sulod sa 2 ka oras. Nakita namon ang hilum nga trabaho sa autovacuum, nga nagproseso sa mga patay nga linya. Ug maayo kaming tanan.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Sa piho, sumala sa test tablet, nagpadayon kami sa pag-update sa mga balanse sa mga account didto. Ug kami usab adunay usa ka lig-on nga oras sa pagtubag sa hangyo, lig-on nga pagkonsumo sa kapanguhaan. Maayo ra ang tanan kanamo.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Maayo ang tanan hangtod sa higayon nga kini nga mga taho nagsugod sa pagsunog kanamo sa usa ka panagsumpaki sa pagkopya. Ug sila mopusil balik sa regular nga mga lat-ang.

Nag-online kami ug nagsugod sa pagbasa kung nganong kini nahitabo. Ug nangita kami usa ka solusyon.

Ang una nga solusyon mao ang pagdugang sa latency sa pagkopya. Nahibal-an namon nga ang among report nagdagan sulod sa 3 ka oras. Ibutang ang paglangan sa pagkopya ngadto sa 3 ka oras. Gisugdan namon ang tanan, apan nagpadayon gihapon kami nga adunay mga problema sa kamatuoran nga ang mga taho usahay gibalikbalik.

Gusto namon nga ang tanan mahimong perpekto. Magpadayon ta. Ug nakit-an namon ang usa ka cool nga setting sa Internet - hot_standby_feedback. Among gi-on kini. Ang Hot_standby_feedback nagtugot kanamo sa pagpugong sa autovacuum nga nagdagan sa Agalon. Sa ingon, hingpit natong giwagtang ang mga panagsumpaki sa pagkopya. Ug kitang tanan nagtrabaho og maayo sa mga taho.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ug unsa ang nahitabo sa Master server niining panahona? Ug uban sa Master server, kita adunay usa ka kinatibuk-ang katalagman. Nakakita na kami karon og mga tsart nga naka-on ang duha niini nga mga setting. Ug nakita namon nga ang sesyon sa replika sa bisan unsang paagi nagsugod sa pag-impluwensya sa kahimtang sa Master server. Naghimo kini usa ka epekto tungod kay gisuspinde niini ang autovacuum nga naglimpyo sa mga patay nga linya. Misulbong na usab ang among lamesa. Ang kasagaran nga oras sa pagpatuman sa pangutana sa tibuok database usab misaka. Ang mga autovacuum mihugot og gamay.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Partikular, sa among plato, among nakita nga ang pag-update sa datos niini milukso usab sa kalangitan. Ang konsumo sa mga kahinguhaan sa processor miuswag usab pag-ayo. Nagbalikbalik kami pag-usab sa daghang mga patay nga walay pulos nga mga linya. Ug ang oras sa pagtubag sa kini nga tablet, ang gidaghanon sa mga transaksyon nahulog.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Unsa kaha ang hitsura niini kung wala kita nahibal-an kung unsa ang akong gisulti kaniadto?

  • Nagsugod mi sa pagpangita og mga problema. Kung adunay mga problema sa una nga bahin, nahibal-an namon nga mahimo’g kini ang hinungdan sa taas nga transaksyon ug kami mosaka sa Agalon. Ang problema kay sa Agalon. Sausages siya. Nagpainit siya, naa siyay Load Average nga ubos sa usa ka gatos.
  • Ang mga hangyo mahinay didto, apan wala kami makakita og bisan unsang dugay nga mga transaksyon didto. Ug wala mi kasabot sa nahitabo. Wala mi kabalo asa mangita.
  • Pagsusi sa hardware sa server. Basin nahugno among raid. Tingali gisunog namo ang memory bar. Oo, bisan unsa mahimo. Apan dili, bag-o ang mga server, maayo ang tanan.
  • Ang tanan nagdagan: mga tigdumala, mga developer ug ang direktor. Walay makatabang.
  • Ug sa usa ka punto, ang tanan kalit nga nagsugod sa pagtul-id sa iyang kaugalingon.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Sa replika, niadtong panahona, ang hangyo nagtrabaho ug mibiya. Nakadawat mi ug report. Malipayon gihapon ang negosyo. Sama sa imong nakita, ang among lamesa mitubo pag-usab ug dili mokunhod. Sa tsart nga adunay mga sesyon, nagbilin ako usa ka piraso sa kini nga taas nga transaksyon gikan sa replika, aron imong masusi kung unsa kadugay kini hangtod nga ang kahimtang mapalig-on.

Nawala ang sesyon. Ug pagkahuman sa pila ka oras ang server moabut nga labi ka gamay sa pagkasunud. Ug ang kasagaran nga oras sa pagtubag alang sa mga hangyo sa Master server mobalik sa normal. Tungod kay, sa katapusan, ang autovacuum nakakuha higayon sa paglimpyo, markahan kini nga mga patay nga linya. Ug nagsugod siya sa pagbuhat sa iyang trabaho. Ug kung unsa ka dali niya kini buhaton, dali ra kaayo kami mahan-ay.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Sa lamesa sa pagsulay, diin among gi-update ang mga balanse sa account, nakita namon ang parehas nga litrato. Ang kasagaran nga oras sa pag-update sa account anam-anam usab nga nag-normalize. Ang mga kahinguhaan nga gigamit sa processor gikunhoran usab. Ug ang gidaghanon sa mga transaksyon matag segundo mibalik sa normal. Apan pag-usab, balik sa normal, dili parehas sa una sa aksidente.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Sa bisan unsang kaso, nakakuha kami usa ka drawdown sa pasundayag, sama sa una nga kaso, usa ug tunga hangtod duha ka beses, ug usahay labi pa.

Morag nabuhat namo ang tanan nga husto. Ipanagtag ang load. Ang kagamitan dili idle. Sumala sa hunahuna, gibuak nila ang mga hangyo, apan ang tanan nahimo nga dili maayo.

  • Ayaw pagpagana ang hot_standby_feedback? Oo, dili girekomenda nga i-on kini nga wala labi ka lig-on nga mga hinungdan. Tungod kay kini nga twist direkta nga nakaapekto sa Master Server ug gisuspinde ang trabaho sa autovacuum didto. Pinaagi sa pag-on niini sa pipila ka replika ug pagkalimot niini, mahimo nimong patyon ang Agalon ug makakuha og dagkong mga problema sa aplikasyon.
  • Dugangi ang max_standby_streaming_delay? Oo, alang sa mga taho kini. Kung adunay ka tulo ka oras nga taho ug dili nimo gusto nga kini ma-crash tungod sa mga panagsumpaki sa pag-replikasyon, unya dugangi ang paglangan. Ang usa ka taas nga taho wala magkinahanglan og datos nga nakasulod sa database karon. Kung naa nimo kini sulod sa tulo ka oras, nan gipadagan nimo kini sa pila ka daan nga panahon sa datos. Ug ikaw, nga ang tulo ka oras sa paglangan, nga unom ka oras sa paglangan - dili play sa bisan unsa nga papel, apan kamo makadawat sa mga taho makanunayon ug dili mahibalo sa mga problema sa ilang pagkapukan.
  • Natural, kinahanglan nimo nga kontrolon ang taas nga mga sesyon sa mga replika, labi na kung magdesisyon ka nga himuon ang hot_standby_feedback sa usa ka replika. Tungod kay kini mahimong bisan unsa. Gihatag namo kini nga komento sa developer aron iyang sulayan ang mga hangyo. Gisulat niya ang usa ka buang nga hangyo. Nagsugod siya ug miinom og tsa, ug nakuha namo ang naestablisar nga Agalon. O naglunsad kami og sayop nga aplikasyon didto. Lainlain ang mga kahimtang. Ang mga sesyon sa mga replika kinahanglan nga kontrolahon pag-ayo sama sa Agalon.
  • Ug kung adunay ka paspas ug taas nga mga pangutana sa mga replika, nan sa kini nga kaso mas maayo nga bahinon kini aron maapod-apod ang load. Kini usa ka sumpay sa streaming_delay. Alang sa paspas nga adunay usa ka replika nga adunay gamay nga paglangan sa pagkopya. Para sa dugay na nga mga hangyo sa pagreport, pagbaton ug replika nga mahimong malangan ug 6 ka oras, kada adlaw. Kini usa ka hingpit nga normal nga kahimtang.

Giwagtang namon ang mga sangputanan sa parehas nga paagi:

  • Nakit-an namon ang nagburot nga mga lamesa.
  • Ug kami nag-compress gamit ang labing kombenyente nga himan nga angay kanamo.

Ang ikaduhang istorya matapos dinhi. Mopadayon ta sa ikatulong istorya.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Usab medyo komon alang kanato, diin kita sa pagbuhat sa migration.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

  • Ang bisan unsang produkto sa software motubo. Ang mga kinahanglanon nagbag-o. Sa bisan unsang kaso, gusto namon nga molambo. Ug mahitabo nga kinahanglan namon nga i-update ang datos sa lamesa, nga mao ang pagpadagan sa pag-update sa mga termino sa among paglalin sa bag-ong kagamitan nga among gipatuman isip bahin sa among pag-uswag.
  • Ang daan nga format sa datos dili angay. Ingnon ta nga kita karon moadto sa ikaduhang lamesa, diin ako adunay mga operasyon sa kini nga mga account. Ug, ingnon ta nga naa sila sa mga rubles, ug nakahukom kami nga dugangan ang katukma ug buhaton kini sa kopecks. Ug alang niini kinahanglan namon nga maghimo usa ka pag-update: padaghanon ang uma nga adunay kantidad sa operasyon sa usa ka gatos.
  • Sa kalibutan karon, naggamit kami og mga himan sa pag-bersyon sa database. Ingnon ta Liquibase. Girehistro namo ang among paglalin didto. Gisulayan namon kini sa among base sa pagsulay. Maayo ra ang tanan. Nagdagan ang update. Ang mga block nagtrabaho sa makadiyot, apan nakakuha kami bag-ong datos. Ug mahimo namong ilunsad ang bag-ong pagpaandar niini. Tanan gisulayan ug gisusi. Gikumpirma ang tanan.
  • Nagdala sa giplano nga trabaho, nagpatuman sa paglalin.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ania ang paglalin uban ang update nga gipresentar sa imong atubangan. Tungod kay ako adunay mga operasyon sa mga account, ang plato kay 15 GB. Ug tungod kay gi-update namo ang matag linya, gidoble namo ang plato sa update, tungod kay gi-overwrit namo ang matag linya.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Atol sa paglalin, wala kami'y mahimo sa kini nga label, tungod kay ang tanan nga mga hangyo alang niini gipila ug naghulat nga matapos kini nga pag-update. Apan dinhi gusto nako nga ipunting ang imong atensyon sa mga numero nga naa sa bertikal nga axis. Sa ato pa, kami adunay usa ka average nga oras sa paghangyo sa wala pa ang paglalin sa rehiyon nga 5 milliseconds ug usa ka load sa processor, ang gidaghanon sa mga block nga operasyon alang sa pagbasa sa memorya sa disk dili mubu sa 7,5.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Migrate mi ug nagkaproblema na sab.

Ang paglalin malampuson, apan:

  • Ang daan nga pagpaandar nagsugod sa pagdagan nga mas dugay.
  • Midako na usab ang lamesa.
  • Ang load sa server nahimo na usab nga labaw pa kaysa kaniadto.
  • Ug, siyempre, naglibog pa kami sa pag-andar nga maayo nga nagtrabaho, gipauswag namon kini gamay.

Ug kini mao na usab ang bloat, nga nagdaot na usab sa atong kinabuhi.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Dinhi akong gipakita nga ang lamesa, sama sa miaging duha ka mga kaso, dili na mobalik sa miaging mga gidak-on. Ang kasagaran nga load sa server daw igo na.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ug kung mobalik kita sa lamesa nga adunay mga account, nan atong makita nga ang kasagaran nga oras sa paghangyo nagdoble alang niini nga lamesa. Ang load sa processor ug ang gidaghanon sa mga linya nga ihan-ay sa memorya milukso sa ibabaw sa 7,5, apan kini mas ubos. Ug milukso sa kaso sa mga processor sa 2 ka beses, sa kaso sa block operations sa 1,5 ka beses, i.e. nakakuha kami usa ka degradasyon sa performance sa server. Ug ingon usa ka sangputanan - ang pagkadaot sa pasundayag sa among aplikasyon. Sa parehas nga oras, ang gidaghanon sa mga tawag nagpabilin nga hapit sa parehas nga lebel.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Ug dinhi ang panguna nga butang mao ang pagsabut kung giunsa paghimo ang ingon nga mga paglalin sa husto. Ug sila kinahanglan nga buhaton. Kanunay namong gihimo kini nga mga paglalin.

  • Ang ingon nga dagkong mga paglalin dili awtomatiko nga nahimo. Kinahanglan sila kanunay nga kontrolon.
  • Nagkinahanglan og superbisyon gikan sa usa ka tawo nga may kahibalo. Kung ikaw adunay DBA sa team, tugoti ang DBA nga buhaton kini. Iyang trabaho. Kung dili, nan tugoti ang labing eksperyensiyado nga tawo nga buhaton kini, kinsa nahibal-an kung unsaon pagtrabaho sa mga database.
  • Ang bag-ong database schema, bisan kung mag-update kami sa usa ka kolum, kanunay kaming nangandam sa mga yugto, i.e. sa abante sa wala pa ang bag-ong bersyon sa aplikasyon magamit:
  • Gidugang ang bag-ong mga natad diin among isulat ang gi-update nga datos.
  • Gibalhin namo ang datos gikan sa daan nga field ngadto sa bag-ong field sa gagmay nga mga bahin. Nganong ato ning gibuhat? Una, kanunay natong kontrolon ang proseso niini nga proseso. Kabalo mi nga daghan na kaayo mig batch natransfer ug daghan na kaayo mig nabilin.
  • Ug ang ikaduha nga positibo nga epekto mao nga sa taliwala sa matag ingon nga batch kita magsira sa usa ka transaksyon, magbukas sa usa ka bag-o, ug kini nagpaposible sa autovacuum nga magtrabaho sumala sa plato, aron markahan ang mga patay nga linya alang sa paggamit pag-usab.
  • Alang sa mga linya nga makita sa panahon sa operasyon sa aplikasyon (naa gihapon ang daan nga aplikasyon), nagdugang kami usa ka gatilyo nga nagsulat bag-ong mga kantidad sa bag-ong mga natad. Sa among kaso, kini usa ka pagpadaghan sa usa ka gatos sa daan nga kantidad.
  • Kung kita bug-os nga gahi ug gusto sa parehas nga uma, unya pagkahuman sa tanan nga mga paglalin ug sa wala pa i-roll ang bag-ong bersyon sa aplikasyon, gibag-o lang namon ang mga natad. Ang mga daan ngadto sa pipila ka imbento nga ngalan, ug among giilisan ang bag-ong mga natad ngadto sa mga daan.
  • Ug pagkahuman nga maglansad kami usa ka bag-ong bersyon sa aplikasyon.

Ug sa samang higayon, dili kita mabuak ug dili molubad sa pasundayag.

Kini mao ang katapusan sa ikatulo nga istorya.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat.sql

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat_approx.sql

Ug karon gamay pa bahin sa mga himan nga akong gihisgutan sa una nga istorya.

Sa dili pa mangita alang sa bloat, kinahanglan nimo nga i-install ang extension pgstattuple.

Aron dili ka makaimbento sa mga hangyo, gisulat na namo kini nga mga hangyo sa among trabaho. Mahimo nimong gamiton kini. Adunay duha ka hangyo dinhi.

  • Ang una nagkinahanglan og taas nga panahon, apan kini magpakita kanimo sa eksaktong mga bili sa bloat sumala sa lamesa.
  • Ang ikaduha molihok nga mas paspas ug epektibo kaayo kung kinahanglan nimo nga dali nga susihon kung adunay bloat o wala sa lamesa. Ug kinahanglan nimo usab nga masabtan nga adunay kanunay nga bloat sa usa ka lamesa sa Postgres. Kini usa ka bahin sa iyang modelo sa MVCC.
  • Ug ang 20% ​​nga bloat maayo alang sa mga lamesa sa kadaghanan nga mga kaso. Sa ato pa, dili ka angay mabalaka ug i-compress kini nga lamesa.

Nahibal-an namon kung giunsa ang pag-ila sa mga lamesa nga nanghubag uban kanamo, dugang pa, kung kini nanghubag sa wala’y pulos nga datos.

Karon kung unsaon pag-ayo ang bloat:

  • Kung kita adunay gamay nga plato ug maayo nga mga disk, i.e. sa usa ka plato hangtod sa usa ka gigabyte, posible nga gamiton ang VACUUM FULL. Magkuha siya ug eksklusibong kandado gikan kanimo sa pipila ka segundo, ug okay, apan buhaton niya ang tanan nga dali ug mapintas. Unsay gibuhat sa VACUUM FULL? Nagkinahanglan kini og eksklusibong kandado sa lamesa ug isulat pag-usab ang buhi nga mga laray gikan sa daan nga mga lamesa ngadto sa bag-ong lamesa. Ug sa katapusan gipulihan niya sila. Gitangtang ang daan nga mga file, gipuli ang mga bag-o sa mga daan. Apan alang sa gidugayon sa pagtrabaho niini, nagkinahanglan kini og eksklusibong kandado sa lamesa. Kini nagpasabot nga dili ka makahimo sa bisan unsa niini nga lamesa: ni pagsulat niini, ni pagbasa niini, ni pag-usab niini. Ug ang VACUUM FULL nanginahanglan dugang nga wanang sa disk aron isulat ang datos.
  • Sunod nga Himan pg_repack. Pinaagi sa prinsipyo niini, kini susama kaayo sa VACUUM FULL, tungod kay gi-overwrite usab niini ang mga datos gikan sa daan nga mga file ngadto sa mga bag-o ug gipulihan kini sa lamesa. Apan sa parehas nga oras, wala kini magkinahanglan usa ka eksklusibo nga kandado sa lamesa sa sinugdanan sa iyang trabaho, apan gikuha ra kini sa higayon nga kini adunay andam nga datos aron mapulihan ang mga file. Kini adunay parehas nga kinahanglanon sa kahinguhaan sa disk sama sa VACUUM FULL. Kinahanglan nimo ang dugang nga espasyo sa disk, ug kini usahay kritikal kung ikaw adunay terabyte nga mga lamesa. Ug siya labi ka glutton sa mga termino sa processor, tungod kay siya aktibo nga nagtrabaho kauban ang I / O.
  • Ang ikatulo nga utility mao ang pgcompacttable. Gitratar niini ang mga kapanguhaan nga mas mabinantayon, tungod kay kini nagtrabaho sa gamay nga lahi nga mga prinsipyo. Ang panguna nga esensya sa pgcompacttable mao nga kini nagpalihok sa tanan nga mga live nga linya sa sinugdanan sa lamesa nga adunay mga update sa lamesa. Ug unya kini magsugod sa vacuum niini nga lamesa, tungod kay nahibal-an namon nga kami adunay buhi nga mga laray sa sinugdanan ug patay nga mga laray sa katapusan. Ug ang vacuum mismo nagputol niini nga ikog, nga mao, wala kini magkinahanglan og daghang dugang nga disk space. Ug sa samang higayon, mahimo gihapon kining pug-on sa mga kahinguhaan.

Ang tanan nga adunay mga himan.

Kasagaran nga mga sayup sa aplikasyon nga nagdala sa pag-bloat sa postgresql. Andrey Salnikov

Kung nakit-an nimo nga makapaikag ang bloat nga hilisgutan sa mga termino sa pagkalot sa labi pa sa sulod, nan ania ang pipila ka mapuslanon nga mga link alang kanimo:

Dinhi gisulayan nako nga ipakita ang usa ka makalilisang nga istorya alang sa mga nag-develop, tungod kay sila ang among direkta nga mga kliyente sa mga database ug kinahanglan nga masabtan kung unsa ug unsa ang mga aksyon nga hinungdan. Hinaot nilampos ko. Salamat sa imong pagtagad!

Ang imong mga pangutana

Salamat sa report! Naghisgot ka kung giunsa mahibal-an ang mga problema. Sa unsang paagi sila mapasidan-an? Kana mao, ako adunay usa ka sitwasyon diin ang mga hangyo gibitay dili lamang tungod kay sila mibalik sa pipila ka mga serbisyo sa gawas. Kini usa lamang ka ihalas nga pag-apil. Adunay pipila ka gagmay, dili makadaot nga mga hangyo nga nagbitay sulod sa usa ka adlaw, ug dayon nagsugod sa pagbuhat sa usa ka matang sa binuang. Sa ato pa, susama kaayo kini sa imong gihulagway. Unsaon pagsubay niini? Lingkod ug tan-awa kanunay, unsa nga hangyo ang gipugngan? Sa unsang paagi kini mapugngan?

Sa kini nga kaso, kini usa ka buluhaton alang sa mga tigdumala sa imong kompanya, dili kinahanglan alang sa DBA.

Usa ko ka tigdumala.

Ang PostgreSQL adunay panglantaw nga gitawag og pg_stat_activity nga nagpakita sa pending nga mga pangutana. Ug makita nimo kung unsa kadugay kini nagbitay didto.

Kinahanglan ko nga mosulod matag 5 minuto ug tan-awon?

I-set up ang cron ug susiha. Kung naa kay taas nga hangyo, pagsulat ug sulat ug kana. Kana mao, dili nimo kinahanglan nga tan-awon ang imong mga mata, mahimo kini awtomatiko. Makadawat ka ug sulat, tubagon nimo kini. O mahimo ka nga awtomatikong mag-shoot.

Aduna bay tin-aw nga mga rason ngano nga kini nahitabo?

Gilista nako ang pipila. Uban pang mas komplikado nga mga pananglitan. Ug mahimo nga adunay taas nga panag-istoryahanay.

Salamat sa report! Gusto nakong ipatin-aw ang bahin sa pg_repack utility. Kung wala kini magkinahanglan usa ka eksklusibo nga kandado, nan...

Naghimo siya usa ka eksklusibo nga kandado.

... unya mahimo akong mawad-an sa datos. Dili ba kinahanglan nga ang akong app nagrekord sa bisan unsa niining panahona?

Dili, kini hilom nga nagtrabaho sa lamesa, ie pg_repack una nga nagbalhin sa tanan nga mga live nga linya nga naa didto. Siyempre, adunay usa ka matang sa rekord sa lamesa nga nagpadayon. Gilabay ra niya kini nga ponytail.

Sa ato pa, gibuhat pa ba niya kini sa katapusan?

Sa katapusan, kinahanglan ang usa ka eksklusibo nga kandado sa pagbaylo niini nga mga file.

Mas paspas ba kini kaysa VACUUM FULL?

Ang VACUUM FULL, sa pagsugod niini, gikuha dayon ang usa ka eksklusibo nga kandado. Ug hangtod nga buhaton niya ang tanan, dili niya siya buhian. Ug ang pg_repack nagkuha usa ka eksklusibo nga kandado lamang sa panahon sa pag-ilis sa mga file. Niini nga punto, dili ka magsulat didto, apan ang datos dili mawala, ang tanan mahimong hapsay.

Hello! Naghisgot ka bahin sa buhat sa autovacuum. Adunay usa ka graph nga adunay pula, dalag ug berde nga mga selyula sa rekord. Sa ato pa, mga dilaw - gimarkahan niya sila nga natangtang. Ug isip resulta, makasulat ka og bag-o diha kanila?

Oo. Ang mga postgres dili magtangtang sa mga laray. Siya adunay ingon nga espesipiko. Kung among gi-update ang linya, among gimarkahan ang daan nga natangtang. Ang transaction id nga nagbag-o sa kini nga linya moabut didto, ug nagsulat kami usa ka bag-ong linya. Ug kami adunay mga sesyon nga mahimo’g mabasa kini. Sa usa ka punto, sila mahimong tigulang na. Ug ang esensya sa autovacuum mao nga kini nagdagan sa kini nga mga linya ug gimarkahan kini nga wala kinahanglana. Ug didto mahimo nimong i-overwrite ang datos.

Nakasabot ko. Apan ang pangutana dili bahin niana. Wala ko nisugot. Ingnon ta nga naa tay lamesa. Kini adunay lainlain nga gidak-on nga mga natad. Ug kung ako mosulay sa pagsal-ot sa usa ka butang nga bag-o, nan kini mahimo nga dili mohaum sa daan nga selyula.

Dili, sa bisan unsang kaso ang tibuuk nga linya gi-update. Ang mga postgres adunay duha ka mga modelo sa pagtipig. Nagpili kini gikan sa tipo sa datos. Adunay data nga gitipigan direkta sa lamesa, ug adunay usab tos data. Kini ang daghang mga datos: teksto, json. Gitipigan sila sa lainlaing mga papan. Ug sumala sa kini nga mga papan, ang parehas nga istorya nga adunay bloat ang nahitabo, nga mao, parehas ang tanan. Gilista ra sila nga gilain.

Salamat sa report! Unsa ka madawat ang paggamit sa mga hangyo sa timeout sa pahayag aron limitahan ang gidugayon?

Dawaton kaayo. Gigamit namo kini bisan asa. Ug tungod kay wala kami'y kaugalingong mga serbisyo, naghatag kami og hilit nga suporta, adunay lain-laing mga kliyente. Ug ang tanan natagbaw niini. Sa ato pa, naa mi mga trabaho sa cron nga check. Kini lang nga ang gidugayon sa mga sesyon nakigsabot sa kliyente, sa wala pa kami wala maglansang. Mahimong usa ka minuto, mahimo’g 10 minuto. Nagdepende kini sa karga sa base ug sa katuyoan niini. Apan kitang tanan naggamit sa pg_stat_activity.

Salamat sa report! Naningkamot ko sa pagsulay sa imong report para sa akong mga aplikasyon. Ug ingon og nagsugod kami og transaksyon bisan asa, ug klaro nga gikompleto namo kini bisan asa. Kung adunay mga eksepsiyon, nan ang tanan nga parehas nga rollback mahitabo. Ug unya naghunahuna ko. Pagkahuman, ang transaksyon mahimong magsugod nga dili klaro. Kini usa ka timaan sa babaye, tingali. Kung maghimo lang ako usa ka pag-update sa rekord, magsugod ba ang transaksyon sa PostgreSQL ug matapos ra kung ang koneksyon wala na?

Kung naghisgot ka karon bahin sa lebel sa aplikasyon, nan kini nagdepende sa drayber nga imong gigamit, sa ORM nga gigamit. Adunay daghang mga setting didto. Kung ikaw adunay auto commit on enabled, unya ang usa ka transaksyon magsugod didto ug magsira dayon.

Sa ato pa, nagsira dayon pagkahuman sa pag-update?

Nagdepende kini sa mga setting. Ginganlan nako ang usa ka setting. Kini mao ang auto commit sa. Common kaayo siya. Kung kini mahimo, nan ang transaksyon giablihan ug gisira. Gawas lang kung klaro nimo nga giingon nga "pagsugod sa transaksyon" ug "pagtapos sa transaksyon", apan naglansad lang usa ka hangyo sa sesyon.

Hello! Salamat sa report! Huna-hunaa nga naa tay database nga muhubag ug muhubag unya nahutdan ug space ang server. Aduna bay mga himan aron masulbad kini nga sitwasyon?

Ang lugar sa server sa maayong paagi kinahanglan nga bantayan.

Pananglitan, ang DBA miadto sa pag-inom og tsa, didto sa usa ka resort, ug uban pa.

Sa diha nga ang usa ka file system gibuhat, labing menos pipila ka reserba nga luna gihimo diin ang data wala gisulat.

Unsa kaha kung kini hingpit nga zero?

Didto kini gitawag nga reserba nga luna, nga mao, kini mahimong buhian, ug depende kung unsa ka dako kini gibuhat, nakuha nimo ang libre nga luna. Sa kasagaran, wala ko kahibalo kung pila ang naa. Ug sa lain nga kaso, paghatud sa mga disk aron adunay ka lugar nga himuon ang usa ka operasyon sa pagbawi. Mahimo nimong papason ang pipila ka lamesa nga gigarantiyahan nimo nga dili kinahanglan.

Wala na bay laing gamit?

Kanunay kini nga hinimo sa kamot. Ug sa lugar gipadayag kung unsa ang mas maayo nga buhaton didto, tungod kay adunay mga datos nga kritikal, adunay dili kritikal. Ug alang sa matag database ug aplikasyon nga magamit niini, nagdepende kini sa negosyo. Kanunay kini nga nakahukom sa lugar.

Salamat sa report! Naa koy duha ka pangutana. Una, imong gipakita ang mga slide diin gipakita nga sa kaso sa gibitay nga mga transaksyon, ang gidaghanon sa lamesa nga luna ug ang gidak-on sa indeks motubo. Ug dugang pa sa taho adunay daghang mga utilities nga nagputos sa tablet. Ug komosta ang index?

Giputos usab nila kini.

Apan ang vacuum wala makaapekto sa indeks?

Ang uban nagtrabaho sa usa ka indeks. Pananglitan pg_rapack, pgcompacttable. Ang vacuum naghimo pag-usab sa mga indeks, nakaapekto niini. Ang VACUUM FULL adunay esensya sa pag-overwrit sa tanan, i.e. kini molihok sa tanan.

Ug ang ikaduhang pangutana. Wala ko kasabot nganong ang mga report bahin sa mga replika nagdepende pag-ayo sa replikasyon mismo. Para nako ang mga taho nagbasa, ug ang pagkopya kay gisulat.

Unsay hinungdan sa panagsumpaki sa pagkopya? Kita adunay usa ka Agalon diin ang mga proseso mahitabo. Adunay kami usa ka autovacuum. Autovacuum sa tinuud, unsa ang gibuhat niini? Giputol niya ang pipila ka mga daan nga linya. Kung niining panahona kami adunay usa ka hangyo sa replika nga nagbasa niining mga daan nga linya, ug sa Agalon adunay usa ka sitwasyon nga ang autovacuum nagtimaan niini nga mga linya kutob sa mahimo alang sa pagsulat pag-usab, nan among gi-overwrote kini. Ug nakadawat kami usa ka pakete sa datos, kung kinahanglan namon nga isulat pag-usab ang mga linya nga gikinahanglan sa hangyo sa replika, unya ang proseso sa pagkopya maghulat alang sa timeout nga imong gi-configure. Ug unya ang PostgreSQL magdesisyon kung unsa ang labi ka hinungdanon niini. Ug ang pagkopya mas importante alang kaniya kay sa usa ka hangyo, ug iyang pusilon ang hangyo sa paghimo niini nga mga kausaban sa replika.

Andrew, naa koy pangutana. Kining nindot nga mga graphic nga imong gipakita atol sa presentasyon, mao ba kini ang resulta sa pipila ka trabaho sa imong utility? Giunsa paghimo ang mga tsart?

Kini usa ka serbisyo Okmeter.

Kini ba usa ka komersyal nga produkto?

Oo. Kini usa ka komersyal nga produkto.

Source: www.habr.com

Idugang sa usa ka comment