Size: a a a

ClickHouse не тормозит

2020 July 14

DC

Denny Crane (I don't... in ClickHouse не тормозит
Dmitry Titov
toUInt64() и возможно придется добавить intDiv в зависимости от хранимой точности
toUInt64 сделает только секунды
источник

VB

Vladimir Bunchuk in ClickHouse не тормозит
да, отдало только секунлды
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Vladimir Bunchuk
ребят, подскажите плз как достать таймстемп из DateTime64 с точностью до миллисекунд
никак, парсить строку
источник

VB

Vladimir Bunchuk in ClickHouse не тормозит
жаль
ну да ладно
источник

VB

Vladimir Bunchuk in ClickHouse не тормозит
спасибо
источник

VB

Vladimir Bunchuk in ClickHouse не тормозит
Dmitry Titov
toUInt64() и возможно придется добавить intDiv в зависимости от хранимой точности
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
когда-нибудь появится функция reinterpretAsUInt64
источник

DT

Dmitry Titov in ClickHouse не тормозит
вообще неожиданно если честно.
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Dmitry Titov
вообще неожиданно если честно.
источник

МШ

Михаил Ш in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
временные таблицы, или сложить все массив в with
если правильно понимаю, with допускает только 1 строку в запросе...
источник

VB

Vladimir Bunchuk in ClickHouse не тормозит
@den_crane @unamedrus  поборол )
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Михаил Ш
если правильно понимаю, with допускает только 1 строку в запросе...
одно значение даже. Сколько всего строк в  рубриках ?
источник

МШ

Михаил Ш in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
одно значение даже. Сколько всего строк в  рубриках ?
в среднем в одной выборке - около 2млн (результат фильтрации по признаку + датам), иногда до 5млн. Общее число записей в таблице около 10млрд
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Михаил Ш
в среднем в одной выборке - около 2млн (результат фильтрации по признаку + датам), иногда до 5млн. Общее число записей в таблице около 10млрд
оставьте все как в изначальном запросе тогда
источник

МШ

Михаил Ш in ClickHouse не тормозит
Это значит "там все не супер плохо" или "на таких мелочах нечего тюниться"? :)
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Михаил Ш
Это значит "там все не супер плохо" или "на таких мелочах нечего тюниться"? :)
думаю лучше не станет.

ну или можно попробовать с временной таблицей

еще можно группировку сделать в запросе к items
источник

IZ

Ildar Zaynullin in ClickHouse не тормозит
Добрый день! Наблюдаю проблему с тем, что конфигурация rollup в GraphiteMergeTree в какой-то момент перестала выполнять агрегацию. Версия кликхаус ClickHouse server version 19.8.3.8 (official build).

Настройки rollup:
<graphite_rollup>
       <path_column_name>Path</path_column_name>
       <time_column_name>Time</time_column_name>
       <value_column_name>Value</value_column_name>
       <version_column_name>Timestamp</version_column_name>
       <default>
           <function>avg</function>
           <retention>
               <age>0</age>
               <precision>1</precision>
           </retention>
           <retention>
               <age>86400</age>
               <precision>60</precision>
           </retention>
           <retention>
               <age>864000</age>
               <precision>900</precision>
           </retention>
           <retention>
               <age>1728000</age>
               <precision>1800</precision>
           </retention>
       </default>
   </graphite_rollup>


Конфигурация таблицы:
CREATE TABLE graphite (`Path` String, Value Float64, Time DateTime, Date Date, Timestamp UInt32) ENGINE = GraphiteMergeTree('graphite_rollup') PARTITION BY toYYYYMM(Date) ORDER BY (Path, Time) SETTINGS index_granularity = 8192


Запрос метрики за 17.06.2020 (сегодня 14.07.2020) возвращает метрики с интервалом в 1 сек, хотя согласно настройкам метрика должна остаться 1 метрика за 30 мин.
SELECT *
FROM graphite
WHERE (Date = '2020-06-17') AND (Path = 'statsd.numStats')
ORDER BY Timestamp DESC
LIMIT 2

┌─Path────────────┬──────────Value─┬────────────────Time─┬───────Date─┬────Timestamp─┐
│ statsd.numStats │              4 │ 2020-06-17 23:59:59 │ 2020-06-17 │   1592427599 │
│ statsd.numStats │              4 │ 2020-06-17 23:59:58 │ 2020-06-17 │   1592427598 │
└─────────────────┴────────────────┴─────────────────────┴────────────┴──────────────┘

А запрос метрики за 16.06.2020 возвращает метрики с интервалом в 1 минуту, и тоже не подходит не под одно правило
SELECT *
FROM graphite
WHERE (Date = '2020-06-16') AND (Path = 'statsd.numStats')
ORDER BY Timestamp DESC
LIMIT 2

┌─Path────────────┬──────────Value─┬────────────────Time─┬───────Date─┬────Timestamp─┐
│ statsd.numStats │              4 │ 2020-06-16 23:59:00 │ 2020-06-16 │   1592341199 │
│ statsd.numStats │              4 │ 2020-06-16 23:58:00 │ 2020-06-16 │   1592341139 │
└─────────────────┴────────────────┴─────────────────────┴────────────┴──────────────┘

Метрики за 26.06.2020 хранятся по одной секунде, а уже за 27.06.2020 - по одной минуте.
При выполнении OPTIMIZE получаю следующее:
## SET optimize_throw_if_noop = 1
## OPTIMIZE TABLE graphite PARTITION 202007 FINAL
Code: 388. DB::Exception: Received from localhost:6788, 127.0.0.1. DB::Exception: Insufficient available disk space, required 191.81 GB.
## OPTIMIZE TABLE graphite PARTITION 202006 FINAL
Code: 388. DB::Exception: Received from localhost:6788, 127.0.0.1. DB::Exception: Insufficient available disk space, required 124.50 GB.


Сами размеры партиций меньше, чем размер на диске, требуемый для выполнения OPTIMIZE:
SELECT
   table,
   sum(rows),
   partition,
   count() AS number_of_parts,
   formatReadableSize(sum(bytes)) AS sum_size
FROM system.parts
WHERE table = 'graphite'
GROUP BY
   table,
   partition
ORDER BY partition ASC

┌────table─┬──────sum(rows)─┬─partition─┬─number_of_parts─┬─sum_size───┐
│ graphite │     7171581973 │   202006  │               9 │ 57.98 GiB  │
│ graphite │    14093390942 │   202007  │             619 │ 89.65 GiB  │
└──────────┴────────────────┴───────────┴─────────────────┴────────────┘


Правильно ли я понимаю, что rollup не может выполниться из-за нехватки места на диске? если это так, то какие минимальные требования по размеру диска нужно закладывать при проектировании, если в качестве хранилища graphite метрик использовать clickhouse? Записываются ли в логи ошибки слияния партиций, чтобы по ним можно было сразу среагировать на невыполненное слияние?
источник

МШ

Михаил Ш in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
думаю лучше не станет.

ну или можно попробовать с временной таблицей

еще можно группировку сделать в запросе к items
понял, спасибо
источник

АФ

Александр Филиппов... in ClickHouse не тормозит
Всем привет, есть такая проблема. Примерно 2к селектов в секунду. Сначала всё ок. А потом начинает возвращать ошибку, что вся память закончилось. Не подскажите как решить? Кликхаус не умеет высвобождать память? Или нужно set max_memory_usage перед каждым запросом выставлять?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Ildar Zaynullin
Добрый день! Наблюдаю проблему с тем, что конфигурация rollup в GraphiteMergeTree в какой-то момент перестала выполнять агрегацию. Версия кликхаус ClickHouse server version 19.8.3.8 (official build).

Настройки rollup:
<graphite_rollup>
       <path_column_name>Path</path_column_name>
       <time_column_name>Time</time_column_name>
       <value_column_name>Value</value_column_name>
       <version_column_name>Timestamp</version_column_name>
       <default>
           <function>avg</function>
           <retention>
               <age>0</age>
               <precision>1</precision>
           </retention>
           <retention>
               <age>86400</age>
               <precision>60</precision>
           </retention>
           <retention>
               <age>864000</age>
               <precision>900</precision>
           </retention>
           <retention>
               <age>1728000</age>
               <precision>1800</precision>
           </retention>
       </default>
   </graphite_rollup>


