Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Kuring nyarankeun anjeun maca transkrip laporan ti mimiti 2016 ku Andrey Salnikov "Kasalahan tipikal dina aplikasi anu nyababkeun bloat di postgresql"

Dina laporan ieu, kuring bakal nganalisis kasalahan utama dina aplikasi anu timbul dina tahap ngarancang sareng nyerat kode aplikasi. Sareng kuring ngan ukur bakal nyandak kasalahan anu nyababkeun bloat di Postgresql. Sakumaha aturan, ieu mangrupikeun awal tungtung kinerja sistem anjeun sacara gembleng, sanaos awalna henteu aya prasyarat pikeun ieu anu katingali.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Bungah ngabagéakeun sadayana! Laporan ieu henteu téknis sapertos anu sateuacana ti batur sapagawean kuring. Laporan ieu utamana ditujukeun pikeun pamekar sistem backend sabab urang gaduh jumlah klien anu lumayan ageung. Sareng aranjeunna sadayana ngalakukeun kasalahan anu sami. Kuring gé ngabejaan Anjeun tentang aranjeunna. Kuring bakal ngajelaskeun naon hal fatal jeung goréng ieu ngakibatkeun kasalahan.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Naha aya kasalahan? Éta dilakukeun pikeun dua alesan: sacara acak, sigana bakal tiasa dianggo sareng kusabab teu terang sababaraha mékanisme anu lumangsung dina tingkat antara pangkalan data sareng aplikasi, kitu ogé dina database éta sorangan.

Kuring bakal masihan anjeun tilu conto sareng gambar anu pikasieuneun kumaha goréngna. Kuring sakeudeung bakal nyaritakeun ngeunaan mékanisme anu aya di dinya. Jeung kumaha carana nungkulan aranjeunna, nalika éta kajadian, sarta naon métode preventif ngagunakeun pikeun nyegah kasalahan. Kuring gé ngabejaan Anjeun tentang parabot bantu sarta nyadiakeun Tumbu mangpaat.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

I dipaké database test dimana kuring kungsi dua tabel. Hiji piring kalayan rekening palanggan, anu sanés kalayan transaksi dina rekening ieu. Sarta kalawan sababaraha frékuénsi kami ngamutahirkeun balances on rekening ieu.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Data awal piring: éta rada leutik, 2 MB. Waktu respon pikeun database sarta husus pikeun tanda oge pohara alus. Jeung beban cukup alus - 2 operasi per detik nurutkeun piring.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Sareng ngalangkungan laporan ieu kuring bakal nunjukkeun ka anjeun grafik supados anjeun jelas ngartos naon anu lumangsung. Bakal salawasna aya 2 slides kalawan grafik. Slide kahiji nyaéta naon anu lumangsung sacara umum dina server.

Sareng dina kaayaan ieu, urang ningali yén urang leres-leres ngagaduhan tanda anu alit. Indéksna leutik dina 2 MB. Ieu mangrupikeun grafik munggaran di kénca.

Waktu respon rata dina server oge stabil sarta pondok. Ieu grafik katuhu luhur.

Grafik kénca handap nembongkeun transaksi pangpanjangna. Kami ningali yén transaksi réngsé gancang. Sareng autovacuum henteu acan tiasa dianggo di dieu, sabab éta tés awal. Éta bakal terus dianggo sareng bakal mangpaat pikeun urang.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

The slide kadua bakal salawasna dedicated ka plat keur diuji. Dina kaayaan ieu, urang terus ngamutahirkeun kasaimbangan akun klien urang. Sarta kami ningali yén waktu respon rata pikeun operasi update téh rada alus, kirang ti millisecond a. Urang nempo yén sumberdaya processor (ieu grafik katuhu luhur) ogé dikonsumsi merata jeung rada leutik.

Grafik katuhu handap nunjukkeun sabaraha operasi sareng mémori disk anu urang lebet dina milarian garis anu dipikahoyong sateuacan ngapdet éta. Jeung jumlah operasi nurutkeun tanda nyaeta 2 per detik, sakumaha ceuk kuring di awal.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Sareng ayeuna urang gaduh tragedi. Kanggo sababaraha alesan aya urus poho lila. Alesanna biasana sadayana banal:

  • Salah sahiji anu paling umum nyaéta urang ngamimitian ngaksés jasa éksternal dina kode aplikasi. Jeung jasa ieu teu ngajawab kami. Nyaéta, kami muka transaksi, ngadamel parobihan dina pangkalan data sareng angkat tina aplikasi pikeun maca surat atanapi ka jasa anu sanés dina infrastruktur kami, sareng pikeun sababaraha alesan éta henteu ngabales ka kami. Sareng sési kami macét dina kaayaan anu teu dipikanyaho iraha éta bakal direngsekeun.
  • Kaayaan kadua nyaéta nalika aya pengecualian dina kode kami pikeun sababaraha alesan. Sareng iwal kami henteu ngolah nutup transaksi. Sarta kami réngsé kalawan sési gantung kalawan urus muka.
  • Sareng anu terakhir ogé kasus anu cukup umum. Ieu kode kualitas low. Sababaraha kerangka muka transaksi. Ieu hangs, jeung anjeun bisa jadi teu nyaho di aplikasi nu boga eta ngagantung.

Dimana hal-hal sapertos kitu nuju?

Nepi ka titik yén tabel sarta indexes urang ngawitan ngabareuhan nyirorot. Ieu persis pangaruh bloat sarua. Pikeun pangkalan data, ieu hartosna waktos réspon database bakal ningkat pisan sareng beban dina server database bakal ningkat. Jeung salaku hasilna, aplikasi urang bakal sangsara. Kusabab lamun spent 10 milliseconds dina kode anjeun dina pamundut ka database, 10 milliseconds on logika anjeun, lajeng fungsi Anjeun nyandak 20 milliseconds pikeun ngalengkepan. Tur ayeuna kaayaan anjeun bakal lengkep hanjelu.

Jeung hayu urang tingali naon kajadian. Grafik kénca handap nunjukeun yen urang boga urus panjang panjang. Sareng upami urang tingali dina grafik kénca luhur, urang tingali yén ukuran méja urang ujug-ujug ngaluncat tina dua megabyte ka 300 megabyte. Dina waktos anu sami, jumlah data dina tabél henteu robih, nyaéta aya jumlah sampah anu lumayan ageung.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Kaayaan umum ngeunaan rata-rata waktos réspon server ogé parantos robih ku sababaraha ordo ageungna. Nyaéta, sadaya pamundut dina server mimiti turun lengkep. Sareng dina waktos anu sami, prosés Postgres internal diluncurkeun dina bentuk autovacuum, anu nyobian ngalakukeun hiji hal sareng ngonsumsi sumber daya.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Naon anu lumangsung kalawan tanda urang? Sami. waktos respon rata urang nurutkeun tanda geus ucul nepi sababaraha ordo gedena. Husus dina hal sumberdaya dikonsumsi, urang tingali yén beban dina processor geus ngaronjat pisan. Ieu grafik katuhu luhur. Sarta eta geus ngaronjat sabab processor kudu nyortir ngaliwatan kebat garis gunana dina pilarian tina hiji diperlukeun. Ieu grafik katuhu handap. Hasilna, jumlah telepon urang per detik mimiti turun pisan signifikan, sabab database teu boga waktu pikeun ngolah jumlah sarua requests.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Urang kedah hirup deui. Urang buka online tur manggihan yén transaksi lila ngakibatkeun masalah. Urang manggihan tur maéhan urus ieu. Sareng sadayana janten normal pikeun urang. Sagalana jalan sakumaha sakuduna.

Kami tenang, tapi saatos sababaraha waktos urang mimiti perhatikeun yén aplikasina henteu jalanna sami sareng sateuacan darurat. Requests masih diprosés laun, sarta nyata laun. Hiji satengah dua kali langkung laun khususna dina conto kuring. Beban dina server ogé leuwih luhur ti éta saméméh kacilakaan éta.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Sareng patarosan: "Naon anu kajantenan ka dasar ayeuna?" Sareng kaayaan di handap ieu lumangsung kalayan dasarna. Dina bagan urus anjeun tiasa ningali yén éta parantos lirén sareng leres-leres henteu aya transaksi jangka panjang. Tapi ukuran tanda fatally ngaronjat salila kacilakaan éta. Sarta saprak éta maranéhna teu turun. Waktu rata-rata dina dasarna parantos stabil. Jeung waleran sigana datang adequately dina speed ditarima ku urang. Autovacuum jadi leuwih aktip sarta mimiti ngalakukeun hiji hal kalawan tanda, sabab perlu ngayak ngaliwatan leuwih data.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Husus, nurutkeun piring test kalawan rekening, dimana urang ngarobah balances: waktu respon pikeun pamundut a sigana geus balik ka normal. Tapi dina kanyataanana éta hiji satengah kali leuwih luhur.

Sareng tina beban dina prosésor, urang ningali yén beban dina prosésor henteu acan uih deui kana nilai anu diperyogikeun sateuacan kacilakaan. Jeung alesan aya perenahna persis dina grafik katuhu handap. Ieu bisa ditempo yén jumlah nu tangtu memori keur searched dinya. Hartina, pikeun manggihan garis diperlukeun, urang runtah sumberdaya tina server database bari nyortir ngaliwatan data gunana. Jumlah transaksi per detik geus stabilized.

Gemblengna alus, tapi kaayaan leuwih goreng ti éta. Hapus degradasi database salaku konsekuensi tina aplikasi urang nu gawéna kalayan database ieu.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Sareng ngartos naon anu lumangsung di dinya, upami anjeun henteu aya dina laporan sateuacana, ayeuna hayu urang kéngingkeun téori sakedik. Téori ngeunaan prosés internal. Naha vakum mobil sareng naon anu dilakukeun?

Sacara harfiah sakeudeung pikeun pamahaman. Di sawatara titik dina waktu urang boga méja. Simkuring gaduh barisan dina tabél. Garis ieu tiasa aktip, hirup, sareng naon anu urang peryogikeun ayeuna. Aranjeunna ditandaan héjo dina gambar. Sareng aya garis maot anu parantos digarap, parantos diropéa, sareng éntri énggal parantos muncul dina éta. Sareng aranjeunna ditandaan yén aranjeunna henteu deui pikaresepeun pikeun pangkalan data. Tapi aranjeunna dina tabél kusabab fitur Postgres.

Naha anjeun peryogi vakum mobil? Dina sababaraha waktos, autovacuum sumping, ngaksés pangkalan data sareng naroskeun: "Punten pasihan abdi id tina transaksi pangkolotna anu ayeuna dibuka dina pangkalan data." pangkalan data mulih id ieu. Jeung autovacuum nu, ngandelkeun eta, sorts ngaliwatan garis dina tabél. Sareng upami anjeunna ningali yén sababaraha garis parantos dirobih ku transaksi anu langkung lami, maka anjeunna gaduh hak pikeun nyirian aranjeunna salaku garis anu tiasa dianggo deui di hareup ku nyerat data anyar di dinya. Ieu prosés tukang.

Dina waktu ieu, urang neruskeun gawé bareng database sarta nuluykeun sababaraha parobahan dina tabél. Sareng dina garis ieu, anu tiasa dianggo deui, urang nyerat data énggal. Ku kituna urang meunang siklus hiji, ie sadaya waktu sababaraha garis heubeul maot muncul di dinya, tinimbang aranjeunna urang nulis handap garis anyar nu urang peryogi. Sareng ieu mangrupikeun kaayaan normal pikeun PostgreSQL damel.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Naon anu lumangsung salila kacilakaan? Kumaha prosés ieu lumangsung di dinya?

Kami ngagaduhan tanda dina sababaraha kaayaan, sababaraha hirup, sababaraha garis maot. Vakum mobil geus datang. Anjeunna naroskeun ka database naon transaksi pangkolotna urang sareng naon id na. Kuring narima id ieu, nu bisa jadi loba jam ka tukang, meureun sapuluh menit ka tukang. Éta gumantung kana sabaraha beurat beban anjeun dina database anjeun. Sareng anjeunna milarian garis anu tiasa ditandaan salaku dianggo deui. Sareng kuring henteu mendakan garis sapertos dina méja kami.

