Na-ebuli ajụjụ nchekwa data na-eji ihe atụ nke ọrụ B2B maka ndị na-ewu ụlọ

Otu esi eto 10 ugboro ọnụọgụ ajụjụ na nchekwa data na-enweghị ịkwaga na ihe nkesa na-arụpụta ihe ma nọgide na-arụ ọrụ usoro? M ga-agwa gị otu anyị siri mesoo mbelata arụmọrụ nke nchekwa data anyị, otu anyị siri hazie ajụjụ SQL iji jeere ọtụtụ ndị ọrụ ozi dịka o kwere mee ma ghara ịbawanye ọnụ ahịa akụrụngwa.

M na-arụ ọrụ maka ijikwa usoro azụmahịa na ụlọ ọrụ ihe owuwu. Ihe dị ka puku ụlọ ọrụ 3 na-arụ ọrụ na anyị. Ihe karịrị puku mmadụ 10 na-arụ ọrụ na sistemụ anyị kwa ụbọchị maka awa 4-10. Ọ na-edozi nsogbu dị iche iche nke atụmatụ, ngosi, ịdọ aka ná ntị, nkwado ... Anyị na-eji PostgreSQL 9.6. Anyị nwere ihe dị ka tebụl 300 na nchekwa data na ihe ruru nde 200 (10 puku dị iche iche) na-enweta kwa ụbọchị. Ná nkezi, anyị nwere 3-4 puku arịrịọ kwa sekọnd, n'oge kacha arụ ọrụ karịa 10 puku arịrịọ kwa sekọnd. Ọtụtụ n'ime ajụjụ ndị a bụ OLAP. Enwere mgbakwunye dị ntakịrị karịa, mgbanwe na nhichapụ, nke pụtara na ibu OLTP dị obere. Enyere m nọmba ndị a niile ka ị nwee ike nyochaa oke ọrụ anyị wee ghọta otú ahụmịhe anyị nwere ike isi baara gị uru.

Foto nke mbụ. Egwu

Mgbe anyị malitere mmepe, anyị echeghị echiche banyere ụdị ibu ga-adaba na nchekwa data na ihe anyị ga-eme ma ọ bụrụ na ihe nkesa ahụ kwụsịrị ịdọrọ. Mgbe ị na-emepụta nchekwa data ahụ, anyị gbasoro ndụmọdụ n'ozuzu ma gbalịa ka anyị ghara ịgba onwe anyị n'ụkwụ, ma gafere ndụmọdụ izugbe dịka "ejila ụkpụrụ ahụ. Njirimara Njirimara anyị abanyeghị. Anyị haziri dabere na ụkpụrụ nke normalization, na-ezere data redundancy na-echeghị banyere ọsọ ọsọ ụfọdụ ajụjụ. Ozugbo ndị ọrụ mbụ rutere, anyị zutere nsogbu arụmọrụ. Dị ka ọ dị na mbụ, anyị adịchaghị njikere maka nke a. Nsogbu ndị mbụ bịara dị mfe. Dị ka a na-achị, a na-edozi ihe niile site n'ịgbakwunye ndepụta ọhụrụ. Mana enwere oge mgbe patches dị mfe kwụsịrị ịrụ ọrụ. N'ịghọta na anyị enweghị ahụmahụ na ọ na-esiwanye ike ka anyị ghọta ihe na-akpata nsogbu ahụ, anyị goro ndị ọkachamara nyere anyị aka ịtọ nkesa nke ọma, jikọọ nlekota, ma gosi anyị ebe anyị ga-ele anya iji nweta. ọnụ ọgụgụ.

Foto nke abụọ. Statistics

Yabụ na anyị nwere ihe dị ka puku ajụjụ 10 dị iche iche a na-eme na nchekwa data anyị kwa ụbọchị. N'ime puku 10 ndị a, enwere nnukwu anụ na-egbu 2-3 nde ugboro na nkezi oge igbu oge nke 0.1-0.3 ms, yana enwere ajụjụ nwere oge igbu oge nke 30 sekọnd nke a na-akpọ 100 ugboro n'ụbọchị.

Ọ gaghị ekwe omume ịkwalite ajụjụ 10 puku niile, ya mere, anyị kpebiri ịchọta ebe anyị ga-eduzi mgbalị anyị iji mee ka arụmọrụ nke nchekwa data dịkwuo mma. Mgbe ọtụtụ ugboro ugboro, anyị malitere ikesa arịrịọ n'ime ụdị.

