Ntlafatsa lipotso tsa polokelo ka ho sebelisa mohlala oa tšebeletso ea B2B bakeng sa lihahi

Joang ho holisa makhetlo a 10 palo ea lipotso ho database ntle le ho fallela ho seva e hlahisang litholoana le ho boloka ts'ebetso ea sistimi? Ke tla u bolella hore na re sebetsane joang le ho fokotseha ha ts'ebetso ea database ea rona, kamoo re ntlafalitseng lipotso tsa SQL ho sebeletsa basebelisi ba bangata kamoo ho ka khonehang le ho se eketse litšenyehelo tsa lisebelisoa tsa k'homphieutha.

Ke etsa tšebeletso ea ho laola mekhoa ea khoebo lik'hamphaning tsa kaho. Lik'hamphani tse ka bang likete tse 3 li sebetsa le rona. Batho ba fetang likete tse 10 ba sebetsa le sistimi ea rona letsatsi le leng le le leng bakeng sa lihora tse 4-10. E rarolla mathata a fapaneng a moralo, tsebiso, temoso, netefatso ... Re sebelisa PostgreSQL 9.6. Re na le litafole tse ka bang 300 sebakeng sa polokelo ea litaba mme lipotso tse fihlang ho limilione tse 200 (tse fapaneng tse likete tse 10) li amoheloa letsatsi le leng le le leng. Ka karolelano re na le likopo tse likete tse 3-4 motsotsoana, ka nako e sebetsang ka ho fetisisa ho feta likopo tse likete tse 10 motsotsoana. Bongata ba lipotso ke OLAP. Ho na le litlatsetso tse fokolang, lintlafatso le litlatsetso, ho bolelang hore mojaro oa OLTP o bobebe. Ke fane ka linomoro tsena kaofela e le hore u ka lekola boholo ba morero oa rona le ho utloisisa hore na boiphihlelo ba rona bo ka u tsoela molemo hakae.

Setšoantšo sa pele. Molaetsa oa mantsoe

Ha re qala nts'etsopele, re ne re sa nahane hore na ke mojaro oa mofuta ofe o neng o tla oela ho database le seo re neng re tla se etsa haeba seva se emisa ho hula. Ha re ntse re rala polokelo ea litaba, re ne re latela likhothaletso tse akaretsang mme ra leka ho se ithunye maotong, empa ra feta likeletso tse akaretsang joalo ka "se sebelise mohlala. Maemo a Sebopeho sa Mokhatlo ha rea ​​ka ra kena. Re qapile ho latela melao-motheo ea ho tloaeleha, ho qoba khaello ea data mme re sa tsotelle ho potlakisa lipotso tse itseng. Hang ha basebelisi ba pele ba fihla, re ile ra kopana le bothata ba ts'ebetso. Joalo ka tloaelo, re ne re sa itokisetsa sena ka botlalo. Mathata a pele a ile a fetoha a bonolo. E le molao, ntho e 'ngoe le e' ngoe e ile ea rarolloa ka ho eketsa index e ncha. Empa ho ile ha fihla nako eo lipache tse bonolo li ileng tsa khaotsa ho sebetsa. Ha re hlokomela hore ha re na boiphihlelo 'me ho ntse ho ba thata le ho feta ho rona ho utloisisa se bakang mathata, re ile ra hira litsebi tse re thusitseng ho theha seva ka nepo, ho hokahanya tlhahlobo, le ho re bonts'a hore na re batla ho fumana eng. lipalo-palo.

Setšoantšo sa bobeli. Lipalopalo

Kahoo re na le lipotso tse ka bang likete tse 10 tse fapaneng tse etsoang ho database ea rona ka letsatsi. Ho tsena tse likete tse 10, ho na le liphoofolo tsa litonanahali tse bolaoang makhetlo a limilione tse 2-3 ka karolelano ea nako ea 0.1-0.3 ms, 'me ho na le lipotso tse nang le nako e tloaelehileng ea ho bolaoa ea metsotsoana e 30 e bitsoang ka makhetlo a 100 ka letsatsi.

Ho ne ho sa khonehe ho ntlafatsa lipotso tsohle tse likete tse 10, kahoo re ile ra etsa qeto ea ho tseba hore na re ka lebisa boiteko ba rona hokae ho ntlafatsa ts'ebetso ea database ka nepo. Ka mor'a ho pheta-pheta ka makhetlo a 'maloa, re ile ra qala ho arola likōpo ka mefuta.

Likopo tse TSOANG