Конфигурация таблицы:
CREATE TABLE graphite (`Path` String, Value Float64, Time DateTime, Date Date, Timestamp UInt32) ENGINE = GraphiteMergeTree('graphite_rollup') PARTITION BY toYYYYMM(Date) ORDER BY (Path, Time) SETTINGS index_granularity = 8192


Запрос метрики за 17.06.2020 (сегодня 14.07.2020) возвращает метрики с интервалом в 1 сек, хотя согласно настройкам метрика должна остаться 1 метрика за 30 мин.
SELECT *
FROM graphite
WHERE (Date = '2020-06-17') AND (Path = 'statsd.numStats')
ORDER BY Timestamp DESC
LIMIT 2

┌─Path────────────┬──────────Value─┬────────────────Time─┬───────Date─┬────Timestamp─┐
│ statsd.numStats │              4 │ 2020-06-17 23:59:59 │ 2020-06-17 │   1592427599 │
│ statsd.numStats │              4 │ 2020-06-17 23:59:58 │ 2020-06-17 │   1592427598 │
└─────────────────┴────────────────┴─────────────────────┴────────────┴──────────────┘

А запрос метрики за 16.06.2020 возвращает метрики с интервалом в 1 минуту, и тоже не подходит не под одно правило
SELECT *
FROM graphite
WHERE (Date = '2020-06-16') AND (Path = 'statsd.numStats')
ORDER BY Timestamp DESC
LIMIT 2

┌─Path────────────┬──────────Value─┬────────────────Time─┬───────Date─┬────Timestamp─┐
│ statsd.numStats │              4 │ 2020-06-16 23:59:00 │ 2020-06-16 │   1592341199 │
│ statsd.numStats │              4 │ 2020-06-16 23:58:00 │ 2020-06-16 │   1592341139 │
└─────────────────┴────────────────┴─────────────────────┴────────────┴──────────────┘

Метрики за 26.06.2020 хранятся по одной секунде, а уже за 27.06.2020 - по одной минуте.
При выполнении OPTIMIZE получаю следующее:
## SET optimize_throw_if_noop = 1
## OPTIMIZE TABLE graphite PARTITION 202007 FINAL
Code: 388. DB::Exception: Received from localhost:6788, 127.0.0.1. DB::Exception: Insufficient available disk space, required 191.81 GB.
## OPTIMIZE TABLE graphite PARTITION 202006 FINAL
Code: 388. DB::Exception: Received from localhost:6788, 127.0.0.1. DB::Exception: Insufficient available disk space, required 124.50 GB.


Сами размеры партиций меньше, чем размер на диске, требуемый для выполнения OPTIMIZE:
SELECT
   table,
   sum(rows),
   partition,
   count() AS number_of_parts,
   formatReadableSize(sum(bytes)) AS sum_size
FROM system.parts
WHERE table = 'graphite'
GROUP BY
   table,
   partition
ORDER BY partition ASC

┌────table─┬──────sum(rows)─┬─partition─┬─number_of_parts─┬─sum_size───┐
│ graphite │     7171581973 │   202006  │               9 │ 57.98 GiB  │
│ graphite │    14093390942 │   202007  │             619 │ 89.65 GiB  │
└──────────┴────────────────┴───────────┴─────────────────┴────────────┘


Правильно ли я понимаю, что rollup не может выполниться из-за нехватки места на диске? если это так, то какие минимальные требования по размеру диска нужно закладывать при проектировании, если в качестве хранилища graphite метрик использовать clickhouse? Записываются ли в логи ошибки слияния партиций, чтобы по ним можно было сразу среагировать на невыполненное слияние?
rollup делается во время мержей. Мержи букают 2 размера суммарного исходных партов.

<function>avg</function> -- считается неправильно, потому что это avg
источник