Nyob zoo, habr.
Yog hais tias ib tug neeg exploits lub system
ClickHouse daws cov teeb meem piav qhia tau zoo. Piv txwv li, tom qab hloov 2TiB ntawm cov ntaub ntawv los ntawm ntxhi, lawv haum rau 300GiB. Kuv yuav tsis nyob ntawm qhov kev sib piv hauv kev nthuav dav; muaj ntau cov lus ntawm lub ncauj lus no. Tsis tas li ntawd, txog thaum tsis ntev los no, tsis yog txhua yam zoo tag nrho nrog peb ClickHouse cia.
Teeb meem nrog qhov chaw siv
Thaum xub thawj siab ib muag, txhua yam yuav tsum ua haujlwm zoo. Ua raws retention
), ces tsim ib lub rooj raws li qhov kev pom zoo ntawm cov xaiv backend rau graphite-web:
Yuav kom nkag siab qhov twg, koj yuav tsum paub yuav ua li cas inserts ua hauj lwm thiab lub neej ntxiv txoj kev ntawm cov ntaub ntawv nyob rau hauv cov ntxhuav ntawm cav ntawm * tsev neegMergeTree ClickHouse (cov duab kos los ntawm
- Ntxig
Π±Π»ΠΎΠΊ
cov ntaub ntawv. Hauv peb cov ntaub ntawv, nws yog cov metrics uas tuaj txog.
- Txhua qhov thaiv no raug txheeb raws li tus yuam sij ua ntej sau rau disk.
ORDER BY
teev thaum tsim lub rooj. - Tom qab sorting,
ΠΊΡΡΠΎΠΊ
(part
) cov ntaub ntawv yog sau rau disk.
- Cov neeg rau zaub mov saib xyuas hauv keeb kwm yav dhau kom tsis muaj ntau daim ntawv, thiab tso tawm keeb kwm yav dhau los
ΡΠ»ΠΈΡΠ½ΠΈΡ
(merge
, ntawm no tom qab sib koom ua ke).
- Tus neeg rau zaub mov nres khiav sib koom ua ke ntawm nws tus kheej sai li sai tau thaum cov ntaub ntawv nres nquag ntws mus rau hauv
ΠΏΠ°ΡΡΠΈΡΠΈΡ
(partition
), tab sis koj tuaj yeem pib txheej txheem manually nrog cov lus txibOPTIMIZE
. - Yog tias tsuas muaj ib qho seem hauv qhov muab faib, ces koj yuav tsis tuaj yeem khiav qhov kev sib koom ua ke siv cov lus txib ib txwm; koj yuav tsum siv
OPTIMIZE ... FINAL
Yog li, thawj metrics tuaj txog. Thiab lawv siv qee qhov chaw. Cov xwm txheej tom ntej yuav txawv me ntsis nyob ntawm ntau yam:
- Tus yuam sij muab faib tuaj yeem yog me me (ib hnub) lossis loj heev (ntau lub hlis).
- Cov kev tuav pov hwm yuav haum rau ntau qhov tseem ceeb ntawm cov ntaub ntawv sib sau ua ke hauv qhov kev faib ua haujlwm (qhov ntsuas ntsuas tau kaw), lossis tej zaum tsis yog.
- Yog hais tias muaj ntau cov ntaub ntawv, ces qhov ntxov tshaj plaws chunks, uas yog vim lub keeb kwm yav dhau merging tej zaum yuav loj heev (yog hais tias koj xaiv ib tug uas tsis yog-zoo partitioning yuam sij), yuav tsis ua ke lawv tus kheej nrog tshiab chunks tshiab.
Thiab nws yeej ib txwm xaus tib yam. Qhov chaw nyob los ntawm kev ntsuas hauv ClickHouse tsuas yog nce yog tias:
- tsis thov
OPTIMIZE ... FINAL
manually los yog - tsis txhob ntxig cov ntaub ntawv rau hauv txhua qhov kev faib ua ntu zus, kom sai lossis tom qab kev sib koom ua ke tom qab yuav pib
Txoj kev thib ob zoo li yog qhov yooj yim tshaj plaws los siv thiab, yog li ntawd, nws tsis raug thiab raug sim ua ntej.
Kuv tau sau ib tsab ntawv python yooj yim uas xa cov kev ntsuas dummy rau txhua hnub rau 4 xyoo dhau los thiab khiav cron txhua teev.
Txij li tag nrho cov haujlwm ntawm ClickHouse DBMS yog raws li qhov tseeb tias qhov system no yuav sai dua lossis tom qab ua tag nrho cov haujlwm keeb kwm yav dhau los, tab sis nws tsis paub tias thaum twg, kuv tsis tuaj yeem tos lub sijhawm thaum cov ntawv loj loj qub tau pib ua ke nrog. tshiab me me. Nws tau pom tseeb tias peb yuav tsum nrhiav txoj hauv kev los ua kom muaj kev ua kom zoo dua qub.
Cov ntaub ntawv hauv ClickHouse system tables
Cia peb saib ntawm lub rooj qauv
- db npe (
database
); - lub npe rooj (
table
); - muab faib lub npe thiab ID (
partition
&partition_id
); - thaum cov khoom raug tsim (
modification_time
); - yam tsawg kawg thiab siab kawg hnub nyob rau hauv ib daim (partitioning yog ua los ntawm hnub) (
min_date
&max_date
);
Kuj muaj ib lub rooj
- db npe (
Tables.database
); - lub npe rooj (
Tables.table
); - metric hnub nyoog thaum qhov kev sib sau tom ntej yuav tsum tau siv (
age
);
Yog li ntawd,
- Peb muaj ib lub rooj ntawm chunks thiab ib lub rooj ntawm aggregation txoj cai.
- Peb muab lawv cov kev sib tshuam thiab tau txais tag nrho cov rooj * GraphiteMergeTree.
- Peb tab tom nrhiav rau tag nrho cov partitions uas:
- ntau tshaj ib thooj
- los yog lub sijhawm tau los siv txoj cai sib sau ua ke tom ntej, thiab
modification_time
laus dua lub caij no.
Kev siv
Qhov kev thov no
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
xa rov qab txhua qhov ntawm * GraphiteMergeTree cov lus muab faib uas nws qhov kev sib koom ua ke yuav tsum pub dawb qhov chaw disk. Qhov tsuas tshuav ua yog mus hla lawv tag nrho nrog kev thov OPTIMIZE ... FINAL
. Qhov kawg kev siv kuj yuav siv sij hawm mus rau hauv tus account lub fact tias tsis muaj yuav tsum tau kov partitions nrog active kaw.
Qhov no yog qhov project ua
Yog tias koj khiav qhov kev pab cuam ntawm lub server nrog ClickHouse, nws tsuas yog pib ua haujlwm hauv daemon hom. Ib zaug ib teev ib daim ntawv thov yuav raug muab tua, xyuas seb cov partitions tshiab tshaj peb hnub tau tshwm sim uas tuaj yeem ua kom zoo dua.
Peb cov phiaj xwm tam sim no yog muab tsawg kawg deb pob, thiab yog tias ua tau thiab rpm.
Es tsis txhob ib tug xaus
Tshaj li 9+ lub hlis dhau los kuv tau nyob hauv kuv lub tuam txhab
Ob peb litres ntawm npias thiab admin hnub tau siv los tsim qhov kev thov, ua ke nrog
Tau qhov twg los: www.hab.com