ClickHouse + Graphite: sida loo yareeyo isticmaalka booska diskka

ClickHouse + Graphite: sida loo yareeyo isticmaalka booska diskka

salaan, habr.

Haddii qof ka faa'iidaysto nidaamka graphite-web waxayna la kulmeen arin wax qabad kaydinta fiiqan (IO, meel disk ah oo la isticmaalo), ka dib fursada in ClickHouse loo tuuray bedel ahaan waa inay noqotaa mid. Bayaankani waxa uu tusinayaa in hirgelinta qolo saddexaad loo isticmaalay sidii daemon helista cabbirada, tusaale ahaan kaarboon qore ama go-kaarboon.

ClickHouse waxay si fiican u xallisaa dhibaatooyinka la tilmaamay. Tusaale ahaan, ka dib marka 2TiB ee xogta laga wareejiyo xiisaha, waxay ku habboon yihiin 300GiB. Si faahfaahsan uga hadli maayo isbarbardhigga; waxaa jira maqaallo badan oo mawduucan ku saabsan. Intaa waxaa dheer, ilaa dhowaan, wax walba kuma qummanayn kaydinta ClickHouse.

Dhibaatooyinka meesha la isticmaalo

Jaleecada hore, wax walba waa inay si fiican u shaqeeyaan. Daba gal dukumentiyo, u samee qaabaynta nidaamka kaydinta mitirka (dheeraad ah retention), ka dibna samee miis waafaqsan talada dhabarka la doortay ee graphite-web: kaarboon-clickhouse+graphite-clickhouse ama garaaf, iyadoo ku xiran xirmada la isticmaalo. Iyo... bamka waqtiga ayaa dhacaya.

Si aad u fahamto midkee, waxaad u baahan tahay inaad ogaatid sida shaqadu u shaqeyso iyo dariiqa nololeed ee dheeriga ah ee xogta miisaska matoorada qoyska *MergeTree ClickHouse (Shaxda laga soo qaatay bandhigyo Alexey Zatelepin):

  • La galiyay Π±Π»ΠΎΠΊ xogta. Xaaladeena, waxay ahayd cabbirada yimid.
    ClickHouse + Graphite: sida loo yareeyo isticmaalka booska diskka
  • Qayb kasta oo noocaas ah waxaa loo kala soocaa si waafaqsan furaha ka hor inta aan lagu qorin saxanka. ORDER BYcayiman marka la abuurayo miiska.
  • Kala soocida ka dib, кусок (part) xogta waxaa lagu qoraa saxan.
    ClickHouse + Graphite: sida loo yareeyo isticmaalka booska diskka
  • Seerfarku waxa uu isha ku hayaa xagga dambe si aanay u badnayn qaybo caynkaas ah, oo waxa uu bilaabaa asalka слияния (merge, aakhiro isku dar).
    ClickHouse + Graphite: sida loo yareeyo isticmaalka booska diskka
    ClickHouse + Graphite: sida loo yareeyo isticmaalka booska diskka
  • Seerfarku wuxuu joojiyaa socodsiinta isku-darka kaligiis isla marka xogtu istaagto inay si firfircoon u qulqulayso ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ (partition), laakiin waxaad ku bilaabi kartaa habka gacanta adoo isticmaalaya amarka OPTIMIZE.
  • Haddii ay jirto hal gabal oo kaliya ayaa ka hadhay qaybta, markaa ma awoodi doontid inaad ku socodsiiso isku-dhafka adoo isticmaalaya amarka caadiga ah; waa inaad isticmaashaa OPTIMIZE ... FINAL

Markaa, cabbirada ugu horreeya ayaa imanaya. Waxayna qaateen meel bannaan. Dhacdooyinka soo socda waxa laga yaabaa inay xoogaa kala duwanaadaan iyadoo ku xidhan arrimo badan:

  • Furaha qaybinta wuxuu noqon karaa mid aad u yar (maalin) ama aad u weyn (dhowr bilood).
  • Qaabaynta haynta waxa laga yaabaa inay ku haboonaato dhowr xad isugeyn xog muhiim ah oo ku dhex jira qaybta firfircoon (halkaas oo cabbirada la duubay), ama laga yaabo inaan.
  • Haddii ay jiraan xog badan, markaa cutubyada ugu horreeya, taas oo ay ugu wacan tahay isku-dhafka asalka ah ayaa laga yaabaa inay hore u weynaadaan (haddii aad doorato furaha qaybinta aan fiicnayn), iskuma biirin doonaan qaybo yaryar oo cusub.

Waxayna had iyo jeer ku dhammaanaysaa si isku mid ah. Meesha ay ku jiraan mitirka ee ClickHouse kaliya way kordhisaa haddii:

  • ha codsan OPTIMIZE ... FINAL gacanta ama
  • Ha gelin xogta dhammaan qaybaha si joogto ah, si ay mar dhow ama hadhow u bilaabato isku-darka asalka

Habka labaad wuxuu u muuqdaa inuu yahay kan ugu fudud ee la hirgeliyo, sidaas darteed, maahan mid sax ah oo markii hore la isku dayay.
Waxaan qoray qoraal si fudud oo fudud u diraya qiyaasaha mitirka maalin kasta 4tii sano ee la soo dhaafay oo orday cron saacad kasta.
Tan iyo markii hawlgalka oo dhan ee ClickHouse DBMS ku salaysan yahay xaqiiqada ah in nidaamka this si degdeg ah ama ka dib samayn doonaa dhammaan shaqada asalka ah, laakiin lama oga goorta, Ma aan awoodin in ay sugaan xilligan marka qaybo waaweyn ee jir ah deign si ay u bilaabaan la midoobi la. kuwa yaryar oo cusub. Waxaa caddaatay inaan u baahannahay inaan raadinno hab aan si otomaatig ah ugu hagaajinno awoodda.