Tapi dina waktu ieu urang neruskeun gawé bareng tabel. Urang ngalakukeun hiji hal di dinya, ngapdet deui, ngarobah data. Naon anu kedah dilakukeun ku database dina waktos ayeuna? Manehna teu boga pilihan tapi pikeun nambahkeun garis anyar dina tungtung tabel aya. Ku kituna ukuran méja urang mimiti ngabareuhan.

Kanyataanna, urang peryogi garis héjo pikeun jalan. Tapi dina mangsa masalah sapertos, tétéla yén persentase garis héjo pisan low sapanjang sakabéh méja.

Sareng nalika urang ngaéksekusi pamundut, pangkalan data kedah ngalangkungan sadaya jalur: beureum sareng héjo, pikeun milarian garis anu dipikahoyong. Jeung pangaruh bloating tabel kalawan data gunana disebut "bloat", nu ogé eats up spasi disk urang. Émut, éta 2 MB, janten 300 MB? Ayeuna robih megabyte ka gigabyte sareng anjeun bakal gancang kaleungitan sadaya sumber disk anjeun.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Konsékuansi naon bisa jadi aya pikeun urang?

  • Dina conto abdi, tabel sarta indéks tumuwuh 150 kali. Sababaraha klien kami ngagaduhan kasus anu langkung fatal nalika aranjeunna mimiti kaluar tina rohangan disk.
  • Ukuran tabel sorangan moal ngurangan. Autovacuum dina sababaraha kasus bisa neukteuk off buntut tabel lamun aya ngan garis maot. Tapi saprak aya rotasi konstan, hiji garis héjo bisa freeze dina tungtungna jeung teu diropéa, bari sakabeh batur bakal ditulis handap wae di awal piring. Tapi ieu acara saperti teu mirip nu tabel Anjeun sorangan bakal ngaleutikan dina ukuranana, jadi Anjeun teu kudu ngaharepkeun eta.
  • Pangkalan data kedah nyortir sakumpulan garis anu teu aya gunana. Sarta kami runtah sumberdaya disk, urang runtah sumberdaya processor jeung listrik.
  • Sareng ieu langsung mangaruhan aplikasi urang, sabab upami di awal urang nyéépkeun 10 milliseconds dina pamundut, 10 milliseconds dina kode urang, teras dina mangsa kacilakaan urang mimitian méakkeun kadua dina pamundut na 10 milliseconds on kode, i.e. gedena dina kinerja aplikasi turun. Jeung nalika kacilakaan ieu ngumbar, urang mimitian méakkeun 20 milliseconds on pamundut a, 10 milliseconds on kode a. Ieu ngandung harti yén urang masih turun ku hiji satengah kali dina produktivitas. Sareng ieu sadayana kusabab hiji transaksi anu beku, sigana kusabab kasalahan urang.
  • Sareng patarosan: "Kumaha urang tiasa uih deui sadayana?" supados sadayana saé sareng kami sareng pamundut sumping gancang-gancang sateuacan kacilakaan éta.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Pikeun tujuan ieu aya siklus tangtu gawé anu dilaksanakeun.

Mimitina urang kedah milarian tabel masalah anu kembung. Urang ngarti yén dina sababaraha tabel rekaman leuwih aktip, di batur kirang aktip. Sareng pikeun ieu kami nganggo ekstensi pgstattuple. Ku masang ekstensi ieu, anjeun tiasa nyerat patarosan anu bakal ngabantosan anjeun mendakan tabel anu rada kembung.

Sakali anjeun mendakan tabel ieu, anjeun kedah niiskeunana. Geus aya parabot pikeun ieu. Di perusahaan kami kami nganggo tilu alat. Anu kahiji nyaéta VACUUM FULL anu diwangun. Anjeunna kejam, kasar jeung merciless, tapi kadang pohara kapaké. Pg_repack и pgcompacttable - Ieu mangrupikeun utilitas pihak katilu pikeun ngompres tabel. Jeung maranéhna ngubaran database leuwih taliti.

Éta dianggo gumantung kana naon anu langkung merenah pikeun anjeun. Tapi kuring bakal nyarioskeun ka anjeun dina tungtungna. Hal utama nyaéta aya tilu alat. Aya nyatu milih ti.

Saatos urang ngabenerkeun sadayana sareng mastikeun yén sadayana leres, urang kedah terang kumaha nyegah kaayaan ieu di hareup:

  • Ieu bisa dicegah cukup gampang. Anjeun kedah ngawas durasi sesi dina server Master. Utamana sesi bahaya dina dianggurkeun dina kaayaan urus. Ieu mangrupikeun jalma anu nembé muka transaksi, ngalakukeun hiji hal sareng tinggalkeun, atanapi ngan saukur ngagantung, leungit dina kodeu.
  • Sareng pikeun anjeun, salaku pamekar, penting pikeun nguji kode anjeun nalika kaayaan ieu timbul. Teu hésé dilakonan. Ieu bakal cek mangpaat. Anjeun bakal nyingkahan sajumlah ageung masalah "budak budak" anu aya hubunganana sareng transaksi anu panjang.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Dina grafik ieu, kuring hayang némbongkeun Anjeun kumaha tanda jeung paripolah database robah sanggeus kuring ngaliwatan tanda jeung VACUUM FULL dina hal ieu. Ieu sanés produksi pikeun kuring.

Ukuran méja langsung balik deui ka kaayaan operasi normalna sababaraha megabyte. Ieu teu greatly mangaruhan waktu respon rata pikeun server.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Tapi husus pikeun tanda test urang, dimana urang diropéa kasaimbangan akun, urang tingali yén waktu respon rata pikeun pamundut pikeun ngapdet data dina tanda diréduksi jadi tingkat pre-darurat. Sumberdaya anu dikonsumsi ku prosesor pikeun ngarengsekeun pamundut ieu ogé turun ka tingkat pre-kacilakaan. Sareng grafik katuhu handap nunjukkeun yén ayeuna urang mendakan persis garis anu urang peryogikeun langsung, tanpa ngalangkungan tumpukan garis paéh anu aya sateuacan méja dikomprés. Sareng waktos pamundut rata-rata tetep dina tingkat anu sami. Tapi di dieu kuring gaduh, rada, kasalahan dina hardware kuring.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Ieu dimana carita munggaran ends. Ieu paling umum. Sarta eta kajadian ka dulur, paduli pangalaman klien tur kumaha mumpuni programer. Sooner atanapi engké ieu kajadian.