Arịrịọ kacha

Ndị a bụ ajụjụ kacha sie ike na-ewe oge (ngụkọta oge). Ndị a bụ ajụjụ ndị a na-akpọkarị ma ọ bụ ajụjụ ndị na-ewe ogologo oge iji gbuo (a na-ahazi ajụjụ ogologo na ugboro ugboro na mbụ iterations nke ọgụ maka ọsọ). N'ihi ya, ihe nkesa na-etinye oge kachasị na igbu ha. Ọzọkwa, ọ dị mkpa ikewapụ arịrịọ kachasị elu site na ngụkọta oge igbu oge yana iche site na oge IO. Ụzọ maka ịkwalite ajụjụ ndị dị otú ahụ dịtụ iche.

Omume ụlọ ọrụ niile na-emebu bụ iji arịrịọ TOP rụọ ọrụ. Enwere ole na ole n'ime ha; ịkwalite ọbụlagodi otu ajụjụ nwere ike ịtọhapụ 5-10% nke akụrụngwa. Agbanyeghị, ka ọrụ ahụ na-etolite, ịkachasị ajụjụ TOP na-aghọwanye ọrụ na-adịchaghị mkpa. A rụpụtalarị ụzọ niile dị mfe, yana arịrịọ “dị arọ” na-ewe “naanị” 3-5% nke akụrụngwa. Ọ bụrụ na ajụjụ TOP na mkpokọta na-ewe ihe na-erughị 30-40% nke oge, mgbe ahụ ọ ga-abụ na i meela mgbalị iji mee ka ha rụọ ọrụ ngwa ngwa na oge eruola ịga n'ihu na-ebuli ajụjụ sitere na otu na-esote.
Ọ ka dị ka ịza ajụjụ ole ajụjụ kachasị elu kwesịrị ịgụnye n'ime otu a. M na-ewerekarị ma ọ dịkarịa ala 10, ma ọ bụghị ihe karịrị 20. M na-agbalị ịhụ na oge nke mbụ na nke ikpeazụ na TOP otu dị iche site na ọ bụghị ihe karịrị 10 ugboro. Nke ahụ bụ, ọ bụrụ na oge mmezu ajụjụ ahụ dara nke ọma site na 1st ruo 10th, mgbe ahụ, m na-ewere TOP-10, ma ọ bụrụ na ọdịda ahụ na-eji nwayọọ nwayọọ na-abawanye, m na-abawanye nha otu ahụ na 15 ma ọ bụ 20.
Na-ebuli ajụjụ nchekwa data na-eji ihe atụ nke ọrụ B2B maka ndị na-ewu ụlọ

Ndị ọrụ ugbo etiti

Ndị a bụ arịrịọ niile na-abịa ozugbo TOP gachara, ewezuga 5-10% ikpeazụ. Ọtụtụ mgbe, n'ịkwalite ajụjụ ndị a bụ ohere ịbawanye arụmọrụ nkesa. Arịrịọ ndị a nwere ike iru 80%. Ma ọbụlagodi na òkè ha agafeela 50%, mgbe ahụ ọ bụ oge iji lebakwuo ha anya nke ọma.

Ọdụdụ

Dịka ekwuru, ajụjụ ndị a na-abịa na njedebe wee were 5-10% nke oge. Ị nwere ike ichefu banyere ha naanị ma ọ bụrụ na ị naghị eji ngwaọrụ nyocha ajụjụ akpaka, mgbe ahụ ịkwalite ha nwekwara ike ịdị ọnụ ala.

Otu esi enyocha otu ọ bụla?

M na-eji ajụjụ SQL nke na-enyere aka mee nyocha dị otú ahụ maka PostgreSQL (Eji m n'aka na enwere ike dee ajụjụ yiri ya maka ọtụtụ DBMS ndị ọzọ)

Ajụjụ SQL iji tụọ nha otu 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

Nsonaazụ nke ajụjụ a bụ kọlụm atọ, nke ọ bụla n'ime ha nwere pasentị oge ọ na-ewe iji hazie ajụjụ sitere na otu a. N'ime arịrịọ ahụ enwere ọnụọgụ abụọ (n'ọnọdụ m ọ bụ 20 na 800) na-ekewa arịrịọ sitere n'otu ìgwè na nke ọzọ.

Nke a bụ ka oke nke arịrịọ si atụnyere n'oge ọrụ njikarịcha malitere na ugbu a.

Na-ebuli ajụjụ nchekwa data na-eji ihe atụ nke ọrụ B2B maka ndị na-ewu ụlọ

Eserese ahụ na-egosi na òkè nke arịrịọ TOP ebelatala nke ukwuu, mana "ndị ọrụ ugbo etiti" abawanyela.
Na mbụ, arịrịọ TOP gụnyere mmejọ pụtara ìhè. Ka oge na-aga, ọrịa ụmụaka na-apụ n'anya, òkè nke arịrịọ TOP na-ebelata, a ghaghị imekwu mgbalị iji mee ka arịrịọ ndị siri ike dị ngwa ngwa.

Iji nweta ederede arịrịọ anyị na-eji arịrịọ a

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

Nke a bụ ndepụta nke usoro a na-ejikarị eme ihe nyeere anyị aka ime ka ajụjụ TOP dị ngwa ngwa:

  • Nhazigharị nke sistemu ahụ, dịka ọmụmaatụ, iji onye na-ere ahịa ozi na-arụgharị mgbanaka ngosi kama ịjụ ajụjụ oge na nchekwa data.
  • Na-agbakwụnye ma ọ bụ na-agbanwe index
  • Na-edegharị ajụjụ ORM ka ọ bụrụ SQL dị ọcha
  • Na-edegharị mgbagha ntinye data umengwụ
  • Na-echekwa site na deormalization data. Ọmụmaatụ, anyị nwere njikọ tebụl Nnyefe -> akwụkwọ ọnụahịa -> Arịrịọ -> Ngwa. Ya bụ, a na-ejikọta nnyefe ọ bụla na ngwa site na tebụl ndị ọzọ. Ka ị ghara ijikọ tebụl niile na arịrịọ ọ bụla, anyị megharịrị njikọ ahụ na arịrịọ dị na tebụl nnyefe.
  • Na-echekwa tebụl static na akwụkwọ ntụaka na tebụl anaghị agbanwe agbanwe na ebe nchekwa mmemme.

Mgbe ụfọdụ mgbanwe ndị ahụ na-emezigharị ihe dị egwu, mana ha nyere 5-10% nke ibu sistemu ma bụrụ ndị ezi omume. Ka oge na-aga, ikpochapụ ahụ bịara na-adị ntakịrị ma na-adịwanye ntakịrị, a chọkwara imezigharị nke ọma karị.

Mgbe ahụ, anyị tụgharịrị uche anyị gaa n'òtù nke abụọ nke arịrịọ - otu ndị nkịtị n'etiti. Enwere ọtụtụ ajụjụ ndị ọzọ na ya ma ọ dị ka ọ ga-ewe ogologo oge iji nyochaa otu ahụ dum. Otú ọ dị, ọtụtụ ajụjụ tụgharịrị dị nnọọ mfe iji kwalite, na ọtụtụ nsogbu na-emegharị ọtụtụ ugboro ugboro dị iche iche. Nke a bụ ihe atụ nke ụfọdụ ụdị njikarịcha nke anyị tinyere n'ọtụtụ ajụjụ ndị yiri ya yana otu ajụjụ kachasị mma wepụrụ nchekwa data site na 3-5%.

  • Kama ịlele ọnụnọ ndekọ site na iji COUNT na nyocha tebụl zuru ezu, EXISTS malitere iji
  • Wepụ DISTINCT (enweghị usoro nhazi n'ozuzu, mana mgbe ụfọdụ ị nwere ike iwepụ ya ngwa ngwa site na ime ngwa ngwa ngwa ngwa site na 10-100 ugboro).

    Dịka ọmụmaatụ, kama ajụjụ ịhọrọ ndị ọkwọ ụgbọ ala niile site na nnukwu tebụl mbufe (NKWUKWU)

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

    jụrụ ajụjụ n'obere tebụl mmadụ

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

    Ọ ga-adị ka anyị jiri subquery jikọrọ ọnụ, mana ọ na-enye ọsọ ọsọ karịa ugboro 10.

  • N'ọtụtụ ọnọdụ, COUNT gbahapụrụ kpamkpam yana
    dochie ya na ngụkọta oge uru
  • kama nke
    UPPER(s) LIKE JOHN%’ 
    

    jiri

    s ILIKE “John%”
    

Arịrịọ ọ bụla akọwapụtara na-eme ngwa ngwa site na ugboro 3-1000. N'agbanyeghị arụmọrụ dị egwu, na mbụ ọ dị anyị ka ọ nweghị uru ịwelite ajụjụ na-ewe 10 ms iji wuchaa, bụ otu n'ime ajụjụ narị atọ kachasị njọ, ma na-ewe otu narị pasent nke oge nchekwa data zuru ezu. Mana site n'itinye otu uzommeputa ahụ na otu ajụjụ nke otu ụdị ahụ, anyị meriri azụ pasent ole na ole. Ka ị ghara igbu oge iji aka na-enyocha ọtụtụ narị ajụjụ niile, anyị dere ọtụtụ edemede dị mfe nke na-eji okwu mgbe niile chọta ajụjụ nke otu ụdị. N'ihi ya, otu ajụjụ nyocha na-akpaghị aka nyere anyị ohere iji obere mbọ mee ka arụmọrụ anyị dịkwuo mma.

N'ihi ya, anyị na-arụ ọrụ na otu ngwaike afọ atọ ugbu a. Nkezi ibu kwa ụbọchị bụ ihe dịka 30%, na elu ọ na-eru 70%. Ọnụọgụ arịrịọ, yana ọnụ ọgụgụ ndị ọrụ, amụbaala ihe dị ka ugboro iri. Na ihe a niile na-ekele maka nlekota mgbe niile nke otu ndị a nke arịrịọ TOP-MEDIUM. Ozugbo arịrịọ ọhụrụ pụtara na otu TOP, anyị na-enyocha ya ozugbo ma gbalịa ime ngwa ngwa. Anyị na-enyocha otu MEDIUM otu ugboro n'izu site na iji edemede nyocha ajụjụ. Ọ bụrụ na anyị enweta ajụjụ ọhụrụ ndị anyị maralarị ka esi ebuli, anyị na-agbanwe ha ngwa ngwa. Mgbe ụfọdụ, anyị na-ahụ ụzọ kachasị ọhụrụ nke enwere ike itinye n'ọrụ n'ọtụtụ ajụjụ n'otu oge.

Dị ka amụma anyị si kwuo, ihe nkesa dị ugbu a ga-anagide mmụba nke ọnụ ọgụgụ ndị ọrụ site na ugboro 3-5 ọzọ. N'ezie, anyị nwere otu ace elu aka anyị - anyị ka ebufebeghị ajụjụ SELECT na enyo, dịka akwadoro. Ma anyị anaghị eme nke a nke ọma, n'ihi na anyị chọrọ ibu ụzọ kpochapụ ohere nke "smart" njikarịcha tupu ịgbanye "ọgbọ agha dị arọ".
Nleba anya n'ọrụ a rụrụ nwere ike ịtụ aro iji nha nha kwụ ọtọ. Zụta ihe nkesa dị ike kama ịla oge nke ndị ọkachamara. Ihe nkesa ahụ nwere ike ọ gaghị efu nke ahụ, karịsịa ebe ọ bụ na anyị agwụchabeghị oke nke ịgbatị kwụ ọtọ. Agbanyeghị, naanị ọnụ ọgụgụ nke arịrịọ mụbara ugboro 10. N'ime ọtụtụ afọ, ọrụ nke usoro ahụ abawanyela ma ugbu a enwere ụdị arịrịọ ndị ọzọ. Ọrụ dị adị bụ, n'ihi caching, a na-eme ya na arịrịọ ole na ole, yana kwa na arịrịọ dị mma karịa. Nke a pụtara na ị nwere ike mụbaa n'enweghị nsogbu site na 5 ọzọ iji nweta ọnụọgụ ngwangwa n'ezie. Ya mere, dị ka atụmatụ ndị kasị agbanwe agbanwe, anyị nwere ike ikwu na osooso bụ 50 ugboro ma ọ bụ karịa. Ịfegharị sava kwụ ọtọ ga-eri okpukpu iri ise karịa. Karịsịa na-atụle na ozugbo a na-arụ ọrụ kachasị mma ọ na-arụ ọrụ mgbe niile, na ụgwọ maka ihe nkesa mgbazinye na-abịa kwa ọnwa.

isi: www.habr.com

Tinye a comment