Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Оптимизация запроса для preview при подключении к ClickHouse #776

Open
handgunman opened this issue Jan 3, 2025 · 4 comments
Assignees

Comments

@handgunman
Copy link

Добрый день!

При формировании запроса для preview в секции GROUP BY указываются все поля таблицы. В результате запрос потребляет много оперативной памяти.
Если в дотаяете сделать несколько вычисляемых полей, то шансы на ошибку из-за лимитов памяти при запросе к более-менее крупной таблице возрастают.

Ситуацию можно исправить простейшей доработкой, добавив в конец запроса:
SETTINGS optimize_aggregation_in_order=1;
Настройка добавляется сразу за секцией LIMIT
LIMIT 10 SETTINGS optimize_aggregation_in_order=1;

Для примера запрос для preview без настройки:
Elapsed: 8.448 sec. Processed 8.57 million rows, 3.93 GB (1.01 million rows/s., 465.24 MB/s.)
Peak memory usage: 13.62 GiB.

с настройкой:
10 rows in set. Elapsed: 1.543 sec. Processed 40.96 thousand rows, 18.60 MB (26.54 thousand rows/s., 12.05 MB/s.)
Peak memory usage: 179.64 MiB.

Для плохо организованных таблиц не окажет влияния. При нормальной организации эффект очевиден.

С Уважением,
Сергей

@Marginy605
Copy link

@KonstantAnxiety, посмотри, пожалуйста, кейс

@KonstantAnxiety
Copy link
Contributor

@handgunman, добрый день!

Нам бы не хотелось изменять настройки CH по умолчанию помимо случаев, когда это необходимо для корректной работы сервиса, а эта настройка по описанию и отзывам может вызывать и негативные эффекты – специфичные настройки при необходимости можно выставить на уровне пользователя

@handgunman
Copy link
Author

handgunman commented Jan 23, 2025

Эту настройку не надо делать по умолчанию для всех запросов.
Она нужна как раз в одном случае для корректной работы, а именно для работы предпросмотра, который сейчас попросту не работает при значительных объемах данных и добавлении первых же вычисляемых полей с групповыми функциями.
То есть добавить ее надо только при формировании запроса для предпросмотра. В идеале сделать включаемой.

Сейчас в системах где несколько пользователей может работать с датасетами, превышения по памяти могут стать достаточно частыми и не вызывают симпатий у админов. В том числе и в адрес ДЛ.

На уровне пользователей, если говорим про пользователей КХ и их настройках, такое делать как раз не правильно, так как для чартов могут выбираться данные не в порядке сортировок.

Собственно, в таких случаях люди и ловят негативные эффекты, когда либо не корректные настройки сортировок, либо противоречащие им выборки.
Но это не относится к предпросмотра где всегда GROUP BY ALL и выигрыш от настройки будет всегда, либо никакого влияния, когда их, по сути, нет.

@handgunman
Copy link
Author

Добрый день!
Как алтернатива без сеттингов - сначала делать выборку с LIMIT и только потом делать GROUP BY ALL для предпросмотра. Сейчас он выпадает в ошибку на любых объемах сравнимых с ОП

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants