Перейти к основному содержанию
Новая настройка allow_asynchronous_read_from_io_pool_for_merge_tree позволяет увеличить число потоков чтения (потоков) по сравнению с числом потоков в остальной части конвейера выполнения запроса. Обычно настройка max_threads определяет количество потоков для параллельного чтения и параллельной обработки запросов: Данные читаются «по порядку», столбец за столбцом, с диска.

Асинхронное чтение данных

Новая настройка allow_asynchronous_read_from_io_pool_for_merge_tree позволяет увеличить число потоков чтения (потоков) по сравнению с числом потоков в остальной части конвейера выполнения запроса, чтобы ускорить холодные запросы в сервисах ClickHouse Cloud с небольшим числом CPU и повысить производительность запросов, ограниченных I/O. Когда настройка включена, количество потоков чтения управляется настройкой max_streams_for_merge_tree_reading: Данные читаются асинхронно, параллельно из разных столбцов. Обратите внимание, что для настройки соотношения между числом потоков чтения (потоков) и числом потоков в остальной части конвейера выполнения запроса также существует настройка max_streams_to_max_threads_ratio. Однако в бенчмарках она оказалась не такой полезной, как настройка max_streams_for_merge_tree_reading

Что насчёт optimize_read_in_order?

Благодаря оптимизации optimize_read_in_order ClickHouse может избежать повторной сортировки данных в памяти, если порядок сортировки в запросах соответствует физическому порядку данных на диске, но для этого данные нужно читать по порядку (в отличие от асинхронного чтения):

optimize_read_in_order имеет приоритет перед асинхронным чтением

Если ClickHouse определяет, что можно применить оптимизацию optimize_read_in_order, то настройка allow_asynchronous_read_from_io_pool_for_merge_tree будет проигнорирована / отключена.

Пример, демонстрирующий всё вышеперечисленное

  • Проверьте конвейер выполнения запроса со стандартным числом потоков и для чтения, и для обработки данных
  • Проверьте конвейер запроса с 60 потоками асинхронного чтения и числом потоков по умолчанию для остальной части конвейера выполнения запроса
  • Проверьте конвейер выполнения запроса с 20 потоками для чтения и обработки данных
  • Проверьте конвейер запроса: 60 потоков для асинхронного чтения и 20 — для остальной части конвейера выполнения запроса
  • Проверьте конвейер запроса с 60 асинхронными потоками чтения и 20 потоками для остальной части выполнения запроса, когда можно применить оптимизацию optimize_read_in_order optimization
Последнее изменение 1 июля 2026 г.