Miarahaba, habr.
Raha misy manararaotra ny rafitra
ClickHouse dia mamaha tsara ireo olana voalaza. Ohatra, aorian'ny famindrana angon-drakitra 2TiB avy amin'ny bitsibitsika dia miditra amin'ny 300GiB izy ireo. Tsy hiresaka amin'ny antsipiriany momba ny fampitahana aho; be dia be ny lahatsoratra momba ity lohahevitra ity. Ankoatra izany, hatramin'ny vao haingana, tsy ny zava-drehetra no tonga lafatra tamin'ny fitahirizana ClickHouse.
Olana amin'ny toerana laniny
Raha vao jerena dia tokony hiasa tsara ny zava-drehetra. FANARAHANA retention
), dia mamorona latabatra araka ny tolo-kevitry ny backend voafantina ho an'ny graphite-web:
Mba hahatakarana hoe iza no tokony ho fantatrao ny fomba fiasan'ny insert sy ny lalan'ny fiainana bebe kokoa amin'ny angon-drakitra ao amin'ny latabatra motera an'ny fianakaviana *MergeTree ClickHouse (sary nalaina avy amin'ny
- nampidirina
Π±Π»ΠΎΠΊ
data. Raha ny anay, dia ny metrika no tonga.
- Ny bloc tsirairay dia alaina araka ny lakile alohan'ny hanoratana azy amin'ny kapila.
ORDER BY
voatondro rehefa mamorona ny latabatra. - Aorian'ny filaharana,
ΠΊΡΡΠΎΠΊ
(part
) ny angona dia voasoratra ao anaty kapila.
- Ny mpizara dia manara-maso ao ambadika mba tsy hisy ampahany toy izany, ary manomboka ny background
ΡΠ»ΠΈΡΠ½ΠΈΡ
(merge
, mitambatra avy eo).
- Mijanona ho azy ny mpizara raha vao mitsahatra mikoriana ao amin'ny
ΠΏΠ°ΡΡΠΈΡΠΈΡ
(partition
), fa azonao atao ny manomboka ny dingana amin'ny alΓ lan'ny baikoOPTIMIZE
. - Raha misy ampahany iray sisa tavela ao amin'ny fizarazarana, dia tsy ho afaka hampandeha ny fampiraisana ianao amin'ny alΓ lan'ny baiko mahazatra; tsy maintsy mampiasa
OPTIMIZE ... FINAL
Noho izany, tonga ny metrika voalohany. Ary maka toerana kely izy ireo. Ny hetsika manaraka dia mety miovaova arakaraka ny anton-javatra maro:
- Ny fanalahidin'ny fisarahana dia mety ho kely dia kely (andro iray) na lehibe be (volana maromaro).
- Ny config fitehirizana dia mety hifanaraka amin'ny tokonam-baravaran'ny angona manan-danja maro ao anatin'ny fizarazarana mavitrika (izay misy metrika voarakitra), na mety tsy.
- Raha be dia be ny angona, dia ny tapany voalohany indrindra, izay noho ny fampifangaroana ambadika dia mety ho efa lehibe (raha misafidy ny fanalahidin'ny fisarahana tsy tsara indrindra ianao), dia tsy hanambatra ny tenany amin'ny ampahany kely vaovao.
Ary mitovy foana ny fiafarany. Ny habaka ipetrahan'ny metrika ao amin'ny ClickHouse dia mitombo ihany raha:
- aza mihatra
OPTIMIZE ... FINAL
tanana na - aza ampidiro ny angona amin'ny fizarazarana rehetra tsy an-kijanona, ka na ho ela na ho haingana dia hanomboka ny fampifangaroana ambadika
Ny fomba faharoa dia toa mora indrindra amin'ny fampiharana ary noho izany dia tsy mety ary nosedraina voalohany.
Nanoratra script python tsotra aho izay nandefa metrika dummy isan'andro nandritra ny 4 taona lasa ary nihazakazaka cron isan'ora.
Koa satria ny fiasan'ny ClickHouse DBMS manontolo dia mifototra amin'ny hoe ity rafitra ity na ho ela na ho haingana dia hanao ny asa rehetra any ambadika, saingy tsy fantatra hoe rahoviana aho, tsy afaka niandry ny fotoana izay nanombohan'ireo sombintsombiny lehibe taloha hanomboka hitambatra miaraka. vaovao kely. Nanjary nazava fa mila mitady fomba hanamarihana ny fanatsarana an-tery izahay.
Fampahalalana ao amin'ny tabilao rafitra ClickHouse
Andeha hojerentsika ny firafitry ny latabatra
- anarana db (
database
); - anarana latabatra (
table
); - anarana partition sy ID (
partition
&partition_id
); - rehefa natao ilay hira (
modification_time
); - Daty farany ambany sy ambony indrindra amin'ny ampahany iray (ny fizarana dia atao isan'andro) (
min_date
&max_date
);
Misy latabatra koa
- anarana db (
Tables.database
); - anarana latabatra (
Tables.table
); - taona metrika rehefa tokony hampiharina ny fitambarana manaraka (
age
);
Noho izany:
- Manana latabatra misy sombiny sy tabilao misy fitsipika fanangonana izahay.
- Manambatra ny fihaonan'izy ireo izahay ary mahazo ny latabatra rehetra *GraphiteMergeTree.
- Mitady partitions rehetra misy:
- mihoatra ny ampahany iray
- na tonga ny fotoana hampiharana ny fitsipika aggregation manaraka, ary
modification_time
antitra noho izao fotoana izao.
fanatanterahana
Ity fangatahana ity
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
mamerina ny tsirairay amin'ireo fisarahana latabatra *GraphiteMergeTree izay tokony hanafaka ny habaka kapila ny fitambarany. Ny hany sisa azo atao dia ny mandalo azy rehetra miaraka amin'ny fangatahana OPTIMIZE ... FINAL
. Ny fampiharana farany ihany koa dia mitana ny zava-misy fa tsy ilaina ny hikasika partitions miaraka amin'ny firaketana mavitrika.
Izany indrindra no ataonβilay tetikasa
Raha mitantana ny programa amin'ny mpizara miaraka amin'ny ClickHouse ianao dia hanomboka hiasa amin'ny fomba daemon fotsiny. Indray mandeha adiny iray dia hotanterahina ny fangatahana iray, manamarina raha misy fizarazarana vaovao efa antitra mihoatra ny telo andro izay azo amboarina.
Ny drafitra avy hatrany dia ny hanome fonosana deb farafaharatsiny, ary raha azo atao koa rpm.
Raha tokony ny famaranana
Nandritra ny 9+ volana lasa izay dia tao anatin'ny orinasako aho
labiera litatra sy andro admin maro no lany tamin'ny famolavolana ny fangatahana, niaraka tamin'ny
Source: www.habr.com