Salve, habr.
Si aliquis utitur systema
ClickHouse problemata descripta bene solvit. Exempli gratia, translatis 2TiB notitiarum susurri, aptant in 300GiB. De comparatione singillatim non moror, articulorum in hac re permulta sunt. Praeterea, usque ad recentem, non omnia perfecta sunt cum repositione ClickHouse nostra.
Problematum consumptis spatium
Primo aspectu omnia bene operantur. sequentia retention
) , deinde mensam creare iuxta commendationem delectus backend pro graphite-textu:
Ad quorum unum cognoscendum, debes scire quomodo opus inserendi et vitae ulterioris iter notitiarum in tabulis machinis familiae *.MergeTree ClickHouse (charts ex
- insertum
Π±Π»ΠΎΠΊ
data. In nobis, metrice quod pervenerunt.
- Quisque talis clausus sortitur secundum clavem antequam scriberetur ad disci.
ORDER BY
certa mensa creando. - Post sorting,
ΠΊΡΡΠΎΠΊ
(part
) data scribitur in disco.
- Ministri monitores in curriculo ita ut non multae partes exstent et in background mittat
ΡΠ»ΠΈΡΠ½ΠΈΡ
(merge
infra merge).
- Servus currens cessat migrare in seipsa, quamprimum notitia sistit active influens
ΠΏΠ°ΡΡΠΈΡΠΈΡ
(partition
) , sed processus manually cum imperio potes incipereOPTIMIZE
. - Si una tantum pars in partitione remanet, tunc merge uti consueto mandato currere non poteris, utendum est.
OPTIMIZE ... FINAL
Primae itaque metri venerint. Aliquam et tempus ante. Eventus posteriores aliquantum variari possunt a pluribus causis pendentes;
- Clavis partitio fieri potest vel perexiguus (dies) vel valde magnus (menses complures).
- Retentione config aptare possunt ad limina aggregationis notabilium aliquot notabilium intra partitionem activam (ubi metrici notantur), vel fortasse non.
- Si data est sors, tunc primores chunki, qui ob infuscationem mergi possunt, iam immanes (si clavem partitionem non-optimam eliges), non se cum novis parvis chunkis miscebunt.
Etiam semper finibus ipsum. Spatium metri in ClickHouse occupatum tantum crescit si:
- non applicare
OPTIMIZE ... FINAL
manually or * - notitias in omnes partitiones in fundamento permanenti non inseres, ut citius aut serius in background merge incipiet
Secundus modus videtur esse facillimus ad efficiendum, et ideo est falsa et primo tentata.
Scripsi pythonem satis simplicem, qui metrice phantasma emisit singulis diebus per annos praeteriti 4 et singulis horis cron currebat.
Cum tota operatio de ClickHouse DBMS innitatur eo quod haec ratio citius aut serius omnia opera curriculi faciet, sed ignoratur quando, exspectare non potui tempus cum veteres ingentes partes mergere dignarentur. nova parva. Patuit nos necessitatem quaerere ad viam automatis optimizations coactam.
Informationes in tabulis ClickHouse ratio
Inspice in mensa compages
- db nomine (
database
); - mensa nomen (
table
); - partitio nomen et ID (
partition
&partition_id
); - quando pars creata est (
modification_time
); - minimum et maximum diem in fragmen (partitio fit per diem) (
min_date
&max_date
);
Est etiam mensa
- db nomine (
Tables.database
); - mensa nomen (
Tables.table
); - aetas metrica cum proxime aggregatione applicanda
age
);
sic:
- Habemus mensam chunkarum et mensam aggregationis regulas.
- Intersectionem eorum coniungimus et tabulas omnes *GraphiteMergeTree possidemus.
- Quaerimus omnes partitiones in quibus:
- plus quam una
- vel tempus venerit ut applicatio regulae proximae aggregationis sit, et
modification_time
antiquiorem hoc momento.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
Haec petitio
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
refert singulas tabulas *GraphiteMergeTree partitiones quarum bus in orbis tractus liberare debet. Restat ut per omnia petatur OPTIMIZE ... FINAL
. Postrema exsecutio etiam rationem habet quod saepta cum memoria activa attingere non oportet.
Hoc est quod prorsus project facit
Si progressio servo cum ClickHouse curris, opus in daemone modo incipiet simpliciter. Semel hora petitio exsecutioni mandabitur, num novae partitiones maiores tribus diebus apparuerint quae optimized possunt.
Consilia immediata nostra de fasciculis saltem debijs provideant, et, si fieri potest, etiam rpm.
Sed in finem
Ad preteritum 9+ mensibus fui intus in mea comitatu
Aliquot liters cerevisiae et admin diebus in explicandis precibus absumpti sunt, una cum
Source: www.habr.com