ClickHouse + Graphite: sida loo yareeyo isticmaalka booska diskka

Macluumaadka ku jira miisaska nidaamka ClickHouse

Aan eegno qaabka miiska nidaamka.qaybaha. Tani waa macluumaad dhamaystiran oo ku saabsan qayb kasta oo ka mid ah dhammaan miisaska server-ka ClickHouse. Waxa ku jira, waxyaabo kale, tiirarka soo socda:

  • db magac (database);
  • magaca miiska (table);
  • Magaca qaybinta iyo aqoonsiga (partition & partition_id);
  • marka gabal la sameeyay (modification_time);
  • taariikhda ugu yar iyo tan ugu badan ee gabal (qaybinta waxaa la sameeyaa maalin) (min_date & max_date);

Waxa kale oo jira miis nidaamka.graphite_retentions, oo leh qaybaha soo socda ee xiisaha leh:

  • db magac (Tables.database);
  • magaca miiska (Tables.table);
  • metric da'da marka iskudarka xiga waa in lagu dabaqoage);

Sidaas awgeed:

  1. Waxaan haynaa shax jajab ah iyo shax xeerar isku-dar ah.
  2. Waxaan isku darnaa isgoyskooda waxaana helnaa miisaska oo dhan *GraphiteMergeTree.
  3. Waxaan raadineynaa dhammaan qaybaha kuwaas oo:
    • in ka badan hal gabal
    • ama waxaa la gaaray waqtigii lagu dabaqi lahaa xeerka isku darka ee soo socda, iyo modification_time ka weyn xilligan.

РСализация

Codsigan

SELECT
    concat(p.database, '.', p.table) AS table,
    p.partition_id AS partition_id,
    p.partition AS partition,
    -- Π‘Π°ΠΌΠΎΠ΅ "староС" ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ для
    -- ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, см (*)
    max(g.age) AS age,
    -- ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ кусков Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ
    countDistinct(p.name) AS parts,
    -- Π—Π° ΡΠ°ΠΌΡƒΡŽ ΡΡ‚Π°Ρ€ΡˆΡƒΡŽ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ принимаСтся 00:00:00 ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ дня
    toDateTime(max(p.max_date + 1)) AS max_time,
    -- Когда партиция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°
    max_time + age AS rollup_time,
    -- Когда самый старый кусок Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π±Ρ‹Π» ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½
    min(p.modification_time) AS modified_at
FROM system.parts AS p
INNER JOIN
(
    -- ВсС ΠΏΡ€Π°Π²ΠΈΠ»Π° для всСх Ρ‚Π°Π±Π»ΠΈΡ† *GraphiteMergeTree
    SELECT
        Tables.database AS database,
        Tables.table AS table,
        age
    FROM system.graphite_retentions
    ARRAY JOIN Tables
    GROUP BY
        database,
        table,
        age
) AS g ON
    (p.table = g.table)
    AND (p.database = g.database)
WHERE
    -- Волько Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ куски
    p.active
    -- (*) И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки, Π³Π΄Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π°Π³Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹
    AND ((toDateTime(p.max_date + 1) + g.age) < now())
GROUP BY
    table,
    partition
HAVING
    -- Волько ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ младшС ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
    (modified_at < rollup_time)
    -- Или с нСсколькими кусками
    OR (parts > 1)
ORDER BY
    table ASC,
    partition ASC,
    age ASC

waxay soo celisaa mid kasta oo ka mid ah qaybaha miiska * GraphiteMergeTree kuwaas oo isku darka ay xoraynayso booska diskka. Waxa kaliya ee hadhay in la sameeyo waa in la marsiiyo dhamaantood codsi OPTIMIZE ... FINAL. Hirgelinta kama dambaysta ah waxay sidoo kale tixgelinaysaa xaqiiqda ah in aan loo baahnayn in la taabto qaybo leh duubitaan firfircoon.

Tani waa sida uu mashruucu qabanayo graphite-ch-optimizer. Asxaabtii hore ee Yandex.Market waxay isku dayeen wax soo saarka, natiijada shaqada ayaa hoos lagu arki karaa.

ClickHouse + Graphite: sida loo yareeyo isticmaalka booska diskka

Haddii aad barnaamijka ku maamusho server leh ClickHouse, waxay si fudud u bilaabi doontaa in ay ku shaqeyso qaabka daemon. Hal saac ayaa codsiga la fulin doonaa, iyadoo la hubinayo in qaybo cusub oo ka weyn saddex maalmood ay soo baxeen kuwaas oo la hagaajin karo.

Qorshayaashayada dhow waa inaan bixino ugu yaraan baakadaha deynta, iyo haddii ay suurtagal tahay sidoo kale rpm.

Halkii gabagabo

9+ bilood ee la soo dhaafay waxaan ku jiray gudaha shirkadayda innogames waqti badan ku qaatay isgoysyada ClickHouse iyo graphite-web. Waxay ahayd waayo-aragnimo wanaagsan, taas oo keentay isbeddel degdeg ah oo laga bilaabo sheekeysiga ilaa ClickHouse sida kaydinta cabbirka. Waxaan rajeynayaa in maqaalkani yahay wax ka mid ah bilawga taxane ah oo ku saabsan wixii horumar ah ee aan ku samaynay qaybaha kala duwan ee xirmadan, iyo waxa la qaban doono mustaqbalka.

Dhowr litir oo biir ah iyo maalmo maamulka ayaa lagu qaatay horumarinta codsiga, oo ay la socdaan v0 shaydaan, taas oo aan rabo in aan ku muujiyo mahadnaqa aan u hayo. Iyo sidoo kale dib u eegista maqaalkan.

Bogga mashruuca ee github

Source: www.habr.com

Add a comment