From 2f36c9e965b01ca68a795499bfbdbec020c47609 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Fri, 16 Feb 2024 00:56:24 +0100 Subject: [PATCH 1/2] Maybe less memory usage for primary keys in memory --- src/Storages/MergeTree/IMergeTreeDataPart.cpp | 1 + src/Storages/MergeTree/IMergeTreeDataPart.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Storages/MergeTree/IMergeTreeDataPart.cpp b/src/Storages/MergeTree/IMergeTreeDataPart.cpp index 0f82e00edff3..9e264cba3f86 100644 --- a/src/Storages/MergeTree/IMergeTreeDataPart.cpp +++ b/src/Storages/MergeTree/IMergeTreeDataPart.cpp @@ -842,6 +842,7 @@ void IMergeTreeDataPart::loadIndex() for (size_t i = 0; i < key_size; ++i) { + loaded_index[i]->shrinkToFit(); loaded_index[i]->protect(); if (loaded_index[i]->size() != marks_count) throw Exception(ErrorCodes::CANNOT_READ_ALL_DATA, "Cannot read all data from index file {}(expected size: " diff --git a/src/Storages/MergeTree/IMergeTreeDataPart.h b/src/Storages/MergeTree/IMergeTreeDataPart.h index fcf9d5bd17da..8da9298b2908 100644 --- a/src/Storages/MergeTree/IMergeTreeDataPart.h +++ b/src/Storages/MergeTree/IMergeTreeDataPart.h @@ -660,7 +660,7 @@ class IMergeTreeDataPart : public std::enable_shared_from_this Date: Sat, 17 Feb 2024 04:59:32 +0100 Subject: [PATCH 2/2] Add a test --- .../1_stateful/00098_primary_key_memory_allocated.reference | 1 + tests/queries/1_stateful/00098_primary_key_memory_allocated.sql | 1 + 2 files changed, 2 insertions(+) create mode 100644 tests/queries/1_stateful/00098_primary_key_memory_allocated.reference create mode 100644 tests/queries/1_stateful/00098_primary_key_memory_allocated.sql diff --git a/tests/queries/1_stateful/00098_primary_key_memory_allocated.reference b/tests/queries/1_stateful/00098_primary_key_memory_allocated.reference new file mode 100644 index 000000000000..72749c905a31 --- /dev/null +++ b/tests/queries/1_stateful/00098_primary_key_memory_allocated.reference @@ -0,0 +1 @@ +1 1 1 diff --git a/tests/queries/1_stateful/00098_primary_key_memory_allocated.sql b/tests/queries/1_stateful/00098_primary_key_memory_allocated.sql new file mode 100644 index 000000000000..7371678a0f6f --- /dev/null +++ b/tests/queries/1_stateful/00098_primary_key_memory_allocated.sql @@ -0,0 +1 @@ +SELECT primary_key_bytes_in_memory < 16000, primary_key_bytes_in_memory_allocated < 16000, primary_key_bytes_in_memory_allocated / primary_key_bytes_in_memory < 1.1 FROM system.parts WHERE database = 'test' AND table = 'hits';