mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-11 18:14:03 +00:00
dbms: style [#METR-10255].
This commit is contained in:
parent
792e5cf3f7
commit
78e9b847e0
@ -48,55 +48,42 @@ namespace DB
|
||||
struct StorageMergeTreeSettings
|
||||
{
|
||||
/// Набор кусков разрешено объединить, если среди них максимальный размер не более чем во столько раз больше суммы остальных.
|
||||
double max_size_ratio_to_merge_parts;
|
||||
double max_size_ratio_to_merge_parts = 5;
|
||||
|
||||
/// Сколько за раз сливать кусков.
|
||||
/// Трудоемкость выбора кусков O(N * max_parts_to_merge_at_once), так что не следует делать это число слишком большим.
|
||||
/// С другой стороны, чтобы слияния точно не могли зайти в тупик, нужно хотя бы
|
||||
/// log(max_rows_to_merge_parts/index_granularity)/log(max_size_ratio_to_merge_parts).
|
||||
size_t max_parts_to_merge_at_once;
|
||||
size_t max_parts_to_merge_at_once = 10;
|
||||
|
||||
/// Куски настолько большого размера в основном потоке объединять нельзя вообще.
|
||||
size_t max_rows_to_merge_parts;
|
||||
size_t max_rows_to_merge_parts = 100 * 1024 * 1024;
|
||||
|
||||
/// Куски настолько большого размера во втором потоке объединять нельзя вообще.
|
||||
size_t max_rows_to_merge_parts_second;
|
||||
size_t max_rows_to_merge_parts_second = 1024 * 1024;
|
||||
|
||||
/// Во столько раз ночью увеличиваем коэффициент.
|
||||
size_t merge_parts_at_night_inc;
|
||||
size_t merge_parts_at_night_inc = 10;
|
||||
|
||||
/// Сколько потоков использовать для объединения кусков.
|
||||
size_t merging_threads;
|
||||
size_t merging_threads = 2;
|
||||
|
||||
/// Если из одного файла читается хотя бы столько строк, чтение можно распараллелить.
|
||||
size_t min_rows_for_concurrent_read;
|
||||
size_t min_rows_for_concurrent_read = 20 * 8192;
|
||||
|
||||
/// Можно пропускать чтение более чем стольки строк ценой одного seek по файлу.
|
||||
size_t min_rows_for_seek;
|
||||
size_t min_rows_for_seek = 5 * 8192;
|
||||
|
||||
/// Если отрезок индекса может содержать нужные ключи, делим его на столько частей и рекурсивно проверяем их.
|
||||
size_t coarse_index_granularity;
|
||||
size_t coarse_index_granularity = 8;
|
||||
|
||||
/** Максимальное количество строк на запрос, для использования кэша разжатых данных. Если запрос большой - кэш не используется.
|
||||
* (Чтобы большие запросы не вымывали кэш.)
|
||||
*/
|
||||
size_t max_rows_to_use_cache;
|
||||
size_t max_rows_to_use_cache = 1024 * 1024;
|
||||
|
||||
/// Через сколько секунд удалять old_куски.
|
||||
time_t old_parts_lifetime;
|
||||
|
||||
StorageMergeTreeSettings() :
|
||||
max_size_ratio_to_merge_parts(5),
|
||||
max_parts_to_merge_at_once(10),
|
||||
max_rows_to_merge_parts(100 * 1024 * 1024),
|
||||
max_rows_to_merge_parts_second(1024 * 1024),
|
||||
merge_parts_at_night_inc(10),
|
||||
merging_threads(2),
|
||||
min_rows_for_concurrent_read(20 * 8192),
|
||||
min_rows_for_seek(5 * 8192),
|
||||
coarse_index_granularity(8),
|
||||
max_rows_to_use_cache(1024 * 1024),
|
||||
old_parts_lifetime(5 * 60) {}
|
||||
time_t old_parts_lifetime = 5 * 60;
|
||||
};
|
||||
|
||||
/// Пара засечек, определяющая диапазон строк в куске. Именно, диапазон имеет вид [begin * index_granularity, end * index_granularity).
|
||||
@ -381,9 +368,9 @@ private:
|
||||
{
|
||||
public:
|
||||
std::vector<DataPartPtr> parts;
|
||||
Poco::FastMutex &data_mutex;
|
||||
Poco::FastMutex & data_mutex;
|
||||
|
||||
CurrentlyMergingPartsTagger(const std::vector<DataPartPtr> & parts_, Poco::FastMutex &data_mutex_) : parts(parts_), data_mutex(data_mutex_)
|
||||
CurrentlyMergingPartsTagger(const std::vector<DataPartPtr> & parts_, Poco::FastMutex & data_mutex_) : parts(parts_), data_mutex(data_mutex_)
|
||||
{
|
||||
/// Здесь не лочится мьютекс, так как конструктор вызывается внутри selectPartsToMerge, где он уже залочен
|
||||
/// Poco::ScopedLock<Poco::FastMutex> lock(data_mutex);
|
||||
@ -393,6 +380,7 @@ private:
|
||||
StorageMergeTree::total_size_of_currently_merging_parts += parts[i]->size_in_bytes;
|
||||
}
|
||||
}
|
||||
|
||||
~CurrentlyMergingPartsTagger()
|
||||
{
|
||||
Poco::ScopedLock<Poco::FastMutex> lock(data_mutex);
|
||||
@ -470,9 +458,9 @@ private:
|
||||
|
||||
/// Сразу помечает их как currently_merging.
|
||||
/// Если merge_anything_for_old_months, для кусков за прошедшие месяцы снимается ограничение на соотношение размеров.
|
||||
bool selectPartsToMerge(Poco::SharedPtr<CurrentlyMergingPartsTagger> &what, bool merge_anything_for_old_months, bool aggressive);
|
||||
bool selectPartsToMerge(Poco::SharedPtr<CurrentlyMergingPartsTagger> & what, bool merge_anything_for_old_months, bool aggressive);
|
||||
|
||||
void mergeParts(Poco::SharedPtr<CurrentlyMergingPartsTagger> &what);
|
||||
void mergeParts(Poco::SharedPtr<CurrentlyMergingPartsTagger> & what);
|
||||
|
||||
/// Дождаться, пока фоновые потоки закончат слияния.
|
||||
void joinMergeThreads();
|
||||
|
@ -839,7 +839,7 @@ void StorageMergeTree::joinMergeThreads()
|
||||
/// 4) Если в одном из потоков идет мердж крупных кусков, то во втором сливать только маленькие кусочки
|
||||
/// 5) С ростом логарифма суммарного размера кусочков в мердже увеличиваем требование сбалансированности
|
||||
|
||||
bool StorageMergeTree::selectPartsToMerge(Poco::SharedPtr<CurrentlyMergingPartsTagger> &what, bool merge_anything_for_old_months, bool aggressive)
|
||||
bool StorageMergeTree::selectPartsToMerge(Poco::SharedPtr<CurrentlyMergingPartsTagger> & what, bool merge_anything_for_old_months, bool aggressive)
|
||||
{
|
||||
LOG_DEBUG(log, "Selecting parts to merge");
|
||||
|
||||
@ -1045,9 +1045,9 @@ bool StorageMergeTree::selectPartsToMerge(Poco::SharedPtr<CurrentlyMergingPartsT
|
||||
|
||||
|
||||
/// parts должны быть отсортированы.
|
||||
void StorageMergeTree::mergeParts(Poco::SharedPtr<CurrentlyMergingPartsTagger> &what)
|
||||
void StorageMergeTree::mergeParts(Poco::SharedPtr<CurrentlyMergingPartsTagger> & what)
|
||||
{
|
||||
const std::vector<DataPartPtr> &parts(what->parts);
|
||||
const std::vector<DataPartPtr> & parts(what->parts);
|
||||
|
||||
LOG_DEBUG(log, "Merging " << parts.size() << " parts: from " << parts.front()->name << " to " << parts.back()->name);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user