I se aso i le lumanaʻi mamao, o le aveeseina otometi o faʻamatalaga le manaʻomia o le a avea ma se tasi o galuega taua a le DBMS [1]. I le taimi nei, tatou te manaʻomia le vaʻaia lelei o le tapeina poʻo le faʻanofoina o faʻamatalaga e le manaʻomia i faiga faʻapipiʻi taugofie. Fa'apea e te filifili e tape le tele o laina. O se galuega faigofie, aemaise lava pe a iloa le tulaga ma o loʻo i ai se faasino igoa talafeagai. "TA'E MAI LE laulau1 WHERE col1 = :value" - o le a se mea e sili atu ona faigofie, sa'o?
Vitio:
-
Sa ou i ai i le komiti o polokalame Highload talu mai le tausaga muamua, o lona uiga talu mai le 2007.
-
Ma sa ou i ai ma Postgres talu mai le 2005. Fa'aaogaina i le tele o galuega faatino.
-
O le vaega sa i ai foi ma RuPostges talu mai le 2007.
-
Ua matou tuputupu aʻe i le 2100+ tagata auai i le Meetup. O le tulaga lona lua lea i le lalolagi pe a uma Niu Ioka, ua uma ona manumalo ia San Francisco i se taimi ua leva.
-
Sa ou nofo i Kalefonia mo ni nai tausaga. Ou te galue tele i kamupani Amerika, e aofia ai kamupani tetele. O i latou o loʻo faʻaaogaina Postgres malosi. Ma o ituaiga uma o mea manaia e tulai mai iina.
Afai e te faia se mea, o nisi taimi o loʻo i ai ni faʻalavelave i le Postgres. Fa'apea e tatau ona e fa'atali se'ia maua e le pule se nofoa su'ega, pe e te fa'atali se'i tali mai le DBA ia te oe. Ma matou te mauaina ia faʻalavelave i le atinaʻeina, suʻega ma le pulega ma taumafai e faʻaumatia i latou i le faʻaaogaina o masini ma auala fou.
Sa ou i ai talu ai nei i le VLDB i Los Angeles. Ole tele lea o fa'amaumauga fa'amaumauga. Ma sa i ai se lipoti o le a le gata ina teuina e DBMS i le lumanaʻi, ae otometi foi ona tape faʻamaumauga. O se autu fou lenei.
O lo'o fa'ateleina fa'amaumauga i le lalolagi. Zetabytes e 1 petabytes. Ma o lea ua uma ona fuafuaina e sili atu nai lo le 000 zettabytes o faʻamaumauga o loʻo teuina i le lalolagi. Ma e tele ma sili atu i latou.
Ae o le a le mea e fai i ai? E manino lava e tatau ona tape. Ole so'oga lea ile lipoti manaia. Ae e oʻo mai i le taimi nei e leʻi faʻatinoina i le DBMS.
O i latou e iloa faitau tupe e manaʻo i mea e lua. Latou te mananaʻo matou te tapeina, o lona uiga faʻapitoa e tatau ona matou mafaia.
O le mea o le a ou taʻuina atu o se tulaga faʻapitoa e aofia ai le tele o tulaga moni, o lona uiga, o se tuʻufaʻatasiga o le mea moni na tupu ia te aʻu ma faʻamaumauga lata ane i le tele o taimi, tele tausaga. O sau i soo se mea ma e laa i luga e tagata uma i taimi uma.
Se'i faapea o lo'o i ai so tatou fa'avae po'o nisi fa'avae o lo'o tuputupu a'e. Ma o nisi o fa'amaumauga e manino lava o lapisi. Mo se faʻataʻitaʻiga, na amata ona faia e le tagata faʻaoga se mea iina, ae leʻi maeʻa. Ma ina ua mavae sina taimi ua tatou iloa o lenei galuega e leʻi maeʻa e le mafai ona toe teuina. O lona uiga, matou te mananaʻo e faʻamama ni mea leaga e faʻasaoina avanoa, faʻaleleia le faʻatinoga, ma isi.
I se tulaga lautele, o le galuega o le otometi le tapeina o mea faʻapitoa, laina faʻapitoa i se laulau.
Ma e i ai le matou talosaga o le a tatou talanoa i ai i lenei aso, o lona uiga, e uiga i le aveeseina o lapisi.
Na matou talosagaina se tagata faʻapitoa faʻapitoa e faia lenei mea. Na ia talia lenei talosaga, siaki ia lava - e aoga mea uma. Na ou fa'ata'ita'iina ile fa'atulagaina - o lo'o lelei mea uma. Fa'asolo - e aoga mea uma. E tasi i le aso matou te faia lenei mea - o loʻo lelei mea uma.
O loʻo faʻatupulaia ma faʻatupulaia le faʻamaumauga. Ole DELETE i aso ta'itasi e amata ona fa'agesegese.
Ona matou iloa ai lea ua avea nei i matou ma kamupani maketi ma o le a tele taimi e sili atu ai le feoaiga, o lea matou te filifili ai e taofi mo sina taimi mea e le tatau ai. Ma ua galo ia i tatou e toe faafoi mai.
I ni nai masina mulimuli ane na latou manatua ai. Ma na fa'amuta le fa'atupuina pe sa pisi i se isi mea, na latou tofia se isi e toe fa'afo'i.
Na ia siaki i luga o le dev, i luga o le faʻatulagaina - o loʻo lelei mea uma. E masani lava, e manaʻomia pea ona e faʻamamā mea na faʻaputuina. Na ia siaki, e aoga mea uma.
O le a le mea e sosoo ai? Ona malepe ai lea o mea uma mo i tatou. E pa'u tele ma e i ai se taimi e pa'u ai mea uma. Ua faateia tagata uma, e leai se tasi e malamalama i le mea o loo tupu. Ona aliali mai lea o le DELETE lea o le mataupu.
Sa iai se mea na tupu? O le lisi lea o mea e ono fa'aletonu. O fea o nei mea e sili ona taua?
-
Mo se faʻataʻitaʻiga, e leai se iloiloga, o lona uiga e leʻi vaʻai le tagata tomai faapitoa i le DBA. Faatasi ai ma se mata poto masani, o le a vave ona ia mauaina le faafitauli, ma e le gata i lea, e mafai ona ia maua le prod, lea na faaputuputu ai le tele o miliona laina.
-
Atonu na latou siakiina se mea sese.
-
Masalo o meafaigaluega ua tuai ma e tatau ona e faʻaleleia lenei faʻamaumauga.
-
Po o se mea e sese i le database lava ia, ma e manaʻomia ona matou siitia mai Postgres i MySQL.
-
Pe atonu foi e iai se mea o faaletonu i le taotoga.
-
Masalo o loʻo i ai ni mea sese i le faʻatulagaina o galuega ma e manaʻomia ona e faʻamalo se tasi ma faʻafaigaluegaina tagata sili atu?
E leai se siaki a le DBA. Afai ei ai se DBA, o le a ia vaʻai i nei miliona miliona ma e tusa lava pe leai ni faʻataʻitaʻiga e fai mai: "Latou te le faia lena mea." Seʻi tatou fai atu pe a fai o lenei code i GitLab, GitHub ma sa i ai se faʻasologa o iloiloga tulafono ma e leai se mea e aunoa ma le faʻatagaina o le DBA o le a faia lenei taʻaloga i luga o le prod, e manino lava o le a fai mai le DBA: "E le mafai ona e faia lena mea. ”
Ma o le a ia fai mai o le ai ai sau faʻafitauli i le disk IO ma o gaioiga uma o le a faʻavalevalea, atonu o loʻo i ai loka, ma o le ae poloka foi le autovacuum mo le tele o minute, o lea e le lelei.
O le mea sese lona lua o le latou siaki i le nofoaga sese. Na matou vaʻai i le mea moni o le tele o faʻamaumauga lapisi na faʻaputuina i luga o le prod, ae e leʻi faʻaputuina e le tagata atiaʻe faʻamaumauga i totonu o lenei faʻamaumauga, ma e leai se tasi na faia moni lenei lapisi i luga o le faʻatulagaina. E tusa ai, e 1 laina, lea na vave ona maeʻa.
Matou te malamalama e vaivai a matou suʻega, o lona uiga o le faagasologa o loʻo fausia e le maua ai faʻafitauli. E le'i faia se su'ega DB talafeagai.
O se fa'ata'ita'iga lelei e tatau ona fa'atino i luga o masini lava e tasi. E le o taimi uma e mafai ai ona faia lenei mea i luga o meafaigaluega tutusa, ae e taua tele o se kopi atoa o le database. O le mea lenei sa ou talaʻia mo le tele o tausaga i le taimi nei. Ma o le tausaga talu ai na ou talanoa ai e uiga i lenei mea, e mafai ona e matamata uma ile YouTube.
Atonu e leaga a tatou meafaigaluega? A e va'ai, ua oso le leo. Na matou vaʻaia o le toe faʻaaogaina o le 100%. Ioe, afai o nei taʻavale NVMe faʻaonaponei, atonu o le a sili atu ona faigofie mo i tatou. Ma atonu tatou te le taooto i lalo ona o lena mea.
Afai e iai au ao, e faigofie le faʻaleleia. Na matou fa'alauiloa fa'atusa fou i masini fou. Suiga. Ma ua lelei mea uma. Faigofie faigofie.
E mafai ona pa'i atu i tisiki laiti? Ma o iinei, faatasi ai ma le fesoasoani a le DBA, matou te maulu i se autu e taʻua o siaki siaki. E foliga mai matou te leʻi faia le faʻaogaina o siaki.
O le a le mea e siaki ai? E maua lea i so'o se DBMS. Pe a suia faʻamatalaga i lou mafaufau, e le vave tusia i tisiki. O faʻamatalaga ua suia faʻamatalaga e muamua tusia i le ogalaau i luma, i le ogalaau tusitusi i luma. Ma i se taimi, e filifili le DBMS ua oʻo i le taimi e togi ai itulau moni i luga o le disk, ina ia afai tatou te toilalo, e mafai ona tatou faia faʻaitiitia REDO. E pei o se meataalo. Afai tatou te fasiotia, o le a tatou amataina le taaloga mai le siaki mulimuli. Ma o DBMS uma e faʻatinoina lenei mea.
Fa'atonu i Postgres ua tuai. Ua mamanuina mo le 10-15 tausaga le matutua o faʻamaumauga ma faʻatinoga. Ma e leai se tuusaunoaga o le nofoaga e siaki ai.
O lenei faʻamatalaga e mai i la matou lipoti faʻatasi ma Postgres siaki, o lona uiga o le siakiina o le soifua maloloina otometi. Ma o nisi nei o faʻamaumauga o le tele o terabytes. Ma e manino lava o siaki e faʻamalosia i le toeitiiti 90% o mataupu.
O le a le uiga? E lua tulaga iina. E mafai ona tupu le siaki ile taimi e malolo ai, mo se faʻataʻitaʻiga, ile 10 minute. Pe atonu e tupu pe a fai si tele o faʻamatalaga ua faʻatumu.
Ma e le mafai, max_wal_saze ua seti i le 1 gigabyte. O le mea moni, e tupu moni lava lenei mea i Postgres pe a uma le 300-400 megabytes. Ua e suia le tele o faʻamatalaga ma e iai sau siaki.
Ma afai e leai se tasi na faʻalogo i ai, ae ua faʻatupulaia le tautua, ma maua ai e le kamupani le tele o tupe, e tele naua fefaʻatauaiga, ona fai lea o le siaki e tasi i le minute, o nisi taimi e tasi i le 30 sekone, ma o nisi taimi e oʻo ai le tasi i le isi. . E matua leaga lava lenei mea.
Ma e tatau ona tatou mautinoa e faʻaitiitia ona oʻo mai. O lona uiga, e mafai ona matou si'itia max_wal_size. Ma o le a ia osofaia soo.
Ae ua matou atiina ae se metotia atoa i le auala e sili atu ona saʻo lenei mea, o lona uiga, pe faʻapefea ona faia filifiliga e uiga i le filifilia o faʻatulagaga, faʻavae manino i luga o faʻamatalaga patino.
E tusa ai, matou te faia ni fa'asologa e lua o su'ega fa'amaumauga.
Fa'asologa muamua - matou te suia max_wal_size. Ma matou faia se gaioiga tele. Muamua tatou te faia i le tulaga faaletonu o le 1 gigabyte. Ma matou faia se TELE tele tele o le tele o miliona o laina.
E mafai ona e vaai i le faigata ia i matou. Matou te vaʻai i le disk IO e leaga tele. Se'i va'ai pe fia le tele o le WAL na tatou fa'atupuina, aua e taua tele. Se'i vaai pe faafia ona tupu le siaki. Ma ua tatou vaai e le lelei.
O le isi matou fa'ateleina le max_wal_size. Matou te toe fai atu. Faateleina, toe fai. Ma le tele o taimi. I le mataupu faavae, 10 points e lelei, lea 1, 2, 4, 8 gigabytes. Ma tatou tilotilo i amioga a se faiga faʻapitoa. E manino lava o meafaigaluega iinei e tatau ona pei o le prod. E tatau ona i ai sau tisiki tutusa, tutusa le aofaʻi o mea e manatua, ma faʻatulagaina Postgres tutusa.
Ma i lenei auala o le a tatou fesuiai ai la tatou faiga, ma tatou iloa le auala o le a amio ai le DBMS i le tulaga o se tele leaga DELETE, pe faapefea ona siaki.
Checkpoint i le gagana Rusia o lona uiga o nofoaga e pulea.
Fa'ata'ita'iga: TA'E fia miliona laina ile fa'asinomaga, o laina e "fa'asalalauina" i itulau uma.
O se fa'ata'ita'iga lenei. O se faavae lea. Ma faatasi ai ma le tulaga faaletonu o le 1 gigabyte mo max_wal_size, e matua manino lava o matou tisiki mo le pueina e alu i le fata. O lenei ata o se faʻailoga masani o se gasegase maʻi, o lona uiga, na ia lagona le leaga. Ma e na'o le tasi lava le taotoga, o lea na'o le TA'E o le tele o miliona laina.
Afai e fa'ataga se taotoga fa'apea i le prod, o le a na'o tatou pauu i lalo, aua e manino lava e tasi le DELETE e fasiotia i tatou i le fata.
E le gata i lea, pe a iai le 16 gigabytes, e mafai ona e vaʻai ua amata ona aliali mai nifo. O nifo ua uma ona lelei, o lona uiga o loʻo matou tuʻituʻi i luga o le faʻalo, ae le leaga tele. Na aliali mai ai sina saolotoga itiiti iina. I le itu taumatau o lo'o i ai le lipine. Ma o le numera o gaioiga o le kalafi lona lua. Ma e manino lava ua uma ona tatou manava i le 16 gigabytes.
Ma o fea 64 gigabytes o loʻo vaʻaia, ua sili atu le lelei. Ua uma ona iloa lelei nifo, e tele avanoa e ola ai i isi gaioiga ma faia se mea i le disk.
Aisea ua faapena ai
O le a ou suʻesuʻeina faʻamatalaga, ae o lenei autu o le faʻaogaina o le siaki siaki e mafai ona iʻu i se lipoti atoa, o lea o le a ou le oʻo atu i auiliiliga, ae o le a ou otootoina atu mea faigata o loʻo i ai.
Afai e masani ona tupu le siaki, ma matou te le faʻafouina a matou laina faʻasolosolo, ae maua i latou i le faasino igoa, e lelei, aua matou te le tapeina le laulau atoa, ona tupu ai lea na matou paʻi muamua i le itulau muamua, ona sosoo ai lea ma le afe, ona toe foi atu lea i le muamua . Ma afai i le va o nei asiasiga i le itulau muamua o le siaki siaki ua uma ona teuina i le tisiki, ona toe faʻasaoina lea, aua ua tatou palapala i le taimi lona lua.
Ma o le a matou faʻamalosia le siaki e faʻasaoina i le tele o taimi. E pei o loʻo i ai galuega faʻaalu mo ia.
Ae e le na o le pau lena. I Postgres, itulau e 8 kilobytes, ma i Linux 4 kilobytes. Ma o loʻo i ai se seti full_page_writes. E mafai ona fa'aletonu. Ma e sa'o lea, aua afai tatou te tapeina, e i ai se tulaga lamatia afai e i ai se faaletonu, e na o le afa o le itulau o le a faasaoina.
O le amio o le ulufale i totonu o le WAL o le ogalaau i luma e faapea pe a i ai se siaki siaki ma tatou suia se itulau mo le taimi muamua, o le itulau atoa, o lona uiga, 8 kilobytes uma, e iu i le ogalaau i luma, e ui lava na o matou. suia se laina e 100 paita le mamafa . Ma ua faamalosia i matou e tusi i lalo le itulau atoa.
I suiga mulimuli ane o le ai ai na o se tuple patino, ae mo le taimi muamua matou te tusia mea uma i lalo.
Ma, e tusa ai, afai e toe tupu le siaki, ona tatau lea ona tatou toe amata mea uma mai le amataga ma faʻapipiʻi le itulau atoa. Faatasi ai ma siaki masani, pe a tatou savavali i itulau lava e tasi, full_page_writes = on o le a sili atu nai lo le mea e mafai, o lona uiga tatou te gaosia atili WAL. E tele mea e lafo i kopi, i le archive, i le disk.
Ma, e tusa ai, e lua a matou toe faʻaaogaina.
Afai tatou te faateleina le max_wal_size, e foliga mai tatou te faafaigofieina le galuega a le siaki ma le tusitala wal. Ma e manaia tele.
Tatou fa'apipi'i se terabyte ma ola ai. O le a le leaga o lea mea? E leaga lea mea, aua a faaletonu o le a tatou tutu i luga mo itula, aua o le siaki ua leva ma ua tele suiga. Ma e tatau ona tatou faia REDO mo nei mea uma. Ma o lea o loʻo matou faia se faʻasologa lona lua o faʻataʻitaʻiga.
Matou te faia le taʻaloga ma vaʻai pe a latalata le siaki siaki, matou te faia se fasiotiga -9 Postgres i le faʻamoemoe.
Ma a maeʻa lena, matou te toe amata, ma vaʻai pe o le a le umi e alu i luga o lenei meafaigaluega, o lona uiga, o le a le tele o le REDO o le a faia i lenei tulaga leaga.
O le a ou matauina faalua e leaga le tulaga. Muamua, na matou pa'u'ū i luma tonu o le fa'ai'uga o le nofoaga e siaki ai, o lea e tele a matou mea e leiloa. Ma lona lua, sa matou faia se taotoga tele. Ma afai e malolo nofoaga siaki, e foliga mai e itiiti le WAL na maua talu mai le siaki mulimuli. O lona uiga, e faalua ona faiaina.
Matou te fuaina lenei tulaga mo max_wal_size eseese ma malamalama afai o le max_wal_size e 64 gigabytes, ona i ai lea i se tulaga sili ona leaga-lua o le a tatou tulaʻi mo le 10 minute. Ma matou te mafaufau pe fetaui lenei mea ia i matou pe leai. Ose mataupu tau pisinisi. E tatau ona tatou faaali atu lenei ata ia i latou e nafa ma filifiliga faapisinisi ma fesili atu: “O le a le umi e mafai ona tatou faatali ai pe a iai se faafitauli? E mafai ona ta taooto i lalo i se tulaga sili ona leaga mo le 3-5 minute?" Ma e te faia se filifiliga.
Ma o loʻo i ai se manatu manaia. E i ai ni a matou lipoti e uiga ia Patroni i le konafesi. Ma atonu o loʻo e faʻaaogaina. Ole autofailover lea mo Postgres. GitLab ma Data Egret na talanoa e uiga i lenei mea.
Ma afai e iai sau ta'avale ta'avale e tupu ile 30 sekone, atonu e mafai ona ta taooto i lalo mo le 10 minute? Aua o le taimi lenei o le a tatou sui i le kopi, ma o le a lelei mea uma. Ose mataupu fefinauai. Ou te le iloa se tali manino. Ua na ona ou lagona o lenei autu e le gata i le toe faaleleia o faalavelave.
Afai e umi se taimi tatou te toe malosi ai mai se toilalo, o le a tatou le toʻa i le tele o isi tulaga. Mo se faʻataʻitaʻiga, i faʻataʻitaʻiga tutusa, pe a tatou faia se mea ma o nisi taimi e tatau ona faʻatali mo le 10 minute.
O le a ou le alu mamao lava, tusa lava pe i ai sa matou ta'avale ta'avale. I le avea ai o se tulafono, o tau e pei o le 64, 100 gigabytes o ni tau lelei. O nisi taimi e aoga ai le filifili itiiti. I se tulaga lautele, o se faasaienisi poto.
Ina ia faʻaalia, mo se faʻataʻitaʻiga, max_wal_size = 1, 8, e tatau ona e toe faia le tele o taimi. Na e faia. Ma e te manaʻo e toe fai i luga o le faavae lava e tasi, ae ua uma ona e tapeina mea uma. O le a le mea e fai?
O le a ou taʻu atu ia te oe i se taimi mulimuli ane e uiga i la matou fofo ma mea matou te faia e faʻaalia ai i ia tulaga. Ma o le auala sili lea ona saʻo.
Ae i lenei tulaga sa matou laki. Afai, e pei ona fai mai iinei "AMATA, TA'E, ROLLBACK", ona mafai lea ona tatou toe fai TA'E. O lona uiga, afai tatou te faaleaogaina e i tatou lava, ona mafai lea ona tatou toe faia. Ma fa'aletino o au fa'amatalaga o le ai ai iina. E te le maua lava se fulafula. E mafai ona e toe fa'ata'ita'i i lea DELETE.
O lenei DELETE ma le ROLLBACK e fetaui lelei mo le siakiina o nofoaga, e tusa lava pe leai ni au suʻesuʻega faʻamaumauga lelei.
Na matou faia se faʻailoga i le tasi koluma "i". Postgres ei ai koluma tautua. E le vaaia i latou se'i vagana ua talosagaina faapitoa. O mea nei: ctid, xmid, xmax.
Ctid o le tuatusi fa'aletino. Itulau zero, o le tuple muamua i le itulau.
E mafai ona iloa pe a uma le ROOLBACK na tumau le tuple i le nofoaga e tasi. O lona uiga, e mafai ona tatou toe taumafai, o le a amio tutusa. O le mea autu lea.
Xmax o le taimi e oti ai le tuple. Ua ulufale, ae ua iloa e Postgres o lenei fefaʻatauaʻiga na toe faʻafoʻi, o lea e le afaina pe o le 0 poʻo se fefaʻatauaʻiga toe foʻi. O lo'o ta'u mai ai e mafai ona fa'aoga le DELETE e fa'ata'ita'i ma fa'ata'ita'i le tele o fa'agaioiga o le faiga o faiga. E mafai ona e faia ni su'esu'ega fa'amaumauga mo e matitiva.
E faatatau lea i tagata fai polokalame. E uiga foi i le DBA, latou te otegia i taimi uma tagata fai polokalame mo lenei: "Aisea ua e faia ai ni gaioiga umi ma faigata?" E matua ese lava lenei mataupu fa'asaga. Sa iai muamua le pulega, a o le taimi nei o le a iai le atinae.
E manino lava tatou te le'i vaevaeina i ni vaega. E manino lava. E le mafai ona motusia sea DELETE mo le faitau miliona o laina i ni vaega. E 20 minute e fai ai, ma o le a taoto mea uma. Ae, o le mea e leaga ai, e oʻo lava i tagata atinaʻe poto masani e faia mea sese, e oʻo lava i kamupani tetele.
Aisea e taua ai le talepe?
-
Afai tatou te vaʻaia e faigata le tisiketi, ona tatou faʻagesegese lea. Ma afai tatou te malepelepe, ona mafai lea ona tatou faaopoopo ni taofi, e mafai ona tatou faʻagesegese le tootoo.
-
Ma o le a tatou le poloka isi mo se taimi umi. I nisi tulaga e le afaina, afai o loʻo e aveeseina lapisi moni e leai se tasi o loʻo galue i ai, o le a sili atu ona e le poloka se tasi sei vagana ai galuega a le autovacuum aua o le a faʻatali mo le faʻatauga e maeʻa. Ae afai e te tapeina se mea e ono talosagaina e se isi tagata, o le a poloka i latou, o le ai ai se ituaiga o filifili tali. E tatau ona aloese mai fefaʻatauaiga umi i luga o upega tafaʻilagi ma telefoni feaveaʻi.
E manaia lenei. E masani ona ou vaai i tagata atiae o fesili, "O le a le tele o le pusa e tatau ona ou filifilia?"
E manino lava o le tele o le aofaʻi o le vaega, o le maualalo o le fefaʻatauaiga i luga o le ulu, o lona uiga o fefaʻatauaiga faaopoopo i luga. Ae i le taimi lava e tasi, o le taimi mo lenei fefaʻatauaiga e faʻateleina.
E i ai la'u tulafono faigofie lava: ave le tele e mafai ai, ae aua le sili atu i le faatinoga i le sekone.
Aisea e lua? O le faʻamatalaga e matua faigofie ma malamalama i tagata uma, e oʻo lava i tagata e le faʻapitoa. Ua tatou vaai i le tali. Tatou ave le 50 miliseconds. Afai ua iai se mea ua suia, o le a tali atu o tatou mata. Afai e itiiti, e sili atu ona faigata. Afai e tali mai se mea pe a uma le 100 milliseconds, mo se faʻataʻitaʻiga, na e kiliki i le isumu ma na tali atu ia te oe pe a uma le 100 milliseconds, ua uma ona e lagona le tuai laitiiti. O le lona lua ua uma ona iloa o se taofi.
E tusa ai, afai tatou te vaevaeina a tatou gaioiga tele i le 10-lua, ona tatou faʻalavelave lea o le a tatou poloka se tasi. Ma o le a aoga mo ni nai sekone, ma o le a matauina e tagata. O le mafuaaga lena ou te manao ai e aua le faia mo le sili atu nai lo le sekone. Ae i le taimi lava e tasi, aua le talepeina i lalo, aua o le fefaʻatauaiga i luga o le ulu o le a iloa. O le a sili atu le mamafa mo le faʻavae, ma e ono tulaʻi mai isi faʻafitauli eseese.
Matou te filifilia le tele o pusa. I tulaga taitasi e mafai ona tatou faia i se tulaga ese. E mafai ona otometi. Ma matou te talitonu i le lelei o le faʻaogaina o le tasi pusa. O lona uiga, matou te TA'E se tasi pusa po'o le UPDATE.
Ile auala, o mea uma ou te taʻu atu ia te oe e le gata ile DELETE. E pei ona e mateina, o soʻo se gaioiga tele i luga o faʻamaumauga.
Ma ua tatou vaai atu e lelei tele le fuafuaga. E mafai ona e va'ai fa'asino fa'asinomaga, e sili atu fa'asino fa'asinomaga na'o su'esu'ega. Ma o loʻo i ai sina vaega itiiti o faʻamatalaga e aofia ai. Ma o mea uma e galue i lalo ifo o le sekone. Super.
Ma e manaʻomia pea ona tatou mautinoa e leai se faʻaleagaina. E tupu o le vaega muamua e vave ona galue, ona atili ai lea ona leaga mea uma ma sili atu ona leaga. O le faʻagasologa e faʻapea e tatau ona e suʻeina tele. O le mea tonu lea e manaʻomia ai fale suʻesuʻe faʻamaumauga.
Ma e manaʻomia pea ona tatou saunia se mea ina ia mafai ai ona tatou mataʻituina lelei lenei mea i le gaosiga. Mo se faʻataʻitaʻiga, e mafai ona tatou tusia le taimi i le ogalaau, e mafai ona tatou tusia le mea o loʻo tatou i ai nei ma po o ai ua tatou tapeina nei. Ma o lenei mea o le a mafai ai ona tatou malamalama mulimuli ane i le mea o loʻo tupu. Ma afai e i ai se mea e faaletonu, vave sue le faafitauli.
Afai tatou te manaʻomia le siakiina o le lelei o fesili ma e manaʻomia ona tatou toe faʻateleina taimi, ona i ai lea o se mea e pei o se uso a bot. Ua uma ona sauni. E faʻaaogaina e le tele o atinaʻe i aso uma. Ma e mafai ona ia saunia se tele terabyte database pe a talosagaina i le 30 sekone, lau lava kopi. Ma e mafai ona e tapeina se mea iina ma fai atu RESET, ma toe tape. E mafai ona e faataitai i ai i lenei auala. Ua ou vaai i se lumanai i lenei mea. Ma o lea ua tatou faia lenei mea.
O a auala e vaelua ai? Ou te vaʻaia 3 taʻiala vaeluaga eseese o loʻo faʻaogaina e le au atinaʻe i luga o le pusa.
O le mea muamua e matua faigofie lava. E iai a matou ID numera. Ma se'i o tatou vaevaeina i ni vaeluaga eseese ma galulue ai ma lena. E manino le pito i lalo. I le vaega muamua, atonu e 100 laina o lapisi moni, i le lona lua 5 laina pe leai, pe o le 1 laina uma o le a avea ma lapisi. E matua le tutusa galuega, ae faigofie ona malepe. Na latou ave le ID aupito maualuga ma talepe. O se faiga faavalevalea lea.
O le fuafuaga lona lua o se auala paleni. E faʻaaogaina i Gitlab. Sa matou ave ma su'e le laulau. Na matou mauaina le tuaoi o pusa ID ina ia tofu le pusa ma le 10 faʻamaumauga. Ma sa latou taofia aʻu i se ituaiga o laina. Ma matou fa'agasolo atili. E mafai ona e faia lenei mea i ni nai laina.
I le fuafuaga muamua, i le ala, e mafai foi ona e faia lenei mea i ni nai filo. E le faigata.
Ae o loʻo i ai se auala sili atu ona lelei ma sili atu ona lelei. O le fuafuaga lona tolu lea. Ma pe a mafai, e sili atu le filifilia. Matou te faia lenei mea e faʻavae i luga o se faʻamatalaga faʻapitoa. I lenei tulaga, e foliga mai o se faasino igoa e faʻavae i luga oa tatou lapisi ma ID. O le a matou faʻapipiʻiina le ID ina ia naʻo se faʻasinomaga naʻo le suʻesuʻeina ina ia tatou le o atu i le faaputuga.
E masani lava, e sili atu le vave o le su'ega fa'asino nai lo le su'ega fa'asino.
Ma e vave ona maua a matou ID matou te mananaʻo e tape. Matou te filifilia muamua le BATCH_SIZE. Ma e le gata ina tatou mauaina, tatou te mauaina i se auala faapitoa ma vave ona faaleleia. Ae matou te lokaina i latou i se auala afai ua uma ona loka, matou te le lokaina, ae agai i luga ma ave isi. O le mea lea mo le fa'afou fa'amisi loka. O lenei Postgres super feature e mafai ai ona matou galulue i le tele o filo pe a matou manaʻo ai. Masalo i se filo e tasi. Ona iai lea o le CTE - e tasi le talosaga. Ma o loʻo i ai le matou aveeseina moni o loʻo tupu i luga o le fogafale lona lua o lenei CTE - returning *
. E mafai ona e toe faafoi id, ae sili atu *
, pe afai e itiiti au faʻamatalaga i laina taʻitasi.
Aisea tatou te manaomia ai lenei mea? Matou te manaʻomia lenei mea ina ia mafai ona lipotia. Ua matou tapeina nei le tele o laina i le mea moni. Ma o tatou tuaoi ile ID poʻo le created_at e pei o lenei. E mafai ona e faia min, max. E mafai ona fai se isi mea. E tele mea e mafai ona e fa'ato'ilalo ai iinei. Ma e faigofie tele lenei mea mo le mataʻituina.
E iai le isi fa'amatalaga e uiga i le fa'asinomaga. Afai tatou te filifili tatou te manaʻomia se faʻasinomaga faʻapitoa mo lenei galuega faʻapitoa, ona tatau lea ona tatou mautinoa e le faʻaleagaina na o tuples faʻafouga. O lona uiga, o Postgres e iai faʻamaumauga faapena. E mafai ona va'ai i le pg_stat_user_tables mo lau laulau. E mafai ona e vaʻai pe faʻaogaina faʻafouga vevela pe leai.
E i ai tulaga e ono tipi ese ai e lau fa'ailoga fou. Ma o isi fa'afouga uma o lo'o fa'agasolo o le a fa'agesegese. E le na'o le fa'aalia o le fa'asinomaga (fa'ailoga ta'itasi e fa'agesegese fa'afou fa'afou, ae na'o sina mea itiiti), ae o i'inei o le a fa'alavelave pea mea. Ma e le mafai ona faia faʻapitoa faʻapitoa mo lenei laulau. E tupu lenei mea i nisi taimi. O se togafiti poto lea e toaitiiti tagata e manatua. Ma e faigofie ona laa i luga o lenei rake. O nisi taimi e tupu ai e te manaʻomia le suʻeina o se auala mai le isi itu ma faia pea e aunoa ma lenei faʻailoga fou, pe faia se isi faʻasinomaga, pe faia se isi mea, mo se faʻataʻitaʻiga, e mafai ona e faʻaogaina le auala lona lua.
Ae o le taʻiala sili lea ona lelei, pe faʻafefea ona vaeluaina i ni vaega ma fana i vaega ma se talosaga e tasi, tape sina mea i le taimi, ma isi.
Feuaiga umi -
Ua poloka le masini masini
Fa'afitauli poloka
Sese #5 ose mea tele. Na talanoa Nikolay mai Okmeter e uiga i le mataʻituina o Postgres. Ae paga lea, e le o iai le mataʻituina lelei o Postgres. O nisi e latalata atu, o nisi e mamao. Ole Okmeter e latalata lava ina ia atoatoa, ae e tele mea o loʻo misi ma e manaʻomia ona faʻaopoopo. E tatau ona e sauni mo lenei mea.
Mo se faʻataʻitaʻiga, e sili atu le mataʻituina o tuple mate. Afai e tele au mea mate i lau laulau, o lona uiga o loʻo i ai se mea o loʻo tupu. E sili atu le tali atu nei, a leai atonu e i ai le leaga iina, ma e mafai ona tatou taooto i lalo. E tupu.
Afai ei ai se IO tele, o lona uiga e manino e le lelei lenei mea.
Feuaiga umi foi. E le tatau ona fa'atagaina fefa'atauaiga umi ile OLTP. Ma o se fesoʻotaʻiga lea i le snippet, lea e mafai ai e oe ona ave lenei snippet ma ua uma ona faia ni suʻesuʻega o fefaʻatauaiga umi.
Aisea e leaga ai fefaʻatauaiga umi? Aua o loka uma e na'o le faaiuga o le a tatalaina. Ma matou lokaina tagata uma. E le gata i lea, matou te poloka autovacuum mo laulau uma. E le lelei lava lenei mea. E tusa lava pe fa'aagaina lou tu'ititi vevela i luga o le fa'atusa, e leaga lava lea mea. I se tulaga lautele, e sili atu le aloese mai fefaʻatauaiga umi i soʻo se mea.
Afai e tele a tatou laulau e le o fa'amama, e tatau la ona i ai se mataala. O se tulaga faapena e mafai iinei. E mafai ona tatou a'afia fa'aletonu le fa'agaioiga o le autovacuum. O se snippet lenei mai Avito, lea na ou faʻaleleia teisi. Ma na faʻaalia o se mea faigaluega manaia e vaʻai ai mea tatou te maua i le autovacuum. Mo se faʻataʻitaʻiga, o loʻo i ai ni laulau o loʻo faʻatali iina ma latou te le faʻatali lo latou taimi. E manaʻomia foʻi ona e tuʻuina i le mataʻituina ma maua se mataala.
Ma tuuina atu poloka. Vaomatua o poloka laau. Ou te fiafia e ave se mea mai se tasi ma faaleleia. O iinei na ou ave ai se CTE toe faʻaleleia mai le Data Egret, o loʻo faʻaalia ai se vaomatua o laʻau loka. Ose mea lelei lea mo su'esu'ega. Ma e mafai foi ona fausia le mataituina i luga o lona faavae. Ae e tatau ona faia ma le faaeteete. E tatau ona e faia se fa'amatalaga la'ititi_timeout mo oe lava. Ma lock_time out e mana'omia.
O nisi taimi e tutupu faatasi uma nei mea sese.
I loʻu manatu, o le mea sese sili ona taua iinei o le faʻalapotopotoga. O le faʻalapotopotoga, aua e le aoga le tekinolosi. Ole numera 2 lea - na latou siaki ile nofoaga sese.
Matou te le'i siakiina iina ona e leai sa matou clone gaosiga e faigofie ona siaki. Atonu e le mafai ona maua e le tagata atia'e le gaosiga.
Ma sa matou siaki i le nofoaga sese. Ana latou siaki iina, semanu matou te vaai lava i ai. E mafai e le atinaʻe ona vaʻaia nei mea uma e tusa lava pe leai se DBA, pe afai na te siakiina i totonu o se siosiomaga lelei, lea e iai le aofaʻi tutusa o faʻamaumauga ma se faʻatulagaga tutusa. Semanu na te vaai i nei tulaga leaga uma ma semanu e maasiasi.
Fa'amatalaga atili e uiga i le vacuum ta'avale. A maeʻa ona matou faia se faʻamamaina tele o le tele o miliona laina, e manaʻomia lava ona matou faia se REPACK. E taua tele lenei mea mo fa'asino igoa. O le a latou lagona le le fiafia pe a uma ona matou faamamaina mea uma iina.
Ma afai e te manaʻo e toe faʻafoʻi mai le galuega i aso taʻitasi o le taʻavale, ona ou fautuaina lea e fai soo, ae laʻititi. E mafai ona tasi i minute uma pe sili atu foi i sina taimi. Ma e manaʻomia ona tatou mataʻituina mea e lua: o lenei mea e leai ni mea sese ma e le tuai. O le togafiti na ou faʻaalia o le a faʻatagaina oe e foia lenei mea.
O le mea matou te faia o le open source. O loʻo tuʻuina atu i luga ole GitLab. Ma matou faia ina ia mafai e tagata ona siaki e tusa lava pe leai se DBA. Matou te faia se suʻesuʻega faʻamaumauga, o lona uiga, matou te taʻua le vaega autu o loʻo galue ai Joe. Ma e mafai ona e mauaina se kopi o le gaosiga. O le taimi nei o loʻo i ai se faʻatinoga o Joe mo le faʻavaivai, e mafai ona e fai atu iina: "faʻamatala sea ma se talosaga" ma vave maua le taunuuga mo lau kopi o le database. E mafai fo'i ona e faia TAMA'E iina, ma e leai se tasi na te iloa.
Se'i faapea e 10 au terabytes, o lo'o matou faia se su'esu'ega fa'amaumauga ma 10 terabytes. Ma e 10 tagata atinaʻe e mafai ona galulue faʻatasi ma faʻamaumauga 10 terabyte tutusa. E mafai e tagata uma ona fai mea latou te mananaʻo ai. E mafai ona tape, pa'u, ma isi. E manaia tele. O le a tatou talanoa i ai taeao.
E ta'ua lea o le tu'uina atu manifinifi. O se faiga fa'apitoa lea. O se ituaiga o mafaufauga e matua faʻaumatia ai le tuai i atinaʻe ma suʻega ma avea ai le lalolagi ma nofoaga sili atu i lenei tulaga. O lona uiga, naʻo le faʻatagaina oe e aloese mai faʻafitauli i le tele o gaioiga.
Faataitaiga: 5 terabyte database, maua se kopi i lalo ifo o le 30 sekone. Ma e le faalagolago foi i le tele, o lona uiga e le afaina pe fia terabytes.
O aso nei e mafai ona e alu i
Au fesili
E masani lava i tulaga moni e foliga mai o faʻamaumauga e tatau ona tumau i le laulau e sili atu le itiiti ifo nai lo mea e manaʻomia ona tape. O lona uiga, i se tulaga faapena e masani ona faigofie le faʻatinoina o lenei auala, pe a faigofie ona fai se mea fou, kopi naʻo faʻamatalaga talafeagai iina ma tusi le laulau tuai. E manino lava e te manaʻomia se faiga faʻapipiʻi mo lenei taimi aʻo e fesuiaʻi. E faapefea lenei faiga?
O se faiga lelei tele lea ma o se galuega lelei tele. E talitutusa lava ma le mea e fai e le pg_repack, e tutusa lelei ma le mea e tatau ona e faia pe a e ID tagata na faia 4 bytes. O le tele o auivi na faia lenei mea i ni nai tausaga ua mavae, ma o papatusi ua faatoa tupu tele, ma e tatau ona liua i le 8 paita.
E fai si faigata lenei galuega. Sa matou faia. Ma e tatau ona e matua faaeteete. E iai loka, ma isi. Ae ua uma. O lona uiga, o le auala masani o le faʻaaogaina pg_repack. E te faailoa atu se faailoga faapena. Ma ae e te leʻi amata faʻatumu i faʻamatalaga faʻamatalaga, e te faʻaalia foi se laulau e tasi e siaki ai suiga uma. O loʻo i ai se togafiti iina atonu e te le vaʻaia ai ni suiga. O loʻo i ai faʻamatalaga. Ona e fesuia'i lea, fa'asolo atu suiga. E iai se malologa puupuu pe a tatou loka tagata uma, ae o le aotelega o loʻo faia.
Afai e te vaʻai i le pg_repack i le GitHub, ona i ai lea o se galuega e faʻaliliu ai le ID mai le int 4 i le int 8, ona i ai lea o se manatu e faʻaaoga le pg_repack lava ia. E mafai foʻi lenei mea, ae o se faiga faʻapitoa lea o le hacker, ae o le a aoga foi mo lenei mea. E mafai ona e faʻalavelave i le faʻaosoina e faʻaaoga pg_repack ma fai i ai: "Matou te le manaʻomia lenei faʻamatalaga," o lona uiga matou te faʻafeiloaʻi naʻo mea matou te manaʻomia. Ona na ona sui lea ma o lena.
Faatasi ai ma lenei faiga, matou te maua foi se kopi lona lua o le laulau, lea ua uma ona faʻasinoina faʻamaumauga ma faʻataʻatia solo lelei ma faʻailoga matagofie.
Bloat leai, o se auala lelei lea. Ae ou te iloa o loʻo i ai taumafaiga e atiaʻe le masini mo lenei mea, o lona uiga o le faia o se fofo lautele. E mafai ona ou faailoa atu ia te oe lenei masini. Ua tusia i le Python, mea lelei.
Ua na'o a'u laititi mai le lalolagi MySQL, o lea na ou sau ai e fa'alogo. Ma matou te faʻaaogaina lenei auala.
Ae na'o le 90%. Afai e maua le 5%, e le lelei tele le faʻaaogaina.
Faafetai mo le lipoti! Afai e leai ni punaoa e fai ai se kopi atoa o le prod, pe i ai se algorithm poʻo se fua faʻatatau e fuafua ai le uta poʻo le tele?
Lelei fesili. E oʻo mai i le taimi nei ua mafai ona matou mauaina faʻamaumauga tele-terabyte. E tusa lava pe le tutusa mea faigaluega iina, mo se faʻataʻitaʻiga, itiiti le manatua, itiiti le gaosiga ma disks e le tutusa, matou te faia pea. Afai e matua leai lava se mea, ona tatau lea ona e mafaufau i ai. Sei ou mafaufau i ai seia oo i taeao, ua e sau, o le a ta talanoa, o se fesili lelei lea.
Faafetai mo le lipoti! Na muamua amata ona e talanoa e uiga i le mea moni o loʻo i ai se Postgres malulu, o loʻo i ai faʻapena ma ia tapulaʻa, ae o loʻo atiaʻe. Ma o nei mea uma o se tootoo lautele. Pe le o nei mea uma e feteenai ma le atinaʻeina o Postgres lava ia, lea o le a aliali mai ai se ituaiga DELETE deferent poʻo se isi mea e tatau ona tausia i se tulaga maualalo mea o loʻo tatou taumafai e ufiufi iinei ma nisi oa tatou lava auala uiga ese?
Afai i le SQL na matou fai atu e tape pe faʻafouina le tele o faʻamaumauga i se tasi fefaʻatauaiga, faʻafefea ona tufatufaina e Postgres lenei mea? E fa'agata fa'aletino a matou galuega. O le a matou faia pea lenei mea mo se taimi umi. Ma o le a matou lokaina i lenei taimi, ma isi.
Sa faapena foi ona latou faia i faasino igoa.
E mafai ona ou manatu e mafai ona otometi le fa'alogoina o nofoaga siaki e tasi. E iai se aso e tupu ai lenei mea. Ae ou te le malamalama lelei i le fesili.
O le fesili: o i ai se vector vector o loʻo alu iina, ma e tutusa ma oe iinei? O na. Pe latou te le'i mafaufau ea i ai?
Sa ou talanoa e uiga i mataupu faavae e mafai ona faaaoga i le taimi nei. O loʻo i ai se isi bot
Ma mo siaki siaki e mafai ona e faia le mea lenei: afai e iai sau fuifui afe ma vaega eseese o meafaigaluega, eseese masini masini i le ao, e mafai ona e faʻaogaina la matou bot
Manuia le aoauli Na e talanoa e uiga i le matautia o fefaʻatauaiga umi. Na e fai mai o le autovacuum e poloka i le tulaga o le tapeina. O le a se isi mea e afaina ai i tatou? Aua o loʻo matou talanoa atili e uiga i le faʻasaʻolotoina o avanoa ma mafai ona faʻaaogaina. O le a se isi mea e tatau ona tatou leiloa?
Autovacuum atonu e le o se fa'afitauli sili lea iinei. Ma o le mea moni o se fefaʻatauaiga umi e mafai ona poloka isi fefaʻatauaiga o se mea e sili atu ona mataʻutia. Atonu e feiloai pe le mafai foi. Afai e feiloai o ia, e ono matua leaga lava mea. Ma o le autovacuum o se faʻafitauli foi lea. E lua faʻafitauli i fefaʻatauaiga umi i le OLTP: loka ma le autovacuum. Ma afai e iai sau faʻaaliga vevela vevela e mafai ona faʻaogaina i luga o le kopi, ona oʻo mai ai lea o le poloka autovacuum i le matai, o le a taunuu mai le kopi. Ae o le mea sili o le a leai ni loka iina. Ma o iinei o le ai ai loka. O loʻo matou talanoa e uiga i suiga o faʻamatalaga, o lea o loka o se vaega taua iinei. Ma afai e faʻaauau lenei mea mo se taimi umi, umi, ona faʻateleina lea o fefaʻatauaiga e poloka. E mafai ona latou maileia isi. Ma ua aliali mai laau loka. Sa ou tuuina atu se sootaga i le snippet. Ma o lenei faafitauli e vave ona sili atu ona iloa nai lo le faafitauli i le autovacuum, lea e mafai ona faʻaputuina.
Faafetai mo le lipoti! Na e amata lau lipoti i lou fai mai ua sese lau su'ega. Na matou faʻaauauina lo matou manatu e manaʻomia ona matou faʻaaogaina meafaigaluega tutusa, ma le faʻavae e tutusa lava. Fa'apea na matou tu'uina atu i le tagata fa'avae se fa'avae. Ma sa ia usitaia le talosaga. Ma e foliga mai o loo manuia. Ae e le siaki i luga o le ola, ae i luga o le ola, mo se faʻataʻitaʻiga, o la matou uta e 60-70%. Ma e tusa lava pe tatou te faʻaogaina lenei faʻalogo, e le lelei tele
O le i ai o se tagata poto faapitoa i lau 'au ma le fa'aaogaina o tagata tomai faapitoa i le DBA e mafai ona va'ai mea o le a tupu i lalo o le uta moni i tua e taua tele. Pe a na ona matou tietie atu i a matou suiga mama, matou te vaaia le ata. Ae o se auala sili atu ona alualu i luma o le taimi na matou toe faia ai le mea lava e tasi, ae faʻatasi ai ma se uta faʻataʻitaʻiga. E manaia tele lenei mea. E tatau lava ona tatou tuputupu ae i lenei tulaga. Ua matua. Sa matou vaʻavaʻai mama i mea ua matou maua ma vaʻavaʻai foi pe lava a matou punaoa. Ose fesili lelei lena.
A uma ona tatou faia se lapisi filifili ma ua tatou maua, mo se faataitaiga, se fuʻa tape
Ole mea lea ole autovacuum e otometi ile Postgres.
Oi, na te faia lena mea?
Autovacuum o le aoina o lapisi.
Faafetai lava!
Faafetai mo le lipoti! E i ai se filifiliga e fa'atulaga vave ai se fa'amaumauga ma vaeluaga ina ia aveese uma otaota mai le laulau autu i se mea i le itu?
Ioe ua i ai.
E mafai la ona tatou puipuia i tatou lava pe afai ua tatou lokaina se laulau e le tatau ona faaaoga?
Ioe ua i ai. Ae o se fesili moa ma fuamoa. Afai tatou te iloa uma le mea o le a tupu i le lumanaʻi, o le mea moni, o le a tatou faia mea sili uma. Ae ua suia pisinisi, o koluma fou ma talosaga fou ua aliali mai. Ona - oops, matou te mananaʻo e tapeina. Ae o se tulaga lelei lea; e tupu i le olaga, ae le o taimi uma. Ae o le aotelega o se manatu lelei. Na'o le tipi ma o lena lava.
puna: www.habr.com