Материализованные представления: как они могут стать двусторонним мечом
Этот гид является частью коллекции выводов, полученных на встречах сообщества. Для получения более практичных решений и инсайтов вы можете просмотреть по конкретной проблеме. Слишком много частей замедляют вашу базу данных? Ознакомьтесь с руководством сообщества Слишком много частей. Узнайте больше о Материализованных представлениях.
Анти-шаблон хранения 10x
Истинная проблема в производстве: "У нас было материализованное представление. Объем таблицы сырых логов составлял около 20 гигабайт, но объем представления из этой таблицы логов взорвался до 190 гигабайт, что почти в 10 раз больше размера таблицы сырого лога. Это произошло потому, что мы создавали одну строку на каждый атрибут, а каждый лог может иметь 10 атрибутов."
Правило: Если ваше GROUP BY
создает больше строк, чем уничтожает, вы строите дорогой индекс, а не материализованное представление.
Проверка состояния материализованных представлений в продакшене
Этот запрос поможет вам предсказать, сожмет ли или взорвется ваши данные материализованное представление перед его созданием. Запустите его против вашей фактической таблицы и колонок, чтобы избежать сценария "взрыва на 190 ГБ".
Что он показывает:
- Низкое отношение агрегации (<10%) = Хорошее MV, значительное сжатие
- Высокое отношение агрегации (>70%) = Плохое MV, риск взрыва хранилища
- Множитель хранения = На сколько больше/меньше будет ваше MV
Когда материализованные представления становятся проблемой
Признаки, на которые стоит обратить внимание:
- Увеличение задержки вставки (запросы, которые занимали 10мс, теперь занимают 100мс и более)
- Ошибки "Слишком много частей" появляются чаще
- Всплески CPU во время операций вставки
- Тайм-ауты вставки, которые раньше не возникали
Вы можете сравнить производительность вставки до и после добавления MV, используя system.query_log
, чтобы отслеживать тренды длительности запросов.
Видео-источники
- ClickHouse на CommonRoom - Кирилл Сапчук - Источник исследования "слишком восторженным в отношении материализованных представлений" и случая "20ГБ→190ГБ взрыв"