dbms: uncompressed cache: better [#CONV-8661].

This commit is contained in:
Alexey Milovidov 2013-09-08 07:30:52 +00:00
parent efae271ae0
commit 97b923fd7b
2 changed files with 20 additions and 1 deletions

View File

@ -68,6 +68,11 @@ struct StorageMergeTreeSettings
/// Если отрезок индекса может содержать нужные ключи, делим его на столько частей и рекурсивно проверяем их.
size_t coarse_index_granularity;
/** Максимальное количество строк на запрос, для использования кэша разжатых данных. Если запрос большой - кэш не используется.
* (Чтобы большие запросы не вымывали кэш.)
*/
size_t max_rows_to_use_cache;
StorageMergeTreeSettings() :
max_size_ratio_to_merge_parts(5),
max_parts_to_merge_at_once(10),
@ -75,7 +80,8 @@ struct StorageMergeTreeSettings
merging_threads(2),
min_rows_for_concurrent_read(20 * 8192),
min_rows_for_seek(5 * 8192),
coarse_index_granularity(8) {}
coarse_index_granularity(8),
max_rows_to_use_cache(1024 * 1024) {}
};
/// Пара засечек, определяющая диапазон строк в куске. Именно, диапазон имеет вид [begin * index_granularity, end * index_granularity).
@ -171,6 +177,7 @@ private:
size_t min_marks_for_seek;
size_t min_marks_for_concurrent_read;
size_t max_marks_to_use_cache;
/// Для схлопывания записей об изменениях, если это требуется.
String sign_column;

View File

@ -74,6 +74,7 @@ StorageMergeTree::StorageMergeTree(
{
min_marks_for_seek = (settings.min_rows_for_seek + index_granularity - 1) / index_granularity;
min_marks_for_concurrent_read = (settings.min_rows_for_concurrent_read + index_granularity - 1) / index_granularity;
max_marks_to_use_cache = (settings.max_rows_to_use_cache + index_granularity - 1) / index_granularity;
/// создаём директорию, если её нет
Poco::File(full_path).createDirectories();
@ -315,6 +316,9 @@ BlockInputStreams StorageMergeTree::spreadMarkRangesAmongThreads(
sum_marks += sum_marks_in_parts[i];
}
if (sum_marks > max_marks_to_use_cache)
use_uncompressed_cache = false;
BlockInputStreams res;
if (sum_marks > 0)
@ -400,6 +404,14 @@ BlockInputStreams StorageMergeTree::spreadMarkRangesAmongThreads(
BlockInputStreams StorageMergeTree::spreadMarkRangesAmongThreadsFinal(
RangesInDataParts parts, size_t threads, const Names & column_names, size_t max_block_size, bool use_uncompressed_cache)
{
size_t sum_marks = 0;
for (size_t i = 0; i < parts.size(); ++i)
for (size_t j = 0; j < parts[i].ranges.size(); ++j)
sum_marks += parts[i].ranges[j].end - parts[i].ranges[j].begin;
if (sum_marks > max_marks_to_use_cache)
use_uncompressed_cache = false;
ExpressionActionsPtr sign_filter_expression;
String sign_filter_column;
createPositiveSignCondition(sign_filter_expression, sign_filter_column);