Tsena ke lipotso tse boima ka ho fetisisa tse nkang nako e ngata (kakaretso ea nako). Tsena ke lipotso tse bitsoang hangata haholo kapa lipotso tse nkang nako e telele ho etsoa (lipotso tse telele le khafetsa li ile tsa ntlafatsoa nakong ea pele ea ntoa ea lebelo). Ka lebaka leo, seva se qeta nako e ngata haholo ts'ebetsong ea bona. Ho feta moo, ho bohlokoa ho arola likopo tse holimo ka nako eohle ea ts'ebetso le ka thoko ka nako ea IO. Mekhoa ea ho ntlafatsa lipotso tse joalo e fapane hanyane.

Tloaelo e tloaelehileng ea lik'hamphani tsohle ke ho sebetsa le likopo tsa TOP. Ho na le tse 'maloa tsa tsona; ho ntlafatsa esita le potso e le' ngoe ho ka lokolla 5-10% ea lisebelisoa. Leha ho le joalo, ha projeke e ntse e hola, ho ntlafatsa lipotso tsa TOP e ba mosebetsi o ntseng o eketseha oo e seng oa bohlokoa. Mekhoa eohle e bonolo e se e sebelitsoe, 'me kopo e "boima" ka ho fetisisa e nka "feela" 3-5% ea lisebelisoa. Haeba lipotso tsa TOP ka kakaretso li nka nako e ka tlase ho 30-40% ea nako, ho ka etsahala hore ebe u se u entse boiteko ba ho etsa hore li sebetse ka potlako 'me ke nako ea ho fetela pele ho ntlafatsa lipotso tse tsoang sehlopheng se latelang.
E sala ho araba potso ea hore na ke lipotso tse kae tse holimo tse lokelang ho kenyelletsoa sehlopheng sena. Hangata ke nka bonyane 10, empa ha ho na ho feta 20. Ke leka ho etsa bonnete ba hore nako ea pele le ea ho qetela sehlopheng sa TOP e fapane ka makhetlo a fetang 10. Ke hore, haeba nako ea ho botsa lipotso e theoha haholo ho tloha sebakeng sa 1 ho ea ho 10, joale ke nka TOP-10, haeba lerotholi le fokotseha butle-butle, joale ke eketsa boholo ba sehlopha ho 15 kapa 20.
Ntlafatsa lipotso tsa polokelo ka ho sebelisa mohlala oa tšebeletso ea B2B bakeng sa lihahi

Lihoai tse bohareng

Tsena ke likopo tse tlang hang ka mor'a TOP, ntle le 5-10% ea ho qetela. Hangata, ho ntlafatsa lipotso tsena ho na le monyetla oa ho eketsa ts'ebetso ea seva haholo. Likopo tsena li ka ba boima ba 80%. Empa le haeba karolo ea bona e fetile 50%, joale ke nako ea ho li sheba ka hloko.

Mohatla

Joalokaha ho boletsoe, lipotso tsena li tla qetellong 'me li nka 5-10% ea nako. U ka li lebala hafeela u sa sebelise lisebelisoa tsa tlhahlobo ea lipotso tse ikemetseng, joale ho li ntlafatsa le tsona ho ka ba theko e tlase.

Mokhoa oa ho hlahloba sehlopha ka seng?

Ke sebelisa potso ea SQL e thusang ho etsa tlhahlobo e joalo bakeng sa PostgreSQL (Ke na le bonnete ba hore potso e tšoanang e ka ngolloa li-DBMS tse ling tse ngata)

Potso ea SQL ea ho hakanya boholo ba lihlopha tsa TOP-MEDIUM-TAIL

SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_tail) AS sum_tail
FROM
(
  SELECT CASE WHEN rn <= 20              THEN tt_percent ELSE 0 END AS time_top,
         CASE WHEN rn > 20 AND rn <= 800 THEN tt_percent ELSE 0 END AS time_medium,
         CASE WHEN rn > 800              THEN tt_percent ELSE 0 END AS time_tail
  FROM (
    SELECT total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query,
    ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn
    FROM pg_stat_statements
    ORDER BY total_time DESC
  ) AS t
)
AS ts

Sephetho sa potso ke likholomo tse tharo, 'me e 'ngoe le e 'ngoe ea tsona e na le peresente ea nako eo e e nkang ho araba lipotso tsa sehlopha sena. Ka hare ho kopo ho na le linomoro tse peli (tabeng ea ka ke 20 le 800) tse arolang likōpo tse tsoang ho sehlopha se seng ho se seng.

