Aloha mai, habr.
Inā hoʻohana kekahi i ka ʻōnaehana
Hoʻoponopono maikaʻi ʻo ClickHouse i nā pilikia i wehewehe ʻia. No ka laʻana, ma hope o ka hoʻoili ʻana i 2TiB o ka ʻikepili mai ka hāwanawana, kūpono lākou i 300GiB. ʻAʻole wau e noʻonoʻo i ka hoʻohālikelike i nā kikoʻī; nui nā ʻatikala e pili ana i kēia kumuhana. Eia hou, a hiki i kēia manawa,ʻaʻole i kūpono nā mea a pau me kā mākou ClickHouse waihona.
Nā pilikia me ka nui o ka wahi
I ka nānā muaʻana, pono e hana maikaʻi nā mea a pau. Ke hahai nei retention
), a laila e hana i papa e like me ka ʻōlelo aʻoaʻo o ka hope i koho ʻia no ka graphite-web:
I mea e hoʻomaopopo ai i ka mea, pono ʻoe e ʻike pehea e hana ai nā mea hoʻokomo a me ke ala ola hou o ka ʻikepili i nā papa o nā mīkini o ka ʻohana *MergeTree ClickHouse (nā palapala i lawe ʻia mai
- Hoʻokomo ʻia
блок
ʻikepili. I kā mākou hihia, ʻo ia nā metric i hiki mai.
- Hoʻokaʻawale ʻia kēlā me kēia poloka e like me ke kī ma mua o ka kākau ʻana i ka disk.
ORDER BY
i kuhikuhi ʻia i ka hana ʻana i ka papaʻaina. - Ma hope o ka hoʻokaʻawale ʻana,
кусок
(part
) ua kākau ʻia ka ʻikepili i ka disk.
- Mālama ke kikowaena i ke kua i ʻole he nui o ia mau ʻāpana, a hoʻomaka i ka hope
слияния
(merge
, hoʻohui ʻia ma kēia hope aku).
- Ho'ōki ka server i ka holo ʻana i ka hui ʻana iā ia iho ke pau ka ʻikepili i ka kahe ikaika ʻana i ka
партицию
(partition
), akā hiki iā ʻoe ke hoʻomaka i ke kaʻina hana me ke kauohaOPTIMIZE
. - Inā hoʻokahi wale nō ʻāpana i koe i ka pā, a laila ʻaʻole hiki iā ʻoe ke holo i ka hui me ka hoʻohana ʻana i ke kauoha maʻamau; pono ʻoe e hoʻohana.
OPTIMIZE ... FINAL
No laila, hiki mai nā metric mua. A lawe lākou i kahi wahi. Hiki i nā hanana hope ke ʻano like ʻole ma muli o nā kumu he nui:
- Hiki ke liʻiliʻi loa ke kī hoʻokaʻawale (he lā) a i ʻole ka nui loa (he mau mahina).
- Hiki ke hoʻopili ʻia ka hoʻonohonoho hoʻopaʻa ʻana i kekahi mau paepae hōʻuluʻulu ʻikepili koʻikoʻi i loko o ka ʻāpana hana (kahi i hoʻopaʻa ʻia nā ana), a ʻaʻole paha.
- Inā nui ka ʻikepili, a laila ʻoi aku ka nui o nā puʻupuʻu mua loa, ma muli o ka hoʻohui ʻana i hope (inā ʻoe e koho i kahi kī hoʻokaʻawale kūpono ʻole), ʻaʻole e hoʻohui iā lākou iho me nā ʻāpana liʻiliʻi hou.
A like ka hopena mau. Hoʻonui wale ʻia ka wahi i noho ʻia e nā metric ma ClickHouse inā:
- mai noi
OPTIMIZE ... FINAL
ma ka lima a i ʻole - mai hoʻokomo i ka ʻikepili i loko o nā ʻāpana āpau i ka manawa mau, i mea e hoʻomaka ai kahi hui hope
ʻO ke ala ʻelua ka mea maʻalahi loa e hoʻokō a no laila, ʻaʻole pololei a hoʻāʻo mua ʻia.
Ua kākau wau i kahi palapala python maʻalahi i hoʻouna i nā metric dummy no kēlā me kēia lā no nā makahiki 4 i hala iho nei a holo cron i kēlā me kēia hola.
No ka mea, ua hoʻokumu ʻia ka hana holoʻokoʻa o ClickHouse DBMS ma ka ʻoiaʻiʻo e hana koke kēia ʻōnaehana i nā hana hope a pau, akā ʻaʻole ʻike ʻia i ka manawa, ʻaʻole hiki iaʻu ke kali no ka manawa e hoʻomaka ai nā ʻāpana nui kahiko e hoʻomaka e hui pū me. nā mea liʻiliʻi hou. Ua ʻike ʻia he pono mākou e ʻimi i kahi ala e hoʻomaʻamaʻa ai i ka hoʻoikaika ʻana.
ʻIke ma nā papa ʻōnaehana ClickHouse
E nānā kākou i ke ʻano o ka papaʻaina
- db inoa (
database
); - inoa papa (
table
); - inoa ʻāpana a me ID (
partition
&partition_id
); - i ka wā i hana ʻia ai ka ʻāpana (
modification_time
); - ka lā palena iki a me ka lā kiʻekiʻe loa ma kahi ʻāpana (hana ʻia ka hoʻokaʻawale ʻana i ka lā) (
min_date
&max_date
);
Aia kekahi papaʻaina
- db inoa (
Tables.database
); - inoa papa (
Tables.table
); - makahiki metric ke hoʻohana ʻia ka hōʻuluʻulu aʻe (
age
);
No laila:
- Loaʻa iā mākou kahi papa o nā ʻāpana a me kahi papa o nā lula hoʻohui.
- Hoʻohui mākou i kā lākou intersection a loaʻa nā papa ʻaina a pau *GraphiteMergeTree.
- Ke ʻimi nei mākou i nā ʻāpana āpau kahi:
- ʻoi aku ma mua o hoʻokahi ʻāpana
- a i ʻole ua hiki mai ka manawa e hoʻopili ai i ka lula hōʻuluʻulu aʻe, a
modification_time
oi aku mamua o keia manawa.
Ka hoʻokō
ʻO kēia noi
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
hoʻihoʻi i kēlā me kēia o nā ʻāpana pākaukau *GraphiteMergeTree nona ka hui ʻana e hoʻokuʻu i ka hakahaka disk. ʻO ka mea wale nō i koe e hana ai, ʻo ia ke hele ma waena o lākou a pau me kahi noi OPTIMIZE ... FINAL
. ʻO ka hoʻokō hope loa e noʻonoʻo i ka ʻoiaʻiʻo ʻaʻole pono e hoʻopā i nā ʻāpana me ka hoʻopaʻa hoʻopaʻa ʻana.
ʻO kēia ka hana a ka papahana
Inā holo ʻoe i ka papahana ma kahi kikowaena me ClickHouse, e hoʻomaka wale ia e hana ma ke ʻano daemon. Hoʻokahi hola e hoʻokō ʻia kahi noi, e nānā inā ua ʻike ʻia nā ʻāpana hou i ʻoi aku ma mua o ʻekolu mau lā i hiki ke hoʻonui ʻia.
ʻO kā mākou hoʻolālā koke e hāʻawi i nā pūʻolo deb liʻiliʻi, a inā hiki ke hiki pū kekahi rpm.
Ma kahi o ka hopena
I nā mahina he 9+ i hala iho nei, ua komo au i loko o kaʻu hui
Ua hoʻohana ʻia kekahi mau lita o ka pia a me nā lā admin no ka hoʻomohala ʻana i ka noi, me
Source: www.habr.com