настройки чтобы данные промежуточные в своп попадали и CTE не падала вместе с сервером? Пусть выполняется долго, но гарантированно.
а без CTE не падает тот же запрос?
Если разбить на временные таблицы - то не упадет
если выполнить тот же запрос без CTE, просто вложенным
Не уверен что это реально переписать
любой CTE можно переписать с памятью обычно спасают эти настройки max_memory_usage max_bytes_before_external_group_by max_bytes_before_external_sort max_threads join_algorithm
Разницы нет, что CTE падает, что переписанный запрос с вложенными запросами. Причем на одном и том же месте.
так и в каком месте падает?) group by? join? я выше скинул основные настройки куда смотреть
Я скорее пытался найти что-то вроде аналога unique constraint из постгреса для clickhouse, чтобы задать на уровне ddl
это что-то на oltp-шном )
Хм, отрезвило прям) Вообще да, не по канону, значит буду искать другие варианты, спасибо!
Тут есть пример констрейнов которые используются в pastila.nl https://clickhouse.com/blog/building-a-paste-service-with-clickhouse
Падает на UNION причем в результирующем датасете данных не так уже и много, ну там порядка 200.000 записей. Пробовал запускать в другом контейнере со свопом - но это все равно не помогло.
UNION параллельно выполняется и может отжирать много памяти https://github.com/ClickHouse/ClickHouse/issues/23245 max_threads уменьшать как вариант ну и если на 200000 записей падает, то сколько у вас оперативы выделено? 2Gb?
Выделено 12GB + своп. Запускаю - память заканчивается, начинает свопить и все сам docker-engine больше не отвечает
запрос один такой или несколько одновременных? SELECT quantiles(0.5,0.9)(memory_usage), count() FROM system.query_log WHERE memory_usage > 0 AND event_date=today() что показывает?
[600.0,581754220] 51
а вот так? SELECT quantiles(0.5,0.9,0.99)(memory_usage), count() FROM system.query_log WHERE memory_usage > 0 AND event_date=today()
[600.0,530692518.4000011,4103380323.5199866] 53
это значит 90% не больше полугигабайта, и максимум 4 гига оперативы на запрос... и запросов мало... запрос покажите целиком и посмотрите его в system.query_log
Это одна большая CTE с кучей окошек, query log не показывает запрос, который падает.
Вы не настроили volume чтобы данные сохранялись? Типа после рестарта докера у вас стартует голый КХ? Чему равен max_memory_usage в КХ? как выглядит текст ошибки?
max_mеmory_usage устанавливал в самом запросе 24Gb. В логе вижу такое: 2022.07.27 11:46:47.724925 [ 83 ] {} <Debug> MemoryTracker: Peak memory usage Mutate/Merge: 12.55 MiB. 2022.07.27 11:46:48.000230 [ 129 ] {} <Trace> AsynchronousMetrics: MemoryTracking: was 2.37 GiB, peak 7.64 GiB, will set to 2.38 GiB (RSS), difference: 5.17 MiB 2022.07.27 11:46:49.855754 [ 126 ] {} <Trace> SystemLog (system.metric_log): Flushing system log, 8 entries to flush up to offset 7372 2022.07.27 11:46:49.863704 [ 126 ] {} <Debug> DiskLocal: Reserving 1.00 MiB on disk default, having unreserved 147.34 GiB. 2022.07.27 11:46:49.865680 [ 126 ] {} <Trace> MergedBlockOutputStream: filled checksums 202207_981_981_0 (state Temporary) 2022.07.27 11:46:49.866076 [ 126 ] {} <Trace> system.metric_log (f3d96510-4faf-4323-86a9-c82085a43e6a): Renaming temporary part tmp_insert_202207_981_981_0 to 202207_1325_1325_0. 2022.07.27 11:46:49.867115 [ 126 ] {} <Trace> SystemLog (system.metric_log): Flushed system log up to offset 7372 2022.07.27 11:46:52.405725 [ 77 ] {} <Trace> system.asynchronous_metric_log (b0489df1-206e-4d6b-91e0-5dea018b53b4): Found 2 old parts to remove. 2022.07.27 11:46:52.405757 [ 77 ] {} <Debug> system.asynchronous_metric_log (b0489df1-206e-4d6b-91e0-5dea018b53b4): Removing part from filesystem 202207_1_1350_956 2022.07.27 11:46:52.406269 [ 77 ] {} <Debug> system.asynchronous_metric_log (b0489df1-206e-4d6b-91e0-5dea018b53b4): Removing part from filesystem 202207_1351_1351_0 2022.07.27 11:46:53.395978 [ 54 ] {} <Trace> BaseDaemon: Received signal 15 2022.07.27 11:46:53.396124 [ 54 ] {} <Information> Application: Received termination signal (Terminated) 2022.07.27 11:46:53.396409 [ 1 ] {} <Debug> Application: Received termination signal. 2022.07.27 11:46:53.396540 [ 1 ] {} <Debug> Application: Waiting for current connections to close.
Судя по логу вам сигтерм приходит. У вас, случайно, не ооемкиллер ли срабатывает?
Обсуждают сегодня