Ena ke tsela eo likabelo tsa likopo li batlang li bapisoa le nakong eo mosebetsi oa ntlafatso o qalileng le hona joale.

Ntlafatsa lipotso tsa polokelo ka ho sebelisa mohlala oa tšebeletso ea B2B bakeng sa lihahi

Setšoantšo se bontša hore karolo ea likopo tsa TOP e fokotsehile haholo, empa "batho ba lihoai ba bohareng" ba eketsehile.
Qalong, likopo tsa TOP li ne li kenyelletsa liphoso tse hlakileng. Ha nako e ntse e ea, mafu a bana a ile a nyamela, karolo ea likopo tsa TOP e ile ea fokotseha, 'me ho ne ho hlokahala hore ho etsoe boiteko bo eketsehileng ho potlakisa likōpo tse thata.

Ho fumana mongolo oa likopo re sebelisa kopo e latelang

SELECT * FROM (
  SELECT ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn, total_time / (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query
  FROM pg_stat_statements
  ORDER BY total_time DESC
) AS T
WHERE
rn <= 20 -- TOP
-- rn > 20 AND rn <= 800 -- MEDIUM
-- rn > 800  -- TAIL

Mona ke lethathamo la mekhoa e sebelisoang haholo e re thusitseng ho potlakisa lipotso tsa TOP:

  • Ho hlophisoa bocha ha sistimi, ho etsa mohlala, ho lokisa mohopolo oa tsebiso u sebelisa morekisi oa melaetsa ho fapana le lipotso tsa nako le nako sebakeng sa polokelo ea litaba.
  • Ho eketsa kapa ho fetola li-index
  • Ho ngola hape lipotso tsa ORM ho SQL e hloekileng
  • Ho ngola hape mokhoa oa ho kenya data ka botsoa
  • Caching ka data denormalization. Mohlala, re na le phepelo ea khokahano ea tafole -> Invoice -> Kopo -> Kopo. Ke hore, thomello ka 'ngoe e amahanngoa le kopo ka litafole tse ling. E le hore re se ke ra hokahanya litafole tsohle kopong e 'ngoe le e 'ngoe, re qopitsa sehokelo sa kopo ho tafole ea Delivery.
  • Ho boloka litafole tse tsitsitseng ka libuka tsa litšupiso le ho fetola litafole ka seoelo mohopolong oa lenaneo.

Ka linako tse ling liphetoho li ne li lekana le phetoho e tsotehang, empa li fane ka 5-10% ea mojaro oa tsamaiso 'me li ne li lokile. Ha nako e ntse e ea, mosi o ile oa fokotseha, 'me ho ne ho hlokahala hore ho lokisoe bocha.

Eaba re lebisa tlhokomelo ea rona ho sehlopha sa bobeli sa likopo - sehlopha sa lihoai tse bohareng. Ho na le lipotso tse ling tse ngata ho eona mme ho ne ho bonahala eka ho tla nka nako e ngata ho sekaseka sehlopha sohle. Leha ho le joalo, lipotso tse ngata li ile tsa bonahala li le bonolo haholo ho li ntlafatsa, 'me mathata a mangata a phetoa makhetlo a mangata ka mefuta e fapaneng. Mehlala ke ena ea litlatsetso tse tloaelehileng tseo re li sebelisitseng lipotsong tse ngata tse ts'oanang 'me sehlopha ka seng sa lipotso tse ntlafalitsoeng se theotse database ka 3-5%.

  • Ho e-na le ho hlahloba boteng ba litlaleho tse sebelisang COUNT le ho hlahloba tafole e feletseng, EXISTS e qalile ho sebelisoa
  • Lahla DISTINCT (ha ho na risepe e akaretsang, empa ka linako tse ling u ka e tlosa habonolo ka ho potlakisa kopo ka makhetlo a 10-100).

    Mohlala, sebakeng sa potso ea ho khetha bakhanni bohle tafoleng e kholo ea lipalangoang (DELIVERY)

    SELECT DISTINCT P.ID, P.FIRST_NAME, P.LAST_NAME
    FROM DELIVERY D JOIN PERSON P ON D.DRIVER_ID = P.ID
    

    o entse potso tafoleng e nyane haholo PERSON

    SELECT P.ID, P.FIRST_NAME, P.LAST_NAME
    FROM PERSON
    WHERE EXISTS(SELECT D.ID FROM DELIVERY WHERE D.DRIVER_ID = P.ID)
    

    Ho ka bonahala eka re sebelisitse subquery e amanang, empa e fana ka lebelo la makhetlo a fetang 10.

  • Maemong a mangata, COUNT e lahliloe ka botlalo
    ho nkeloa sebaka ke palo ea boleng bo lekantsoeng
  • sebakeng sa
    UPPER(s) LIKE JOHN%’ 
    

    sebedisa

    s ILIKE “John%”
    

Kopo e 'ngoe le e' ngoe e khethehileng ka linako tse ling e ne e potlakisoa ka makhetlo a 3-1000. Ho sa tsotellehe ts'ebetso e tsotehang, qalong ho ne ho bonahala eka ho ne ho se na thuso ea ho ntlafatsa potso e nkang 10 ms ho e qeta, ke e 'ngoe ea lipotso tse boima ka ho fetisisa tsa 3rd,' me e nka karolo ea lekholo ea liperesente tsa kakaretso ea nako ea polokelo ea polokelo. Empa ka ho sebelisa risepe e tšoanang ho sehlopha sa lipotso tsa mofuta o le mong, re hapile liperesente tse 'maloa. E le hore re se ke ra senya nako ka ho hlahloba makholo a lipotso, re ngotse mangolo a 'maloa a bonolo a sebelisitseng lipolelo tse tloaelehileng ho fumana lipotso tsa mofuta o tšoanang. Ka lebaka leo, ho batla ka bohona lihlopha tsa lipotso ho re lumelletse ho ntlafatsa ts'ebetso ea rona ka boiteko bo itekanetseng.

Ka lebaka leo, re se re qetile lilemo tse tharo re sebetsa ho hardware e tšoanang. Ka karolelano mojaro oa letsatsi le letsatsi o ka bang 30%, litlhōrōng o fihla ho 70%. Palo ea likopo, hammoho le palo ea basebelisi, e eketsehile ka makhetlo a ka bang 10. 'Me sena sohle ke leboha ho beha leihlo khafetsa lihlopha tsena tsa likopo tsa TOP-MEDIUM. Hang ha kopo e ncha e hlaha sehlopheng sa TOP, re e sekaseka hang-hang ebe re leka ho e potlakisa. Re hlahloba sehlopha sa MEDIUM hang ka beke re sebelisa mangolo a tlhahlobo ea lipotso. Haeba re kopana le lipotso tse ncha tseo re seng re ntse re tseba ho li ntlafatsa, re li fetola kapele. Ka linako tse ling re fumana mekhoa e mecha ea optimization e ka sebelisoang lipotsong tse 'maloa ka nako e le ngoe.

Ho ea ka likhakanyo tsa rona, seva sa hona joale se tla mamella keketseho ea palo ea basebelisi ka linako tse ling tsa 3-5. Ke 'nete, re na le ace e 'ngoe hape - ha re e-so fetisetse lipotso tsa KHETHA seiponeng, joalo ka ha ho khothaletsoa. Empa ha re etse sena ka hloko, hobane re batla ho qala ka ho qeta menyetla ea "bohlale" ho ntlafatsa pele re bulela "lithunya tse boima".
Ho sheba ka hloko mosebetsi o entsoeng ho ka fana ka maikutlo a ho sebelisa sekhahla se otlolohileng. Reka seva se matla ho feta ho senya nako ea litsebi. Seva e kanna ea se ke ea bitsa chelete e ngata hakaalo, haholo hobane ha re so phethe meeli ea ho lekanya holimo. Leha ho le joalo, palo ea likopo feela e ile ea eketseha ka makhetlo a 10. Ho theosa le lilemo tse 'maloa, ts'ebetso ea sistimi e eketsehile mme joale ho na le mefuta e mengata ea likopo. Ka lebaka la caching, ts'ebetso e neng e le teng e etsoa ka likopo tse fokolang, le likopo tse sebetsang hantle. Sena se bolela hore o ka atisa ka mokhoa o sireletsehileng ka tse ling tse 5 ho fumana coefficient ea 'nete ea ho potlakisa. Kahoo, ho ea ka likhakanyo tse tsitsitseng ka ho fetisisa, re ka re ho potlakisa e ne e le makhetlo a 50 kapa ho feta. Ho otla seva ka ho otloloha ho ka bitsa makhetlo a 50 ho feta. Haholo-holo ha ho nahanoa hore hang ha ntlafatso e etsoa e sebetsa ka linako tsohle, 'me tefiso ea seva e hiriloeng e tla khoeli le khoeli.

Source: www.habr.com

Eketsa ka tlhaloso