Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB

Haufinyane tjena ke u boleletse hore na joang, ho sebelisa litlolo tse tloaelehileng eketsa ts'ebetso ea lipotso tse baloang tsa SQL ho tsoa ho database ea PostgreSQL. Kajeno re tla bua ka hore na ho rekota ho ka etsoa ka mokhoa o atlehileng haholoanyane ka har'a database ntle le ho sebelisa "twist" efe kapa efe ho config - feela ka ho hlophisa phallo ea data ka nepo.

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB

#1. Ho arola

Sengoloa se mabapi le hore na ke hobane'ng ha e le habohlokoa ho hlophisa e sebelisitsoeng karohano "ka khopolo" e se e ntse e le teng, mona re tla bua ka mokhoa oa ho sebelisa mekhoa e meng ka hare ho rona tšebeletso ea ho beha leihlo bakeng sa li-server tse makholo tsa PostgreSQL.

"Lintho tsa matsatsi a fetileng ..."

Qalong, joalo ka MVP leha e le efe, morero oa rona o ile oa qala tlas'a mojaro o bobebe - ho shebella ho ile ha etsoa feela bakeng sa li-server tse leshome tsa bohlokoa ka ho fetisisa, litafole tsohle li ne li batla li lekana ... , 'me hang hape re ile ra leka ho etsa ho hong ka e' ngoe ea litafole 1.5TB ka boholo, re ile ra hlokomela hore le hoja ho ne ho ka khoneha hore re tsoele pele re phela ka tsela ena, ho ne ho se bonolo haholo.

Linako li ne li batla li tšoana le linako tse mahlonoko, mefuta e fapaneng ea PostgreSQL 9.x e ne e sebetsa, kahoo karohano eohle e ne e tlameha ho etsoa "ka letsoho" - ka lefa la tafole le lintho tse susumetsang ho tsamaisa ka matla EXECUTE.

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB
Tharollo ea sephetho e ile ea fetoha bokahohle hoo e ka fetoleloang ho litafole tsohle:

  • Ho ile ha phatlalatsoa tafole ea motsoali ea "hlooho" e se nang letho, e hlalosang tsohle li-index le li-trigger tse hlokahalang.
  • Rekoto ho tsoa ho pono ea moreki e entsoe tafoleng ea "motso", mme e sebelisoa ka hare routing trigger BEFORE INSERT rekoto e ile ea kenngoa "ka 'mele" karolong e hlokahalang. Haeba ho ne ho se na ntho e joalo, re ile ra etsa mokhelo mme ...
  • … ka ho sebelisa CREATE TABLE ... (LIKE ... INCLUDING ...) e entsoe ho latela template ea tafole ea motsoali karolo e nang le thibelo ka letsatsi le batloange le hore ha data e khutlisoa, ho bala ho etsoa feela ho eona.

PG10: teko ea pele

Empa karohano ka lefa e ne e sa tšoanelehe ho sebetsana le melapo e sebetsang ea ho ngola kapa palo e kholo ea likarolo tsa bana. Ka mohlala, u ka hopola hore algorithm ea ho khetha karolo e hlokahalang e ne e e-na le eona quadratic complexity, hore e sebetsa le likarolo tsa 100+, uena ka boeena u utloisisa hore na ...

Ho PG10 boemo bona bo ile ba ntlafatsoa haholo ka ho kenya ts'ehetso karohano ea matsoalloa. Ka hona, hang-hang re ile ra leka ho e sebelisa hang ka mor'a ho falla polokelo, empa ...

Joalokaha ho ile ha etsahala ka mor'a ho cheka bukana, tafole e arohaneng ea natively phetolelong ena ke:

  • ha e tšehetse litlhaloso tsa index
  • ha e tšehetse lintho tse susumetsang ho eona
  • e ka se be “setloholo” sa mang kapa mang
  • se tshehetse INSERT ... ON CONFLICT
  • ha e khone ho hlahisa karolo ka bo eona

Kaha re ile ra fumana kotlo e bohloko phatleng ka rake, re ile ra hlokomela hore ho ke ke ha khoneha ho etsa ntle le ho fetola kopo, 'me ra chechisa lipatlisiso tse ling ka likhoeli tse tšeletseng.

PG10: monyetla oa bobeli

Kahoo, re ile ra qala ho rarolla mathata a ileng a hlaha ka bonngoe:

  1. Hobane li-triggers le ON CONFLICT Re ile ra fumana hore re ntse re li hloka mona le mane, ra etsa intermediate stage ho li lokisa tafole ea moemeli.
  2. Ho tlohela "routing" ka li-triggers - ke hore, ho tloha EXECUTE.
  3. Ba ile ba e ntša ka thoko tafole ea template e nang le li-index tsohlee le hore ba se be teng le tafoleng ea moemeli.

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB
Qetellong, ka mor'a sena sohle, re arola tafole e kholo ka tlhaho. Ho thehoa ha karolo e ncha ho sa ntsane ho tlohetsoe letsoalong la kopo.

“Sawing” didikishinari

Joalo ka sistimi efe kapa efe ea tlhahlobo, re ne re boetse re na le "linnete" le "ho khaola" (dibukantswe). Tabeng ea rona, boemong bona ba ile ba sebetsa, mohlala, 'mele oa setšoantšo lipotso tse tšoanang butle kapa mongolo oa potso ka boeona.

"Lintlha" li ne li arotsoe ka nako e telele, kahoo re ile ra hlakola likarolo tsa khale ka khutso, 'me ha lia ka tsa re khathatsa (likutu!). Empa ho bile le bothata ka didikishinari...

Eseng ho bolela hore ho ne ho e-na le tse ngata tsa tsona, empa hoo e ka bang 100TB ea "linnete" e hlahisitse buka e hlalosang mantsoe ea 2.5TB. U ke ke ua khona ho hlakola ntho leha e le efe tafoleng e joalo, u ke ke ua e hatella ka nako e lekaneng, 'me ho e ngolla butle-butle ho ile ha fokotseha.

Joalo ka buka e hlalosang mantsoe ... ho eona, mongolo o mong le o mong o lokela ho hlahisoa hang... 'me sena se nepahetse, empa!.. Ha ho motho ea re thibelang ho ba le bukantswe e arohaneng ya letsatsi ka leng! E, sena se tlisa bofokoli bo itseng, empa se lumella:

  • ngola/bala kapele ka lebaka la boholo ba karolo e nyane
  • senya mohopolo o fokolang ka ho sebetsa ka li-index tse ngata tse kopaneng
  • boloka data e nyane ka baka la bokhoni ba ho tlosa se siiloe ke nako ka potlako

Ka lebaka la ho rarahana hohle ha mehato Mojaro oa CPU o fokotsehile ka ~ 30%, mojaro oa disk ka ~ 50%:

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB
Ka nako e ts'oanang, re ile ra tsoela pele ho ngola ntho e tšoanang hantle ka har'a database, ka mojaro o fokolang.

#2. Database evolution le refactoring

Kahoo re ile ra lula ho seo re nang le sona letsatsi ka leng le na le karolo ya lona ka data. Haele hantle, CHECK (dt = '2018-10-12'::date) - mme ho na le senotlolo sa ho arola le boemo ba hore rekoto e oele karolong e itseng.

Kaha litlaleho tsohle tsa tšebeletso ea rona li hahiloe ho latela letsatsi le itseng, li-index tsa tsona ho tloha ka "linako tse sa arohaneng" e bile mefuta eohle. (Seva, Letsatsi, Setšoantšo sa Moralo), (Seva, Letsatsi, Node ea moralo), (Letsatsi, Sehlopha sa liphoso, Seva)...

Empa hona joale ba phela karolong e 'ngoe le e 'ngoe likopi tsa hao index ka 'ngoe e joalo ... 'Me ka hare ho karolo ka' ngoe letsatsi ke kamehla... Hoa etsahala hore joale re ka har'a index e 'ngoe le e' ngoe e joalo kenya feela e sa fetoheng joalo ka e 'ngoe ea masimo, e eketsang molumo oa eona le nako ea ho e batla, empa ha e tlise litholoana. Ba siile raka ho bona, oh...

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB
Tataiso ea ho ntlafatsa e hlakile - e bonolo tlosa sebaka sa letsatsi ho li-index tsohle litafoleng tse arotsoeng. Ho latela boholo ba rona, phaello e haufi 1TB/beke!

Joale ha re hlokomele hore terabyte ena e ne e ntse e tlameha ho rekotoa ka tsela e itseng. Ke hore, le rona disk e lokela ho jara ka tlase hona joale! Setšoantšo sena se bontša ka ho hlaka phello e fumanoeng ho hloekisa, eo re e sebelisitseng beke:

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB

#3. "Ho hasana" mojaro o phahameng

E 'ngoe ea mathata a maholo a litsamaiso tse jarollotsoeng ke kanahanyo e sa hlokahaleng mesebetsi e meng e sa e hlokeng. Ka linako tse ling "hobane ba ne ba sa hlokomele", ka linako tse ling "ho ne ho le bonolo ka tsela eo", empa kapele kapa hamorao u tlameha ho e tlosa.

Ha re atamele setšoantšong se fetileng mme re bone hore re na le disk "lipompo" tlas'a moroalo o nang le amplitude habeli lipakeng tsa lisampole tse haufi, tseo ka ho hlaka "ka lipalo" li sa lokelang ho etsahala ka ts'ebetso e joalo:

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB

Sena se bonolo haholo ho se fihlela. Re se re qalile ho beha leihlo li-server tse ka bang 1000, e 'ngoe le e 'ngoe e sebetsoa ka khoele e arohaneng e utloahalang, 'me khoele e' ngoe le e 'ngoe e tsosolosa boitsebiso bo bokelletsoeng ho romelloa polokelong ea boitsebiso ka makhetlo a itseng, ntho e kang ena:

setInterval(sendToDB, interval)

Bothata bo teng mona bo lutse hantle tabeng ea hore likhoele tsohle li qala hoo e ka bang ka nako e le 'ngoe, kahoo linako tsa bona tsa ho romela hoo e ka bang kamehla li lumellana “ho fihla ntlheng.” Oho #2...

Ka lehlohonolo, ho bonolo ho lokisa sena, ho eketsa "random" ea ho matha ka nako:

setInterval(sendToDB, interval * (1 + 0.1 * (Math.random() - 0.5)))

#4. Re boloka seo re se hlokang

Ea boraro ea setso bothata phahameng ka ho fetisisa ke ha ho cache moo a leng teng ka khona ho ba.

Mohlala, re entse hore ho khonehe ho sekaseka ho latela li-node tsa moralo (tsena kaofela Seq Scan on users), empa hang-hang ba nahane hore, ka kakaretso, ba tšoana - ba lebetse.

Che, ha e le hantle, ha ho letho le ngotsoeng ho database hape, sena se fokotsa sesosa ka INSERT ... ON CONFLICT DO NOTHING. Empa data ena e ntse e fihla ho database, 'me ha e hlokahale ho bala ho lekola khohlano lokela ho etsa. Oho #3...

Phapang ea palo ea lirekoto tse rometsoeng ho database pele / ka mor'a hore caching e khonehe e hlakile:

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB

Hona ke ho theoha ho tsamaeang le sebaka sa polokelo:

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB

Kakaretso

"Terabyte-per-day" e utloahala e tšosa feela. Haeba u etsa ntho e 'ngoe le e' ngoe hantle, joale sena ke 'nete 2^40 bytes / 86400 metsotsoana = ~ 12.5MB/stseo esita le li-screw tsa IDE tsa desktop li neng li tšoaretsoe. 🙂

Empa ka botebo, esita le ka "skew" ea mojaro motšehare, o ka kopana habonolo le bokhoni ba li-SSD tsa morao-rao.

Re ngola ho PostgreSQL ka leseli le tlase: moamoheli a le mong, letsatsi le le leng, 1TB

Source: www.habr.com

Eketsa ka tlhaloso