Sawubona, habr.
Uma othile exhaphaza uhlelo
I-ClickHouse ixazulula izinkinga ezichazwe kahle. Isibonelo, ngemuva kokudlulisa u-2TiB wedatha kusuka ekunyenyezeni, angena ku-300GiB. Ngeke ngigxile ekuqhathaniseni ngemininingwane; kunenqwaba yezihloko ngalesi sihloko. Ngaphezu kwalokho, kuze kube muva nje, akuyona yonke into eyayihamba kahle ngesitoreji sethu se-ClickHouse.
Izinkinga ngendawo edliwe
Ekuboneni kokuqala, konke kufanele kusebenze kahle. Ukulandela retention
), bese udala ithebula ngokuya ngesincomo se-backend ekhethiwe ye-graphite-web:
Ukuze uqonde ukuthi iyiphi, udinga ukwazi ukuthi ukufakwa kusebenza kanjani kanye nendlela yokuphila eyengeziwe yedatha kumathebula wezinjini zomndeni *I-MergeTree I-ClickHouse (amashadi athathwe ku
- Kufakiwe
Π±Π»ΠΎΠΊ
idatha. Esimeni sethu, bekungamamethrikhi afikile.
- Ibhulokhi ngayinye enjalo ihlelwa ngokokhiye ngaphambi kokuba ibhalwe kudiski.
ORDER BY
kucaciswe lapho kwakhiwa ithebula. - Ngemva kokuhlunga,
ΠΊΡΡΠΎΠΊ
(part
) idatha ibhalwa kudiski.
- Iseva iqapha ngemuva ukuze kungabikho izingcezu eziningi ezinjalo, futhi ivula ingemuva
ΡΠ»ΠΈΡΠ½ΠΈΡ
(merge
, hlanganisa manje).
- Iseva iyayeka ukuhlanganiswa okusebenzayo ngokwayo ngokushesha nje lapho idatha ima ngokusebenzayo ukungena ku-
ΠΏΠ°ΡΡΠΈΡΠΈΡ
(partition
), kodwa ungaqala inqubo mathupha ngomyaloOPTIMIZE
. - Uma sekusele ucezu olulodwa kuphela ekuhlukaniseni, ngeke ukwazi ukusebenzisa ukuhlanganisa usebenzisa umyalo ojwayelekile; kufanele usebenzise
OPTIMIZE ... FINAL
Ngakho-ke, amamethrikhi okuqala afika. Futhi bathatha indawo ethile. Izehlakalo ezilandelayo zingahluka kuye ngezici eziningi:
- Ukhiye wokuhlukanisa ungaba mncane kakhulu (usuku) noma ube mkhulu kakhulu (izinyanga ezimbalwa).
- Ukulungiselelwa kokugcinwa kungase kulingane nemikhawulo embalwa ebalulekile yokuhlanganisa idatha ngaphakathi kwengxenye esebenzayo (lapho amamethrikhi aqoshwa khona), noma mhlawumbe cha.
- Uma kunedatha eningi, khona-ke izingcezu zakuqala, okungenzeka ngenxa yokuhlanganiswa kwengemuva zingase zibe zinkulu (uma ukhetha ukhiye wokuhlukanisa ongafanelekile), ngeke zizihlanganise nezingcezu ezincane ezintsha.
Futhi igcina ngokufana njalo. Isikhala esihlalwa amamethrikhi ku-ClickHouse sikhuphuka kuphela uma:
- ungasebenzi
OPTIMIZE ... FINAL
ngesandla noma - ungafaki idatha kuwo wonke ama-partitions ngokuqhubekayo, ukuze maduze noma kamuva ukuhlanganisa okungemuva kuqale
Indlela yesibili ibonakala ilula kakhulu ukuyisebenzisa futhi, ngakho-ke, ayilungile futhi yazanywa kuqala.
Ngabhala umbhalo we-python olula othumele amamethrikhi we-dummy nsuku zonke iminyaka engu-4 edlule futhi ngigijima i-cron njalo ngehora.
Njengoba konke ukusebenza kwe-ClickHouse DBMS kusekelwe eqinisweni lokuthi lolu hlelo luzokwenza ngokushesha noma kamuva wonke umsebenzi wangemuva, kodwa akwaziwa ukuthi nini, angikwazanga ukulinda isikhathi lapho izingcezu ezinkulu ezindala ziqala ukuhlangana nazo. ezintsha ezincane. Kwaba sobala ukuthi kwakudingeka sifune indlela yokwenza ukulungiselelwa okuphoqelelwe ngokuzenzakalelayo.
Ulwazi kumathebula esistimu ye-ClickHouse
Ake sibheke isakhiwo setafula
- db igama (
database
); - igama lethebula (
table
); - igama lokuhlukanisa kanye ne-ID (
partition
&partition_id
); - ngenkathi kwakhiwa ucezu (
modification_time
); - ubuncane kanye nedethi ephezulu esiqeshini (ukuhlukaniswa kwenziwa ngosuku) (
min_date
&max_date
);
Kukhona netafula
- db igama (
Tables.database
); - igama lethebula (
Tables.table
); - iminyaka yemethrikhi lapho kufanele kusetshenziswe ukuhlanganisa okulandelayo (
age
);
Ngakho:
- Sinethebula lezinqamu kanye nethebula lemithetho yokuhlanganisa.
- Sihlanganisa ukuhlangana kwabo futhi sithole wonke amatafula *GraphiteMergeTree.
- Sibheka wonke ama-partitions lapho:
- ngaphezu kwesiqephu esisodwa
- noma isikhathi sesifikile sokusebenzisa umthetho wokuhlanganisa olandelayo, futhi
modification_time
mdala kunalesi sikhathi.
Ukuqaliswa
Lesi sicelo
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
ibuyisela ingxenye ngayinye yetafula *GraphiteMergeTree ukuhlanganiswa kwayo okufanele kukhulule isikhala sediski. Okusele okumele ukwenze wukubhekana nazo zonke ngesicelo OPTIMIZE ... FINAL
. Ukuqaliswa kokugcina kuphinde kucabangele iqiniso lokuthi asikho isidingo sokuthinta ama-partitions ngokurekhoda okusebenzayo.
Yilokhu kanye okwenziwa yiphrojekthi
Uma usebenzisa uhlelo kuseva nge-ClickHouse, luzoqala ukusebenza ngemodi ye-daemon. Kanye ngehora umbuzo uzokwenziwa, kubhekwa ukuthi ingabe izingxenye ezintsha ezindala kunezinsuku ezintathu zivele zingathuthukiswa yini.
Izinhlelo zethu ezisheshayo ukuhlinzeka okungenani ngamaphakheji edeb, futhi uma kungenzeka futhi rpm.
Esikhundleni isiphetho
Ezinyangeni ezingu-9+ ezedlule bengingaphakathi kwenkampani yami
Kusetshenziswe amalitha amaningana kabhiya kanye nezinsuku zokuphatha ekuthuthukiseni isicelo, kanye
Source: www.habr.com