Carita kadua, dimana urang ngadistribusikaeun beban sareng ngaoptimalkeun sumber daya server

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

  • Kami parantos dewasa sareng janten lalaki anu serius. Sareng urang ngartos yén urang gaduh réplika sareng éta hadé pikeun urang saimbang beban: nyerat ka Master, sareng maca tina réplika. Sareng biasana kaayaan ieu timbul nalika urang badé nyiapkeun sababaraha laporan atanapi ETL. Jeung bisnis pisan senang ngeunaan ieu. Anjeunna leres-leres hoyong rupa-rupa laporan kalayan seueur analitik anu rumit.
  • Laporan nyandak sababaraha jam, sabab analytics kompléks teu bisa diitung dina milliseconds. Simkuring, kawas guys macul, nulis kode. Dina aplikasi sisipan urang nyieun rékaman dina Master, sarta ngaéksekusi laporan dina réplika.
  • Ngadistribusikaeun beban.
  • Sagalana jalan sampurna. Kami hebat.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Jeung kumaha kaayaan ieu kasampak kawas? Husus dina grafik ieu, Kuring ogé ditambahkeun durasi transaksi ti replica pikeun durasi urus. Sadaya grafik sejenna ngan nujul ka server Master.

Ku waktos ieu, dewan laporan kuring parantos ningkat. Aya deui di antarana. Kami ningali yén rata-rata waktos réspon server stabil. Kami ningali yén dina réplika kami ngagaduhan transaksi anu panjang anu ngajalankeun 2 jam. Kami ningali operasi sepi tina autovacuum, anu ngolah garis paéh. Sareng sadayana saé sareng urang.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Husus, dumasar kana piring anu diuji, kami terus ngapdet kasaimbangan akun di dinya. Sarta kami ogé boga waktu respon stabil pikeun requests, konsumsi sumberdaya stabil. Sagalana rupa kalawan kami.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Sagalana henteu kunanaon dugi ka waktos laporan ieu mimiti hurung deui kusabab konflik sareng réplikasi. Jeung maranéhna seuneu deui dina interval nu sarua.

Urang buka online tur mimitian maca naha ieu lumangsung. Sarta kami manggihan solusi.

Solusi kahiji nyaéta ningkatkeun latency réplikasi. Kami terang yén laporan kami dijalankeun salami 3 jam. Urang nyetel reureuh réplikasi ka 3 jam. Kami ngaluncurkeun sadayana, tapi kami tetep ngagaduhan masalah sareng laporan kadang dibatalkeun.

Urang hayang sagalana sampurna. Urang nanjak salajengna. Sarta kami kapanggih setting tiis dina Internét - hot_standby_feedback. Hayu urang hurungkeun. Hot_standby_feedback ngamungkinkeun urang pikeun nahan deui autovacuum dina Master. Ku kituna, urang sagemblengna meunang leupas tina konflik réplikasi. Sareng sadayana tiasa dianggo pikeun urang kalayan laporan.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Sareng naon anu kajantenan sareng server Master dina waktos ayeuna? Sarta kami dina total kasulitan jeung server Master. Ayeuna urang ningali grafik nalika kuring gaduh duanana setélan ieu diaktipkeun. Sarta kami ningali yén sési on replica kami kumaha bae mimiti pangaruh kaayaan dina server Master. Anjeunna gaduh pangaruh sabab anjeunna ngareureuhkeun autovacuum, anu ngaleungitkeun garis paéh. Ukuran méja urang geus skyrocketed deui. Rata-rata waktos palaksanaan query sakuliah database ogé skyrocketed. The autovacuums tightened up saeutik.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Husus, tina piring kami, urang ningali yén update data dina éta ogé luncat ka langit. Konsumsi CPU ogé ningkat pisan. Urang deui ngaliwatan angka nu gede ngarupakeun maot, garis gunana. Sareng waktos réspon pikeun tanda ieu sareng jumlah transaksi parantos turun.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Kumaha upami urang henteu terang naon anu kuring nyarioskeun sateuacanna?

  • Urang mimitian néangan masalah. Lamun urang encountered masalah dina bagian kahiji, urang terang yen ieu bisa jadi alatan transaksi panjang tur buka Master. Kami gaduh masalah dina Master. Sosis anjeunna. Panasna, Rata-rata Bebanna sakitar saratus.
  • Requests aya slow, tapi urang teu ningali sagala transaksi lila-ngajalankeun aya. Sareng urang henteu ngartos naon masalahna. Simkuring teu ngartos dimana néangan.
  • Urang pariksa parabot server. Meureun razia urang nabrak. Meureun memori stick urang kaduruk kaluar. Sumuhun, nanaon bisa lumangsung. Tapi henteu, server énggal, sadayana tiasa dianggo.
  • Sarerea ngajalankeun: pangurus, pamekar jeung sutradara. Euweuh mantuan.
  • Sarta di sawatara titik sagalana dumadakan dimimitian pikeun ngabenerkeun sorangan.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Dina waktos ieu, pamundut dina réplika kami diolah sareng ditinggalkeun. Kami nampi laporan. Usaha masih bagja. Sakumaha anjeun tiasa tingali, tanda kami parantos ningkat deui sareng moal ngaleutikan. Dina grafik kalawan sesi, abdi ninggalkeun sapotong urus panjang ieu ti replica ku kituna anjeun bisa estimasi sabaraha lila waktu nu diperlukeun nepi ka kaayaan stabilizes.

sési réngsé. Sarta ngan sanggeus sababaraha waktu server datang leuwih atawa kurang dina urutan. Jeung waktu respon rata pikeun requests on server Master mulang ka normal. Kusabab, tungtungna, autovacuum ngagaduhan kasempetan pikeun ngabersihan sareng nyirian garis paéh ieu. Sarta anjeunna mimiti ngalakukeun pakasaban na. Jeung kumaha gancang manéhna ngalakukeun eta, jadi gancang urang bakal meunang dina urutan.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Numutkeun kana tablet anu diuji, dimana urang ngamutahirkeun kasaimbangan akun, urang ningali gambar anu sami. Rata-rata waktos update akun ogé laun-laun normalisasi. Sumberdaya anu dikonsumsi ku prosesor ogé ngirangan. Jeung jumlah transaksi per detik mulang ka normal. Tapi deui urang balik deui ka normal, teu sarua jeung urang saméméh kacilakaan.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Dina sagala hal, urang meunang drawdown kinerja, saperti dina kasus nu pertama, ku hiji satengah dua kali, sarta kadangkala leuwih.

Urang sigana geus dipigawé sagalana katuhu. Ngadistribusikaeun beban. Parabot teu dianggurkeun. Urang ngabagi pamundut numutkeun pikiran urang, tapi tetep sadayana tétéla parah.

  • Ulah aktipkeun hot_standby_feedback? Leres, henteu disarankeun pikeun dihurungkeun tanpa alesan anu kuat. Kusabab pulas ieu langsung mangaruhan server Master sarta suspends operasi autovacuum dinya. Ku sangkan eta dina sababaraha réplika jeung poho ngeunaan eta, anjeun bisa maéhan Master tur meunang masalah badag kalayan aplikasi.
  • Ningkatkeun max_standby_streaming_delay? Leres, pikeun laporan ieu leres. Upami anjeun gaduh laporan tilu jam sareng anjeun henteu hoyong éta ngadat kusabab konflik réplikasi, teras kantun ningkatkeun reureuh. Laporan jangka panjang henteu peryogi data anu parantos sumping dina pangkalan data ayeuna. Upami Anjeun gaduh eta salila tilu jam, teras anjeun ngajalankeun eta pikeun sababaraha periode data heubeul. Sareng pikeun anjeun, naha aya tunda tilu jam atanapi tunda genep jam moal aya bédana, tapi anjeun bakal nampi laporan sacara konsisten sareng moal aya masalah sareng aranjeunna ragrag.
  • Alami, anjeun kudu ngadalikeun sési panjang dina réplika, utamana lamun mutuskeun pikeun ngaktipkeun hot_standby_feedback on replica a. Sabab sagala bisa kajadian. Kami masihan réplika ieu ka pamekar supados anjeunna tiasa nguji paménta. Manéhna nulis paménta gélo. Anjeunna ngaluncurkeun éta sareng angkat nginum tèh, sareng kami ngagaduhan Master anu mapan. Atawa meureun urang nempatkeun aplikasi salah di dinya. Kaayaanana rupa-rupa. Sesi dina réplika kedah diawaskeun sacara saksama sapertos dina Master.
  • Sareng upami anjeun gaduh patarosan anu gancang sareng panjang dina réplika, maka dina hal ieu langkung saé ngabagi aranjeunna pikeun ngadistribusikaeun beban. Ieu mangrupikeun tautan ka streaming_delay. Pikeun anu gancang, gaduh hiji réplika kalayan reureuh réplikasi leutik. Pikeun requests ngalaporkeun lila-ngajalankeun, boga réplika nu bisa lag ku 6 jam atawa sapoé. Ieu kaayaan sagemblengna normal.

Kami ngaleungitkeun akibat ku cara anu sami:

  • Urang manggihan tabel kembung.
  • Sarta kami niiskeun eta ku alat nu pangmerenahna nu cocog kami.

Carita kadua lekasan di dieu. Hayu urang ngaléngkah ka carita katilu.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Ogé rada umum pikeun urang nu urang ngalakukeun migrasi.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

  • Sakur produk parangkat lunak ngembang. Sarat pikeun éta robih. Bisi wae, urang hayang ngamekarkeun. Sarta eta kajadian nu urang kudu ngamutahirkeun data dina tabél, nyaéta pikeun ngajalankeun apdet dina watesan migrasi kami pikeun fungsionalitas anyar nu urang ngenalkeun salaku bagian tina ngembangkeun urang.
  • format data heubeul teu nyugemakeun. Hayu urang ayeuna giliran tabel kadua, dimana kuring gaduh transaksi dina rekening ieu. Jeung hayu urang nyebutkeun yén maranéhanana éta di rubles, sarta kami mutuskeun pikeun ngaronjatkeun akurasi sarta ngalakukeun eta di kopecks. Sareng pikeun ieu urang kedah ngadamel pembaruan: kalikeun sawah sareng jumlah transaksi ku saratus.
  • Di dunya ayeuna, kami nganggo alat kontrol versi database otomatis. Hayu urang nyebutkeun Liquibase. Urang ngadaptarkeun migrasi urang dinya. Urang nguji éta dina dasar tés urang. Sagalana henteu kunanaon. Pembaruan nuju ngalangkungan. Ieu meungpeuk karya bari, tapi kami meunang data diropéa. Sareng urang tiasa ngaluncurkeun fungsionalitas énggal dina ieu. Sadayana diuji sareng dipariksa. Sagalana dikonfirmasi.
  • Kami ngalaksanakeun padamelan anu direncanakeun sareng ngalaksanakeun migrasi.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Ieu mangrupikeun migrasi kalayan pembaruan anu disayogikeun di payun anjeun. Kusabab ieu transaksi akun abdi, piring éta 15 GB. Sarta saprak urang ngamutahirkeun unggal garis, urang dua kali ukuran tabel kalawan update, sabab rewrote unggal garis.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Salila migrasi, urang teu bisa ngalakukeun nanaon jeung piring ieu, sabab sagala requests ka dinya ieu antrian sarta antosan dugi update ieu réngsé. Tapi di dieu Abdi hoyong ngagambar perhatian Anjeun ka angka nu aya dina sumbu nangtung. Nyaéta, urang gaduh waktos pamundut rata-rata sateuacan hijrah sakitar 5 milliseconds sareng beban prosesor, jumlah operasi blok pikeun maca mémori disk kirang ti 7,5.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Kami ngalaksanakeun migrasi sareng ngagaduhan masalah deui.

Migrasi éta suksés, tapi:

  • Fungsi anu lami ayeuna peryogi langkung lami kanggo réngsé.
  • Méja ngagedéan deui.
  • Beban dina server deui jadi leuwih gede ti saméméhna.
  • Na, tangtosna, urang masih tinkering jeung fungsionalitas nu digawé ogé, kami geus ningkat eta saeutik.

Sareng ieu deui bloat, anu deui ngarusak kahirupan urang.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Di dieu kuring nunjukkeun yén méja, sapertos dua kasus sateuacana, moal uih deui kana ukuran anu saacanna. Beban server rata-rata sigana cekap.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Tur upami urang giliran tabel kalawan rekening, urang bakal nempo yén rata waktu pamundut geus dua kali pikeun tabel ieu. Beban dina processor jeung Jumlah garis diurutkeun kaluar dina mémori luncat luhur 7,5, tapi éta leuwih handap. Sarta eta ucul 2 kali dina kasus prosesor, 1,5 kali dina kasus operasi blok, i.e. urang ngagaduhan degradasi dina kinerja server. Jeung salaku hasilna - degradasi kinerja aplikasi urang. Dina waktos anu sami, jumlah telepon tetep dina tingkat anu sami.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Sareng hal anu utama di dieu nyaéta ngartos kumaha carana migrasi sapertos kitu leres. Jeung maranéhna kudu dipigawé. Urang ngalakukeun migrasi ieu cukup konsisten.

  • Migrasi ageung sapertos kitu henteu lumangsung sacara otomatis. Éta kudu salawasna dina kontrol.
  • Pengawasan ku jalma anu berilmu diperyogikeun. Upami Anjeun gaduh DBA dina tim anjeun, teras hayu DBA ngalakukeun eta. Tugasna. Upami henteu, teras ngantepkeun jalma anu paling berpengalaman ngalakukeun éta, anu terang kumaha damel sareng pangkalan data.
  • Skéma database anyar, sanajan urang ngamutahirkeun hiji kolom, urang salawasna nyiapkeun dina tahapan, nyaéta sateuacanna saméméh versi anyar tina aplikasi digulung kaluar:
  • Widang anyar ditambahkeun di mana urang bakal ngarekam data diropéa.
  • Urang mindahkeun data tina widang heubeul ka widang anyar dina bagian leutik. Naha urang ngalakukeun ieu? Firstly, urang salawasna ngadalikeun prosés prosés ieu. Kami terang yén kami parantos ngalihkeun seueur bets sareng seueur anu tinggaleun.
  • Jeung pangaruh positif kadua éta antara unggal bets sapertos urang nutup urus, muka nu anyar, sarta hal ieu ngamungkinkeun autovacuum nu bisa dipake nurutkeun piring, tanda garis maot pikeun dipake deui.
  • Pikeun garis anu bakal muncul nalika aplikasi dijalankeun (urang masih gaduh aplikasi anu lami dijalankeun), kami nambihan pemicu anu nyerat nilai-nilai anyar kana widang anyar. Dina hal urang, ieu multiplication ku saratus tina nilai heubeul.
  • Upami urang leres-leres nekad sareng hoyong lapangan anu sami, teras saatos parantosan sadaya migrasi sareng sateuacan ngaluncurkeun vérsi énggal aplikasina, urang ngan saukur ngaganti ngaran widang. Nu heubeul dibere sababaraha ngaran invented, jeung widang anyar diganti jadi nu heubeul.
  • Sareng saatos éta kami ngaluncurkeun versi énggal tina aplikasi éta.

Sarta dina waktos anu sareng urang moal meunang bloat sarta moal sangsara dina hal kinerja.

Ieu dimana carita katilu ends.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina 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

Sareng ayeuna sakedik langkung rinci ngeunaan alat anu kuring nyarios dina carita anu munggaran.

Sateuacan milarian bloat, anjeun kedah masang ekstensi pgstattuple.

Janten anjeun henteu kedah naroskeun patarosan, kami parantos nyerat patarosan ieu dina padamelan urang. Anjeun tiasa make aranjeunna. Aya dua pamundut di dieu.

  • Anu kahiji peryogi waktos anu lami kanggo damel, tapi éta bakal nunjukkeun anjeun nilai bloat anu pasti tina méja.
  • Anu kadua dianggo langkung gancang sareng efektif pisan nalika anjeun kedah gancang ngira-ngira naha aya bloat atanapi henteu numutkeun tabel. Sareng anjeun ogé kedah ngartos yén bloat sok aya dina méja Postgres. Ieu mangrupikeun fitur tina modél MVCC na.
  • Sareng 20% ​​bloat normal pikeun tabel dina kalolobaan kasus. Hartina, anjeun teu kudu salempang sarta niiskeun tabel ieu.

Urang ilahar kaluar kumaha carana ngaidentipikasi tabel nu ngabareuhan kalawan data gunana.

Ayeuna ngeunaan kumaha carana ngalereskeun bloat:

  • Upami urang gaduh tablet leutik sareng disk anu saé, nyaéta, dina tablet dugi ka gigabyte, tiasa waé nganggo VACUUM FULL. Anjeunna bakal nyandak hiji konci ekslusif ti anjeun dina tabél pikeun sababaraha detik sarta oke, tapi anjeunna bakal ngalakukeun sagalana gancang tur harshly. Naon anu dilakukeun ku VACUUM FULL? Butuh hiji konci ekslusif dina tabel sarta rewrites baris hirup tina tabel heubeul kana tabel anyar. Sarta dina tungtungna anjeunna ngagantikeun aranjeunna. Éta mupus file anu lami sareng ngagentos anu lami ku anu énggal. Tapi pikeun durasi karyana, butuh konci ekslusif dina méja. Ieu ngandung harti yén anjeun teu bisa ngalakukeun nanaon jeung tabel ieu: teu nulis ka dinya, atawa maca kana eta, atawa ngarobah éta. Jeung VACUUM FULL merlukeun spasi disk tambahan pikeun nulis data.
  • Alat salajengna pg_repack. Dina prinsipna, éta pisan sami sareng VACUUM FULL, sabab éta ogé nyerat ulang data tina file anu lami ka anu énggal sareng ngagentosana dina tabél. Tapi dina waktos anu sami, éta henteu nyandak konci ekslusif dina méja dina awal padamelanna, tapi ngan ukur dina waktos éta parantos gaduh data anu siap pikeun ngagentos file. Sarat sumberdaya disk na sami sareng VACUUM FULL. Anjeun peryogi rohangan disk tambahan, sareng ieu kadang kritis upami anjeun gaduh tabel terabyte. Sarta eta rada processor-lapar sabab aktip jalan kalawan I / O.
  • Utiliti katilu nyaéta pgcompacttable. Éta langkung ati-ati sareng sumberdaya sabab tiasa dianggo dumasar kana prinsip anu rada béda. Gagasan utama pgcompacttable nyaéta yén éta mindahkeun sadaya baris langsung ka awal méja nganggo apdet dina tabél. Lajeng ngajalankeun vakum dina tabel ieu, sabab urang terang yen urang boga baris hirup di awal jeung baris maot dina tungtungna. Jeung vakum sorangan motong kaluar buntut ieu, i.e. teu merlukeun loba spasi disk tambahan. Sarta dina waktos anu sareng, éta masih bisa squeezed dina watesan sumberdaya.

Sagalana kalawan parabot.

Kasalahan umum dina aplikasi anu nyababkeun kembung dina postgresql. Andrey Salnikov

Lamun manggihan topik bloat metot dina watesan delving leuwih jero, ieu sababaraha tumbu mangpaat:

Kuring nyobian langkung seueur pikeun nunjukkeun carita horor pikeun pamekar, sabab aranjeunna klien langsung kami tina database sareng kedah ngartos naon sareng naon tindakan anu nuju. Kuring miharep kuring hasil. Nuhun kana perhatosanana!

patarosan

Hatur nuhun laporan! Anjeun ngobrol ngeunaan kumaha anjeun tiasa ngaidentipikasi masalah. Kumaha maranéhna bisa warned? Hartina, kuring kungsi kaayaan dimana requests ngagantung teu ngan sabab diaksés sababaraha layanan éksternal. Ieu ngan sababaraha gabung liar. Aya sababaraha pamenta alit, teu bahaya anu ngagantung sadinten, teras ngamimitian ngalakukeun omong kosong. Nyaéta, sami pisan sareng anu anjeun terangkeun. Kumaha ngalacak ieu? Diuk terus lalajo pamundut nu nyangkut? Kumaha ieu tiasa dicegah?

Dina hal ieu, ieu mangrupikeun tugas pikeun pangurus perusahaan anjeun, sanés pikeun DBA.

Abdi administrator.

PostgreSQL gaduh tempoan anu disebut pg_stat_activity anu nunjukkeun patarosan anu dangling. Tur anjeun tiasa ningali sabaraha lila eta hangs aya.

Naha kuring kedah sumping sareng ningali unggal 5 menit?

Setel cron sareng pariksa. Upami anjeun gaduh pamundut jangka panjang, nyerat surat sareng éta. Nyaéta, anjeun henteu kedah ningali ku panon anjeun, éta tiasa otomatis. Anjeun bakal nampi surat, anjeun ngaréspon kana éta. Atanapi anjeun tiasa moto sacara otomatis.

Naha aya alesan anu jelas naha ieu kajadian?

Kuring geus didaptarkeun sababaraha. Conto-conto séjénna anu leuwih kompleks. Jeung can aya paguneman pikeun lila.

Hatur nuhun laporan! Abdi hoyong netelakeun ngeunaan utilitas pg_repack. Upami anjeunna henteu ngalakukeun konci ekslusif, maka ...

Manehna ngalakukeun hiji konci ekslusif.

... teras kuring berpotensi leungit data. Naha aplikasi kuring henteu ngarékam nanaon salami ieu?

Henteu, éta tiasa dianggo kalayan lancar sareng méja, nyaéta pg_repack mimiti mindahkeun sadaya jalur langsung anu aya. Alami, aya sababaraha jenis asupna kana tabél. Anjeunna ngan ngalungkeun buntut kuda ieu kaluar.

Nyaeta, anjeunna sabenerna ngalakukeun eta dina tungtungna?

Tungtungna, anjeunna nyandak konci ekslusif pikeun swap file ieu.

Naha éta bakal langkung gancang tibatan VACUUM FULL?

VACUUM FULL, pas dimimitian, langsung nyandak konci ekslusif. Sareng dugi anjeunna ngalakukeun sadayana, anjeunna moal ngantep anjeunna angkat. Sareng pg_repack nyandak konci ekslusif ngan dina waktos ngagantian file. Dina momen ieu anjeun moal nulis aya, tapi data moal leungit, sagalana bakal rupa.

Halo! Anjeun ngobrol ngeunaan operasi vakum mobil. Aya grafik kalayan sél rékaman beureum, konéng jeung héjo. Nyaéta, konéng - anjeunna nandaan aranjeunna dihapus. Jeung salaku hasilna, hal anyar bisa ditulis kana aranjeunna?

Sumuhun. Postgres henteu ngahapus garis. Anjeunna gaduh spésifisitas sapertos kitu. Lamun urang ngamutahirkeun hiji garis, urang ditandaan nu heubeul salaku dihapus. The id tina urus nu robah garis ieu mucunghul aya, sarta kami nulis garis anyar. Sareng urang gaduh sesi anu berpotensi tiasa maca aranjeunna. Di sawatara titik maranéhna jadi rada heubeul. Jeung hakekat kumaha autovacuum jalan téh nya éta ngaliwatan garis ieu sarta nandaan aranjeunna salaku teu perlu. Sareng anjeun tiasa nimpa data di dinya.

Abdi ngartos. Tapi éta henteu naon patarosan ngeunaan. Abdi henteu réngsé. Hayu urang nganggap urang boga méja. Cai mibanda widang ukuran variabel. Sareng upami kuring nyobian nyelapkeun anu énggal, éta ngan saukur teu cocog kana sél anu lami.

