Wanaajinta weydiimaha xogta iyada oo la adeegsanayo tusaalaha adeegga B2B ee dhisayaasha

Sidee loo kori karaa 10 jeer tirada weydiimaha kaydka iyada oo aan loo guurin server wax soo saar badan leh oo la ilaaliyo shaqeynta nidaamka? Waxaan kuu sheegi doonaa sida aan ula macaamilnay hoos u dhaca waxqabadka xogtayada, sida aan u wanaajinay su'aalaha SQL si aan ugu adeegno isticmaaleyaal badan intii suurtagal ah oo aan u kordhin qiimaha xisaabinta.

Waxaan sameeyaa adeeg lagu maareeyo hababka ganacsiga ee shirkadaha dhismaha. Ilaa 3 kun oo shirkadood ayaa nala shaqeeya. In ka badan 10 kun oo qof ayaa la shaqeeya nidaamkayaga maalin kasta 4-10 saacadood. Waxay xallisaa dhibaatooyinka kala duwan ee qorsheynta, ogeysiinta, digniinta, ansixinta... Waxaan isticmaalnaa PostgreSQL 9.6. Waxaan kaydka ku haynaa ilaa 300 oo miis waxaana maalin walba lahelaa ilaa 200 milyan oo su'aalood (10 kun oo kala duwan). Celcelis ahaan waxaan haynaa 3-4 kun oo codsi ilbiriqsikii, waqtiyada ugu firfircoon in ka badan 10 kun oo codsi ilbiriqsikii. Inta badan weydiimaha waa OLAP. Waxaa aad u yar wax lagu daro, wax ka beddelka iyo tirtiridda, taasoo la micno ah in culeyska OLTP uu yara fudud yahay. Waxaan u bixiyay dhammaan tirooyinkan si aad u qiimeyso miisaanka mashruucayaga oo aad u fahamto sida ay khibradeenu kuugu faa'iidaysan karto.

Sawirka koowaad. Heeso

Markii aan bilawnay horumarinta, kama fikirin nooca culeyska ku dhici doona xogta iyo waxa aan samayn lahayn haddii server-ku joojiyo jiidista. Marka la naqshadeynayo xogta xogta, waxaan raacnay talooyinka guud waxaanan isku daynay inaanan nafteena ku toogan cagta, laakiin waxay dhaaftay talada guud sida "ha isticmaalin qaabka Qiimaha Sifada Hay'adda maan galin. Waxaan u qaabeynay iyada oo ku saleysan mabaadi'da caadiga ah, ka fogaanshaha xogta ku-noqoshada oo aan dan ka lahayn dedejinta weydiimaha qaarkood. Isla markii isticmaalayaashii ugu horreeyay ay yimaadeen, waxaan la kulannay dhibaato shaqo. Sida caadiga ah, si buuxda uma diyaargaroobin arrintan. Dhibaatooyinkii ugu horreeyay waxay noqdeen kuwo fudud. Sida caadiga ah, wax walba waxaa lagu xalliyay iyada oo lagu daray tusmo cusub. Laakiin waxaa yimid waqti markii balastar fudud ay joojiyeen shaqada. Annaga oo ogaanay in ay naga maqan tahay waayo-aragnimada oo ay sii adkaanayso in aan fahamno waxa dhibka keenaya, waxa aanu shaqaaleynay dhakhaatiir takhasus leh oo naga caawiyay in aanu Server-ka si sax ah u dejinno, isku xidhka la socodka, oo na tusay halka aanu ka raadino tirakoob.

Sawirka labaad. Tirakoobka

Markaa waxaan haynaa ilaa 10 kun oo su'aalood oo kala duwan kuwaas oo lagu fuliyo xogtayada maalin kasta. 10-kan kun, waxaa jira daanyeerka la fuliyay 2-3 milyan jeer celcelis ahaan waqtiga fulinta ee 0.1-0.3 ms, waxaana jira su'aalo leh celcelis ahaan waqtiga fulinta 30 ilbiriqsi oo loo yaqaan 100 jeer maalintii.

Suurtagal ma ahayn in la wanaajiyo dhammaan 10 kun oo su'aalood, sidaas darteed waxaan go'aansanay inaan ogaanno halka aan ku jihayn karno dadaalkeena si aan u wanaajino waxqabadka xogta si sax ah. Dhawr ku celcelin ka dib, waxaan bilownay inaan u qaybinno codsiyada noocyo.

Codsiyada TOP

Kuwani waa weydiimaha ugu culus ee qaata waqtiga ugu badan (waqtiga guud). Kuwani waa su'aalo la yiraahdo marar badan ama su'aalo waqti dheer qaata si loo fuliyo (su'aalo dheer iyo kuwo isdaba-joog ah ayaa la hagaajiyay markii ugu horeysay ee dagaalka xawaaraha). Natiijo ahaan, server-ku wuxuu ku bixiyaa waqtiga ugu badan ee fulinta. Waxaa intaa dheer, waxaa muhiim ah in la kala saaro codsiyada sare wadarta wakhtiga fulinta iyo si gaar ah wakhtiga IO. Hababka lagu wanaajinayo weydiimahan oo kale ayaa xoogaa kala duwan.

Dhaqanka caadiga ah ee dhammaan shirkadaha waa inay la shaqeeyaan codsiyada TOP. Way yar yihiin iyaga; wanaajinta xitaa hal su'aal waxay xorayn kartaa 5-10% ee ilaha. Si kastaba ha ahaatee, marka uu mashruucu qaan gaadho, wanaajinta su'aalaha TOP waxay noqotaa hawl sii kordheysa oo aan fududayn. Dhammaan hababka fudud ayaa horayba loo shaqeeyay, iyo codsiga ugu "culus" wuxuu qaataa "kaliya" 3-5% ee kheyraadka. Haddii su'aalaha TOP ay guud ahaan qaataan wax ka yar 30-40% wakhtiga, markaa waxay u badan tahay inaad horay u samaysay dadaal si aad si dhakhso ah u shaqeysid oo waa waqtigii aad u gudbi lahayd si aad u wanaajiso su'aalaha kooxda soo socota.
Way hadhsan tahay in laga jawaabo su'aasha ah imisa su'aalood oo sare ayay tahay in lagu daro kooxdan. Caadi ahaan waxaan qaataa ugu yaraan 10, laakiin aan ka badnayn 20. Waxaan isku dayaa inaan hubiyo in wakhtiga ugu horreeya iyo kan ugu dambeeya ee kooxda TOP ay ka duwan tahay wax aan ka badnayn 10 jeer. Taasi waa, haddii wakhtiga fulinta su'aasha uu si xoog leh uga soo baxo booska 1aad ilaa 10aad, ka dibna waxaan qaataa TOP-10, haddii hoos u dhacu uu si tartiib tartiib ah u socdo, ka dibna waxaan kordhinayaa xajmiga kooxda ilaa 15 ama 20.
Wanaajinta weydiimaha xogta iyada oo la adeegsanayo tusaalaha adeegga B2B ee dhisayaasha

Beeralayda dhexe

Kuwani waa dhammaan codsiyada isla markiiba yimaada TOP, marka laga reebo 5-10% ee u dambeeya. Caadi ahaan, hagaajinta su'aalahan waxay ku jirtaa fursadda aad si weyn u kordhinayso waxqabadka server-ka. Codsiyadan ayaa miisaankoodu noqon karaa ilaa 80%. Laakiin xitaa haddii saamigoodu dhaaftay 50%, markaa waa waqtigii aad si taxadar leh u eegi lahayd.

Dabo

Sida aan soo sheegnay, weydiimahani waxay yimaadaan dhamaadka waxayna qaataan 5-10% wakhtiga. Waxaad illoobi kartaa iyaga oo keliya haddii aadan isticmaalin aaladaha falanqaynta weydiinta tooska ah, ka dib hagaajintooda waxay sidoo kale noqon kartaa mid jaban.

Sidee loo qiimeeyaa koox kasta?

Waxaan isticmaalaa su'aal SQL ah oo ka caawisa samaynta qiimaynta PostgreSQL (waxaan hubaa in su'aal la mid ah loo qori karo DBMS-yo kale oo badan)

Weydiinta SQL si loo qiyaaso cabbirka kooxaha 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

Natiijada weydiintu waa saddex tiir, kuwaas oo mid kastaa ka kooban yahay boqolleyda wakhtiga ay qaadanayso si loo habeeyo su'aalaha kooxdan. Codsiga gudihiisa waxa ku jira laba lambar (xaaladkayga waa 20 iyo 800) oo kala saaraya codsiyada koox kale.

Sidan ayaa ah sida saamiyada codsiyada ay qiyaas ahaan isbarbardhigaan wakhtiga tayaynta shaqada ay bilaabatay iyo hadda.

Wanaajinta weydiimaha xogta iyada oo la adeegsanayo tusaalaha adeegga B2B ee dhisayaasha

Jaantusku wuxuu muujinayaa in saamiga codsiyada TOP ay si aad ah hoos ugu dhacday, laakiin "beeraha dhexe" ayaa kordhay.
Markii hore, codsiyada TOP waxaa ka mid ahaa khaladaad cad. Muddo ka dib, cudurrada carruurnimada ayaa la waayay, saamiga codsiyada TOP ayaa hoos u dhacay, iyo dadaal badan oo dheeraad ah ayaa la sameeyay si loo dedejiyo codsiyada adag.

Si aan u helno qoraalka codsiyada waxaan isticmaalnaa codsiga soo socda

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

Waa kuwan liiska farsamooyinka inta badan la isticmaalo ee naga caawiyay dedejinta weydiimaha TOP:

  • Dib-u-qaabaynta nidaamka, tusaale ahaan, dib-u-shaqaynta macquulka ogaysiinta iyadoo la adeegsanayo dillaalka farriinta halkii laga heli lahaa weydiimo xilliyeedka ah ee kaydka
  • Ku darista ama beddelka tusmooyinka
  • Dib ugu qorida weydiimaha ORM ee SQL saafi ah
  • Dib u qorista xogta caajiska ah
  • Kaydinta iyada oo la adeegsanayo kala-soocidda xogta. Tusaale ahaan, waxaan haynaa isku xirka miiska Bixinta -> qaansheegta -> Codsiga -> Codsiga. Taasi waa, keenista kasta waxay la xiriirtaa codsi iyada oo loo marayo miisaska kale. Si aan loogu xidhin dhammaan jaantusyada codsi kasta, waxaanu nuqul ka samaynay isku xirka codsiga ku jira miiska bixinta.
  • Ku kaydinta miisaska taagan ee buugaagta tixraaca leh iyo baddelida miisaska xusuusta barnaamijka.

Mararka qaarkood isbeddeladu waxay noqdeen dib-u-qaabayn cajiib ah, laakiin waxay bixiyeen 5-10% culeyska nidaamka waana la caddeeyey. Muddo ka dib, qiiqa ayaa noqday mid yar oo yar, waxaana loo baahday dib-u-qaabayn aad iyo aad u daran.

Kadibna waxaan u jeedinay dareenkayada kooxda labaad ee codsiyada - kooxda beeralayda dhexe. Waxaa ku jira su'aalo kale oo badan waxayna u muuqatay inay qaadan doonto waqti badan in la falanqeeyo kooxda oo dhan. Si kastaba ha ahaatee, su'aalaha intooda badani waxay noqdeen kuwo aad u fudud in la hagaajiyo, iyo dhibaatooyin badan ayaa lagu soo noqnoqday daraasiin jeer oo kala duwan. Waa kuwan tusaalayaal qaar ka mid ah hagaajinta caadiga ah ee aan ku dabaqnay daraasiin su'aalo ah oo la mid ah iyo koox kasta oo su'aalo la wanaajiyey ayaa soo dejisay xogta 3-5%.

  • Halkii laga hubin lahaa joogitaanka diiwaanada iyadoo la isticmaalayo COUNT iyo sawir miis buuxa, EXISTS ayaa la bilaabay in la isticmaalo
  • Ka takhalusay DISTINCT (ma jirto cunto karinta guud, laakiin mararka qaarkood waxaad si fudud uga takhalusi kartaa adigoo dedejinaya codsiga 10-100 jeer).

    Tusaale ahaan, halkii aad ka dooran lahayd dhammaan darawalada miiska weyn ee keenista (DELIVERY)

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

    ku sameeyay su'aal ku saabsan miis aad u yar QOFKA

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

    Waxay u ekaan kartaa inaan isticmaalnay subquery xiriir la leh, laakiin waxay ku siinaysaa xawaare ka badan 10 jeer.

  • Xaalado badan, COUNT waa laga tagay gabi ahaan iyo
    lagu beddelay xisaabinta qiyaasta qiyaasta
  • halkii
    UPPER(s) LIKE JOHN%’ 
    

    isticmaal

    s ILIKE β€œJohn%”
    

Codsi kasta oo gaar ah ayaa mararka qaarkood la dedejiyey 3-1000 jeer. Inkasta oo waxqabadka cajiibka ah, marka hore waxay nooga muuqatay in aysan jirin wax faa'iido ah oo lagu hagaajinayo weydiinta qaadata 10 ms in la dhammaystiro, waa mid ka mid ah boqolka 3aad ee weydiimaha ugu culus, waxayna qaadataa boqollaal boqolkiiba wakhtiga kaydinta xogta guud. Laakin anagoo adeegsanayna cunto karinta isku mid ah koox su'aalo ah oo isku nooc ah, waxaan dib u helnay dhowr boqolkiiba. Si aan wakhtiga isaga lumin dib u eegida dhammaan boqollaal su'aalood, waxaanu qornay dhawr qoraal oo fudud kuwaas oo isticmaalay tibaaxo joogto ah si loo helo weydiimo isku nooc ah. Natiijo ahaan, raadinta kooxo su'aalo ah oo toos ah ayaa noo ogolaatay inaan sii wanaajino wax qabadkeena dadaal yar.

Natiijo ahaan, waxaanu ku shaqaynaynay qalab isku mid ah saddex sano hadda. Celceliska culeyska maalinlaha ah wuxuu ku saabsan yahay 30%, marka ugu sarreysa wuxuu gaaraa 70%. Tirada codsiyada, iyo sidoo kale tirada isticmaalayaasha, ayaa kordhay ku dhawaad ​​10 jeer. Waxayna intaas oo dhan ugu mahadcelinayaan la socodka joogtada ah ee kooxahan isku midka ah ee codsiyada TOP-MEDIUM. Isla marka codsi cusub uu ka soo muuqdo kooxda TOP, isla markiiba waanu falanqeyneynaa oo isku daynaa inaan dardargelino. Waxaan dib u eegnaa kooxda MEDIUM todobaadkii hal mar annagoo adeegsanayna qoraallada falanqaynta weydiinta. Haddii aan la kulanno su'aalo cusub oo aan horeyba u naqaannay sida loo hagaajiyo, si dhakhso ah ayaan u beddelnaa. Mararka qaarkood waxaan helnaa habab cusub oo hagaajin ah oo lagu dabaqi karo dhowr su'aalood hal mar.

Marka loo eego saadaashayada, server-ka hadda jira wuxuu u adkeysan doonaa kororka tirada isticmaaleyaasha 3-5 jeer oo kale. Run, waxa aanu haynaa hal gacan oo kale - wali umaanu wareejinin su'aalaha SELECT muraayadda, sida lagu taliyay. Laakiin tan ma samayno si miyir leh, sababtoo ah waxaan rabnaa in aan marka hore si buuxda u daalinno fursadaha "smart" hagaajinta ka hor inta aanad shidin "daafiicda culus".
Fiirinta muhiimka ah ee shaqada la qabtay ayaa laga yaabaa inay soo jeediso isticmaalka miisaan toosan. Iibso server ka xoog badan halkii aad wakhtiga ku lumin lahayd khabiiro. Seerfarku waxa laga yaabaa in aanu kharash intaas le’eg ku kacayn, gaar ahaan maadaama aynaan weli ka daalin xadka cabbiridda toosan. Si kastaba ha ahaatee, kaliya tirada codsiyada ayaa kordhay 10 jeer. Muddo dhowr sano ah, shaqeynta nidaamka ayaa kordhay waxaana hadda jira noocyo badan oo codsiyo ah. Waad ku mahadsan tahay kaydinta, shaqeynta jirtay waxaa lagu fuliyaa codsiyo yar, iyo codsiyo hufan. Tani waxay ka dhigan tahay inaad si badbaado leh ugu dhufan karto 5 kale si aad u hesho isku-darka dardargelinta dhabta ah. Marka, marka loo eego qiyaasaha ugu caansan, waxaan dhihi karnaa in dardargelinta ay ahayd 50 jeer ama ka badan. Lulida tooska ah ee serverka waxay ku kacaysaa 50 jeer ka badan. Gaar ahaan iyada oo la tixgelinayo in marka hagaajinta la sameeyo ay shaqeyso had iyo jeer, iyo biilka server-ka kirada ah ayaa yimaada bil kasta.

Source: www.habr.com

Add a comment