Абстрактный
- Когда мы получаем проблему производительности Clickhouse, например, высокое использование ЦП, чтобы выяснить, что является реальной проблемой и как решить или предоставить обходной путь, нам нужно понять атрибуты Clickhouse System/User Config.
Оглавление
- MAX_PART_LOADING_THREADS
- max_part_removal_threads
- Number_of_free_entries_in_pool_to_execute_mution
- founal_pool_size
- founal_schedule_pool_size
- max_threads
- Получите размер столов
- Поймите Clickhouse
- Включить alluct_introspection_functions для профилирования запросов
- parts_to_throw_insert
🚀 MAX_PART_LOADING_THREADS
Максимальное количество потоков, которые читают детали при запуске Clickhouse.
Возможные значения: Любое положительное целое число. Значение по умолчанию: Авто (количество ядер ЦП).
Во время запуска Clickhouse считывает все части всех таблиц (считывает файлы с метаданными частями), чтобы составить список всех частей в памяти. В некоторых системах с большим количеством частей этот процесс может занять много времени, и на этот раз может быть сокращено за счет увеличения MAX_PART_LOADING_THREADS (если этот процесс не является CPU и дисковым вводом -выводом).
Проверка запроса
SELECT * FROM system.merge_tree_settings WHERE name = 'max_part_loading_threads' Query id: 5f8c7c7a-5dec-4e89-88dc-71f06d800e04 ┌─name─────────────────────┬─value─────┬─changed─┬─description──────────────────────────────────────────┬─type───────┐ │ max_part_loading_threads │ 'auto(4)' │ 0 │ The number of threads to load data parts at startup. │ MaxThreads │ └──────────────────────────┴───────────┴─────────┴──────────────────────────────────────────────────────┴────────────┘ 1 rows in set. Elapsed: 0.003 sec.
🚀 max_part_removal_threads
Количество потоков для одновременного удаления неактивных деталей данных. Обычно одно достаточно, но в Google Compute Environment Environment Ssd Persistent Disks Удаление файлов (UNLINK) чрезвычайно медленная, и вам, вероятно, придется увеличить это число (рекомендуется до 16).
🚀 number_of_free_entries_in_pool_to_execute_mution
- Этот атрибут должен соответствовать
founal_pool_size, его значения должны бытьfounal_pool_size
SELECT * FROM system.merge_tree_settings WHERE name = 'number_of_free_entries_in_pool_to_execute_mutation' ┌─name───────────────────────────────────────────────┬─value─┬─changed─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ number_of_free_entries_in_pool_to_execute_mutation │ 10 │ 0 │ When there is less than specified number of free entries in pool, do not execute part mutations. This is to leave free threads for regular merges and avoid "Too many parts" │ └────────────────────────────────────────────────────┴───────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
🚀 founal_pool_size
background_pool_size Устанавливает количество потоков, выполняющих фоновые операции в табличных двигателях (например, слияния в таблицах двигателей Mergetree). Этот параметр применяется из профиля TheDefault при запуске сервера Clickhouse и не может быть изменена в сеансе пользователя. Регулируя эту настройку, вы управляете загрузкой процессора и диска. Меньшие размеры бассейна определяют меньше ресурсов процессора и дисков, но фоновые процессы продвигаются медленнее, что в конечном итоге может повлиять на производительность запроса.
Перед тем, как изменить его, также посмотрите на соответствующие настройки Mergetree, такие как number_of_free_entries_in_pool_to_lower_max_size_of_merge andnumber_of_free_entries_in_pool_to_execute_mute.
Возможные значения: Любое положительное целое число. Значение по умолчанию: 16.
Начать журнал
2021.08.29 04:22:30.824446 [ 12372 ] {} BackgroundSchedulePool/BgSchPool: Create BackgroundSchedulePool with 16 threads
2021.08.29 04:22:47.891697 [ 12363 ] {} Application: Available RAM: 15.08 GiB; physical cores: 4; logical cores: 8.
- Как обновить это значение, например. 5
Обновление config.xml
5
Обновление users.xml
5
🚀 founal_schedule_pool_size
founal_schedule_pool_size Устанавливает количество потоков, выполняющих фоновые задачи для реплицированных таблиц, потоковой передачи Kafka, обновления кэша DNS. Этот параметр применяется при запуске сервера Clickhouse и не может быть изменена в сеансе пользователя.
Возможные значения: Любое положительное целое число. Значение по умолчанию: 128.
Как обновить это значение? — В профиле пользователя -> Обновление
users.xml(Отключитьfounal_schedule_pool_sizeЕсли мы не используемReplictedmergetreeдвигатель)
0
- Получите размер бассейна
SELECT
name,
value
FROM system.settings
WHERE name LIKE '%pool%'
┌─name─────────────────────────────────────────┬─value─┐
│ connection_pool_max_wait_ms │ 0 │
│ distributed_connections_pool_size │ 1024 │
│ background_buffer_flush_schedule_pool_size │ 16 │
│ background_pool_size │ 100 │
│ background_move_pool_size │ 8 │
│ background_fetches_pool_size │ 8 │
│ background_schedule_pool_size │ 0 │
│ background_message_broker_schedule_pool_size │ 16 │
│ background_distributed_schedule_pool_size │ 16 │
└──────────────────────────────────────────────┴───────┘
- Получите справочную задачу
SELECT
metric,
value
FROM system.metrics
WHERE metric LIKE 'Background%'
┌─metric──────────────────────────────────┬─value─┐
│ BackgroundPoolTask │ 0 │
│ BackgroundFetchesPoolTask │ 0 │
│ BackgroundMovePoolTask │ 0 │
│ BackgroundSchedulePoolTask │ 0 │
│ BackgroundBufferFlushSchedulePoolTask │ 0 │
│ BackgroundDistributedSchedulePoolTask │ 0 │
│ BackgroundMessageBrokerSchedulePoolTask │ 0 │
└─────────────────────────────────────────┴───────┘
- Получите Bgschpool
# ps H -o 'tid comm' $(pidof -s clickhouse-server) | tail -n +2 | awk '{ printf("%s\t%s\n", $1, $2) }' | grep BgSchPool
7346 BgSchPool/D
SELECT
cluster,
shard_num,
replica_num,
host_name
FROM system.clusters
┌─cluster───────────────────────────┬─shard_num─┬─replica_num─┬─host_name─┐
│ test_cluster_two_shards │ 1 │ 1 │ 127.0.0.1 │
│ test_cluster_two_shards │ 2 │ 1 │ 127.0.0.2 │
│ test_cluster_two_shards_localhost │ 1 │ 1 │ localhost │
│ test_cluster_two_shards_localhost │ 2 │ 1 │ localhost │
│ test_shard_localhost │ 1 │ 1 │ localhost │
│ test_shard_localhost_secure │ 1 │ 1 │ localhost │
│ test_unavailable_shard │ 1 │ 1 │ localhost │
│ test_unavailable_shard │ 2 │ 1 │ localhost │
└───────────────────────────────────┴───────────┴─────────────┴───────────┘
🚀 max_threads
max_threads
Максимальное количество потоков обработки запросов, исключая потоки для извлечения данных с удаленных серверов (см. Параметр ‘max_distributed_connections’).
Этот параметр применяется к потокам, которые параллельно выполняют те же этапы конвейера обработки запросов. Например, при считывании из таблицы, если можно оценить выражения с помощью функций, отфильтруйте с тем, где и предварительно агрегация для группы по параллельному использованию, по крайней мере, «max_threads» количество потоков, тогда используется «max_threads».
Значение по умолчанию: количество физических ядер ЦП.
Для запросов, которые заполнены быстро из -за ограничения, вы можете установить более низкий «max_threads». Например, Если необходимое количество записей расположено в каждом блоке, и тогда получают 8 блоков, хотя этого было бы достаточно, чтобы прочитать только один.
Чем меньше значение max_threads, тем меньше памяти потребляется.
Обновите это значение в профиле пользователя
🚀 Получите размер таблиц
clickhouse-get-get-size.sql
select concat(database, '.', table) as table,
formatReadableSize(sum(bytes)) as size,
sum(rows) as rows,
max(modification_time) as latest_modification,
sum(bytes) as bytes_size,
any(engine) as engine,
formatReadableSize(sum(primary_key_bytes_in_memory)) as primary_keys_size
from system.parts
where active
group by database, table
order by bytes_size desc
- Для детализации таблицы базы данных
select parts.*,
columns.compressed_size,
columns.uncompressed_size,
columns.ratio
from (
select table,
formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_size,
formatReadableSize(sum(data_compressed_bytes)) AS compressed_size,
sum(data_compressed_bytes) / sum(data_uncompressed_bytes) AS ratio
from system.columns
where database = currentDatabase()
group by table
) columns
right join (
select table,
sum(rows) as rows,
max(modification_time) as latest_modification,
formatReadableSize(sum(bytes)) as disk_size,
formatReadableSize(sum(primary_key_bytes_in_memory)) as primary_keys_size,
any(engine) as engine,
sum(bytes) as bytes_size
from system.parts
where active and database = currentDatabase()
group by database, table
) parts on columns.table = parts.table
order by parts.bytes_size desc;
🚀 Понять сжатие Clickhouse
🚀 Включить alluct_introspection_functions для профилирования запросов
- Функции самоанализа Анкет Обновление в профиле пользователя
1
- Получить трассировку стека потоков
WITH arrayMap(x -> demangle(addressToSymbol(x)), trace) AS all
SELECT
thread_id,
query_id,
arrayStringConcat(all, '\n') AS res
FROM system.stack_trace
WHERE res LIKE '%SchedulePool%'
┌─thread_id─┬─query_id─┬─res──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 7346 │ │ pthread_cond_wait
DB::BackgroundSchedulePool::delayExecutionThreadFunction()
ThreadPoolImpl::worker(std::__1::__list_iterator)
start_thread
clone │
└───────────┴──────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
🚀 parts_to_throw_insert
- parts_to_throw_insert Если количество активных частей в одном разделе превышает значение parts_to_throw_insert, вставка прерывается с помощью слишком большого количества частей (n). Слияния обрабатывают значительно медленнее, чем вкладывает исключение.
Возможные значения: любое положительное целое число. Значение по умолчанию: 300.
Чтобы достичь максимальной производительности избранных запросов, необходимо минимизировать количество обработанных частей, см. Дерево слияния.
Вы можете установить большее значение до 600 (1200), это уменьшит вероятность ошибки слишком много деталей, но в то же время выбора производительности могут ухудшиться. Также в случае проблемы слияния (например, из -за недостаточного места на дисковом пространстве) вы заметите его позже, чем с исходными 300.
- Столкнувшись с проблемой?
2021.08.30 11:30:44.526367 [ 7369 ] {} void DB::SystemLog::flushImpl(const std::vector &, uint64_t) [LogElement = DB::MetricLogElement]: Code: 252, e.displayText() = DB::Exception: Too many parts (300). Parts cleaning are processing significantly slower than inserts, Stack trace (when copying this message, always include the lines below):
- И вы решили увеличить
parts_to_throw_insert-> Обновлениеconfig.xml
600
🚀 Vu Dao 🚀 Следуйте
Vumdao/Вумдао
Оригинал: «https://dev.to/vumdao/clickhouse-server-troubleshooting-2gb7»