Henteu, dina hal naon waé, sadaya jalur diropéa di dinya. Postgres boga dua model gudang data. Éta milih tina jinis data. Aya data anu disimpen langsung dina tabél, aya ogé data tos. Ieu jumlahna ageung data: téks, json. Éta disimpen dina piring anu misah. Sareng dumasar kana tablet ieu, carita anu sami sareng bloat lumangsung, nyaéta sadayana sami. Éta ngan didaptarkeun misah.

Hatur nuhun laporan! Dupi éta ditarima ngagunakeun pernyataan timeout queries pikeun ngawatesan durasi?

Katampi pisan. Urang make ieu madhab. Sarta saprak urang teu boga jasa sorangan, kami nyadiakeun rojongan jauh, urang boga rada rupa-rupa klien. Jeung dulur sagemblengna wareg jeung ieu. Nyaéta, urang gaduh padamelan cron anu mariksa. Durasi sesi ngan saukur sapuk sareng klien, sateuacanna kami henteu satuju. Bisa jadi menit, bisa jadi 10 menit. Éta gumantung kana beban dina dasarna sareng tujuanana. Tapi urang sadayana nganggo pg_stat_activity.

Hatur nuhun laporan! Kuring nyobian nerapkeun laporan anjeun kana aplikasi kuring. Jeung sigana kawas urang ngamimitian transaksi madhab, tur jelas ngalengkepan eta madhab. Upami aya sababaraha iwal, teras rollback masih lumangsung. Terus kuring mimiti mikir. Barina ogé, urus bisa jadi teu ngamimitian eksplisit. Ieu meureun hint ka mojang. Mun kuring ngan ngamutahirkeun rékaman, bakal urus dimimitian dina PostgreSQL sarta ngan réngsé nalika sambungan nu dipegatkeun?

Upami anjeun nyarios ayeuna ngeunaan tingkat aplikasi, maka éta gumantung kana supir anu anjeun anggo, kana ORM anu dianggo. Aya seueur setélan di dinya. Upami anjeun gaduh komitmen otomatis diaktipkeun, maka transaksi dimimitian di dinya sareng langsung ditutup.

Nyaeta, éta nutup langsung saatos apdet?

Éta gumantung kana setélan. Kuring ngaranna hiji setting. Ieu otomatis commit on. Ieu rada umum. Upami diaktipkeun, maka transaksi parantos dibuka sareng ditutup. Iwal mun eksplisit ceuk "ngamimitian transaksi" jeung "transaksi tungtung", tapi saukur dibuka pamundut kana rintakan.

Halo! Hatur nuhun laporan! Hayu urang ngabayangkeun yén urang boga database nu bareuh jeung bareuh lajeng spasi dina server ngalir kaluar. Naha aya alat pikeun ngalereskeun kaayaan ieu?

Spasi dina server kedah diawaskeun leres.

Contona, DBA indit pikeun tea, éta di Resort, jsb.

Nalika sistem file dijieun, sahenteuna sababaraha jenis spasi cadangan dijieun dimana data teu ditulis.

Kumaha lamun éta sagemblengna handap enol?

Aya eta disebut spasi ditangtayungan, nyaéta bisa dibébaskeun sarta gumantung kana sabaraha badag eta dijieun, anjeun meunang spasi bébas. Sacara standar kuring henteu terang sabaraha jumlahna. Sareng dina kasus anu sanés, kirimkeun disk supados anjeun gaduh rohangan pikeun ngalakukeun operasi rekonstruksi. Anjeun tiasa mupus sababaraha tabel nu dijamin teu butuh.

Naha aya alat anu sanés?

Ieu salawasna handmade. Sareng sacara lokal janten jelas naon anu pangsaéna pikeun dilakukeun di dinya, sabab sababaraha data kritis sareng sababaraha henteu kritis. Sareng pikeun unggal database sareng aplikasi anu tiasa dianggo sareng éta, éta gumantung kana usaha. Éta salawasna mutuskeun sacara lokal.

Hatur nuhun laporan! Abdi gaduh dua patarosan. Mimiti, anjeun nunjukkeun slide anu nunjukkeun yén nalika transaksi macét, ukuran rohangan méja sareng ukuran indéks tumbuh. Sareng salajengna dina laporan éta aya sakumpulan utilitas anu ngarangkep tablet. Kumaha upami indéks?

Éta ogé dibungkus.

Tapi vakum henteu mangaruhan indéks?

Sababaraha dianggo kalayan indéks. Contona, pg_rapack, pgcompacttable. Vakum nyiptakeun deui indéks sareng mangaruhan aranjeunna. Kalayan VACUUM FULL idena nyaéta nimpa sadayana, nyaéta tiasa dianggo sareng sadayana.

Jeung patarosan kadua. Kuring teu ngarti naha laporan ngeunaan réplika gumantung pisan kana réplikasi sorangan. Sigana mah laporan dibaca, sareng réplikasi ditulis.

Naon anu nyababkeun konflik réplikasi? Kami gaduh Master dina prosés anu lumangsung. Kami gaduh mobil vakum lumangsung. Naon anu dilakukeun ku autovacuum? Anjeunna motong kaluar sababaraha garis heubeul. Lamun dina waktu ieu kami boga pamundut on replica nu maca ieu garis heubeul, sarta dina Master kaayaan lumangsung yén autovacuum ditandaan garis ieu sabisa pikeun overwriting, lajeng urang overwrote aranjeunna. Sareng kami nampi pakét data, nalika urang kedah nyerat deui garis-garis anu dibutuhkeun ku pamundut dina réplika, prosés réplikasi bakal ngantosan waktos waktos anu anjeun konfigurasi. Teras PostgreSQL bakal mutuskeun naon anu langkung penting pikeun éta. Sarta réplikasi leuwih penting pikeun anjeunna ti pamundut, sarta anjeunna bakal némbak pamundut dina urutan nyieun parobahan ieu dina replica nu.

Andrey, abdi gaduh patarosan. Grafik éndah ieu anu anjeun tunjukkeun salami presentasi, naha ieu mangrupikeun hasil tina sababaraha jinis utilitas anjeun? Kumaha éta grafik dijieun?

Ieu mangrupikeun jasa Okméter.

Ieu produk komérsial?

Sumuhun. Ieu produk komérsial.

sumber: www.habr.com

Tambahkeun komentar