184 похожих чатов

Есть простая таблица CREATE TABLE default.syslog ( `severity` UInt16,

`facility` UInt16,
`timestamp` DateTime,
`hostname` String,
`tag` String,
`message` String
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (timestamp, hostname)
TTL timestamp + toIntervalDay(45)
SETTINGS index_granularity = 8192Записей много!
Можно как-то оптимизировать
SELECT DISTINCT hostname FROM syslogбез предварительного аггрегирования?

13 ответов

19 просмотров

Почему order by такой? Если hostname не слишком много, стоит поменять их местами. Не знаю, оптимизирован ли distinct сейчас, group by host_name,... сильно ускорится

hostname LowCardinality(String) и делать select hostname from FROM syslog group by hostname или тупо вынести в отдельную таблицу, и сделать типа словаря

1) hostname замените тип на LowCardinality(string) 2) ORDER BY поменяйте поставьте сначала hostname а потом timestamp 3) SELECT DISTINCT hostname FROM syslog WHERE timestamp BETWEEN no() - INTERVAL 20 DAYS AND now() - такое допустимо?

Valeriy-Filatov Автор вопроса
Slach [altinity]
1) hostname замените тип на LowCardinality(string)...

1. да! Ускорение ~10 раз, если запрос поменять на "select hostname from syslog group by hostname" 2. да, еще быстрее, но "поломался" поиск без участия hostname, ОЧЕНЬ медленно. Пришлось вернуть "ORDER BY (timestamp, hostname)" обратно.

Valeriy Filatov
1. да! Ускорение ~10 раз, если запрос поменять на ...

какой конкретно поиск? where что? как у вас таблица партиционирована?

Valeriy-Filatov Автор вопроса
Denny [Altinity]
какой конкретно поиск? where что? как у вас табли...

CREATE TABLE default.syslog ( `severity` UInt16, `facility` UInt16, `timestamp` DateTime, `hostname` LowCardinality(String), `tag` String, `message` String ) ENGINE = MergeTree() PARTITION BY toYYYYMM(timestamp) ORDER BY (timestamp, hostname) TTL timestamp + toIntervalDay(45) SETTINGS index_granularity = 8192 Если ORDER BY поменять местами, то SELECT formatDateTime(timestamp, '%m/%d %H:%M'), hostname, severity, tag, message FROM syslog WHERE timestamp >= $value1 AND timestamp < $value2 AND message like $msg ORDER BY timestamp ASCвозвращается ОЧЕНЬ медленно. Понятно, что если добавить "AND hostname = ..." запрос возвращается быстро

Valeriy Filatov
CREATE TABLE default.syslog ( `severity` UInt1...

сделайте ORDER BY (toStartOfHour(timestamp), hostname)

Valeriy-Filatov Автор вопроса
Valeriy-Filatov Автор вопроса
Denny [Altinity]
сделайте ORDER BY (toStartOfHour(timestamp), hostn...

Сделал, но разница несущественна даже с toStartOfDay. Заметил другую проблему: переходы на "далекую" страницу до минуты и более SELECT * FROM syslog WHERE timestamp >= toDate('2020-11-02') AND timestamp < NOW() AND hostname='myhost' LIMIT 1000 OFFSET 1053000

Valeriy Filatov
Сделал, но разница несущественна даже с toStartOfD...

OFFSET 1053000 -- а чего вы ожидали собственно? Чуда? Нет. Деда мороза не бывает.

Valeriy Filatov
Сделал, но разница несущественна даже с toStartOfD...

я посоветовал такой ORDER BY (toStartOfHour(timestamp), hostname) чтобы работали по индексу запросы вида where hostname = ? and timestamp between

Denny [Altinity]
я посоветовал такой ORDER BY (toStartOfHour(timest...

А разве не наоборот должны быть поля в ордер бай для вашего примера?

Anton
А разве не наоборот должны быть поля в ордер бай д...

есть хитрость в КХ, он умеет делать skip scan, для лидирующих полей в индексе, что-то вроде oracle-fast-full-index-scan, если кардинальность лидирующего поля мала Valeriy наоборот отказывался делать, у хоста кардинальность большая, а ему нужно делать запросы с фильтрацией по дате, без фильтра по хосту

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта