материализованные представления;

Материализованные представления предоставляют статистический запрос к исходной таблице. Материализованные представления всегда возвращают актуальный результат запроса статистической обработки (всегда в актуальном состоянии). Запрос материализованных представлений является более производительным, чем выполнение статистической обработки непосредственно над исходной таблицей, которая выполняется в каждом запросе.

Примечание

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

Используйте следующие команды для управления материализованными представлениями:

Зачем использовать материализованные представления?

Благодаря инвестиционным ресурсам (хранилищу данных, фоновым циклам ЦП) для материализованных представлений часто используемых агрегатов вы получаете следующие преимущества:

  • Улучшение производительности: Запросы к материализованным представлениям обычно выполняются лучше, чем запросы к исходной таблице для тех же агрегатных функций.

  • Актуальность: Запрос материализованных представлений всегда возвращает самые последние результаты независимо от времени последнего материализации. Запрос объединяет материализованный элемент представления с записями в исходной таблице, которые еще не были материализованными ( delta часть), всегда предоставляя наиболее актуальные результаты.

  • Снижение стоимости.запросы материализованных представлений потребляют меньше ресурсов из кластера, чем выполнение статистической обработки по исходной таблице. Политика хранения исходной таблицы может быть снижена, если требуется только статистическая обработка. Эта установка сокращает затраты на оперативный кэш для исходной таблицы.

Варианты использования материализованных представлений

Ниже приведены распространенные сценарии, которые можно решить с помощью материализованных представлений.

  • Обновление данных путем возвращения последней записи на сущность с помощью (статистическая функция).
  • Отмените дублирование записей в таблице с помощью (статистическая функция).
  • Уменьшите разрешение данных, вычисляя периодические статистические данные по необработанным данным. Используйте различные статистические функции по периоду времени.
    • Например, используйте T | summarize dcount(User) by bin(Timestamp, 1d) для поддержания актуального моментального снимка уникальных пользователей в день.

Примеры всех вариантов использования см. в разделе Материализованный Просмотр команды CREATE.

Принцип работы материализованных представлений

Материализованный вид состоит из двух компонентов:

  • Материализованные части — таблица обозреватель данных Azure, содержащая агрегированные записи из исходной таблицы, которые уже обработаны. Эта таблица всегда содержит одну запись для группировки Group-By.
  • Дельта — вновь полученные записи в исходной таблице, которые еще не были обработаны.

Запрос материализованных представлений объединяет материализованные части с разностной частью, предоставляя актуальный результат запроса статистической обработки. Процесс автономной материализации принимает новые записи из разностной таблицы в материализованный и заменяет существующие записи. Замена выполняется путем перестроения экстентов, содержащих записи для замены. Если записи в Дельта постоянно пересекаются со всеми сегментами данных в материализованных компонентах, каждый цикл материализации потребует перестроения всей материализованных частей и может не справиться с частотой приема. В этом случае представление станет неработоспособным, а Дельта будет постоянно расти. В разделе наблюдение объясняется, как устранять такие ситуации.

Запросы материализованных представлений

  • Основным способом запроса материализованных представлений является его имя, например запрос ссылки на таблицу. При запросе материализованных представлений он объединяет материализованный элемент представления с записями в исходной таблице, которые еще не были материализованными ( delta ). Запрос материализованных представлений всегда будет возвращать самые последние результаты на основе всех записей, полученных в исходной таблице. Дополнительные сведения о материализованных и нематериализованных частях в материализованных представлениях см. в статье Работа с материализованными представлениями.

    • Объединение материализованных частей с помощью delta во время выполнения запроса включает статистическую обработку delta и соединение с материализованными частями.
    • Оптимизатор запросов обозреватель данных Azure выбирает стратегии суммирования и объединения, которые должны повысить производительность запросов. Например, решение о том, следует ли перезаписывать запрос в случайном порядке , зависит от числа записей в части. Следующие Свойства клиентского запроса обеспечивают некоторый контроль над применяемой оптимизацией. Эти свойства можно проверить с помощью запросов материализованных представлений и оценить их влияние на производительность запросов.
Имя свойства запроса клиента Тип Описание
materialized_view_query_optimization_costbased_enabled bool Если задано значение false , отключает оптимизацию сводки и соединений в материализованных запросах представлений. Будет использовать стратегии по умолчанию. По умолчанию — true.
materialized_view_shuffle Динамический Принудительно перетасовывание запроса материализованных представлений и (необязательно) предоставление конкретных ключей для случайного просмотра. См. примеры ниже.
  • Другим способом запроса представления является использование функции. Этот параметр поддерживает запросы только об материализованных частях представления, при этом указывается максимальная задержка, с которой пользователь готов допускать. Этот параметр не гарантирует возвратить самые актуальные записи, но всегда должен быть более производительным, чем запрос всего представления. Эта функция полезна для сценариев, в которых вы хотите пожертвовать производительностью, например для панелей мониторинга телеметрии.

  • Материализованные представления могут участвовать в запросах между кластерами или между базами данных, но не включены в объединения с подстановочными знаками или поиск.

  • Дополнительные советы о том, как создать материализованный представление на основе шаблона запроса, см. в разделе . Создание материализованных советов по повышению производительности.

Примеры

  1. Запрос ко всему представлению. В исходную таблицу включены самые последние записи:

    ViewName
    
  2. Выполните запрос ко всему представлению и предоставьте "указание" для использования shuffle стратегии. В исходную таблицу включены самые последние записи:

    • Пример #1: в случайном порядке на основе столбца (аналогично использованию hint.shufflekey=Id ):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Пример #2: в случайном порядке на основе всех ключей (аналогично использованию ):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    
  3. Запрашивать материализованные части представления, независимо от времени его последнего материализации.

    materialized_view("ViewName")
    

Рекомендации по производительности

Основные участники, которые могут повлиять на материализованный работоспособность представления:

  • Ресурсы кластера: Как и любой другой процесс, выполняемый в кластере, материализованные представления потребляют ресурсы (ЦП, память) от кластера. Если кластер перегружен, добавление материализованных представлений может привести к снижению производительности кластера. Отслеживайте работоспособность кластера с помощью метрик работоспособности кластера. Оптимизированное Автомасштабирование в настоящее время не учитывает материализованные представления о работоспособности в рамках правил автомасштабирования.

  • Перекрытие с материализованными данными: Во время материализации все новые записи, полученные в исходной таблице с момента последней материализации (Дельта), обрабатываются и сохранятся в представлении. Чем выше пересечение между новыми записями и уже материализованными записями, тем хуже производительность материализованных представлений. Материализованные представления будут работать лучше, если количество обновляемых записей (например, в arg_max представлении) является небольшим подмножеством исходной таблицы. Если все или большинство записей материализованных представлений необходимо обновить в каждом цикле материализации, материализованный вид не будет работать правильно. Для обнаружения этой ситуации используйте метрики перестроения экстентов .

    • Перемещение кластера в ядро v3 должно существенно повлиять на производительность и материализованные представления, если пересечение между новыми записями и материализованным представлением относительно велико. Это обусловлено тем, что этап перестроения экстентов в ядре v3 гораздо более оптимизирован, чем в версии 2.
  • Скорость приема: Жестко запрограммированные ограничения на объем данных или скорость приема в исходной таблице материализованных представлений отсутствуют. Однако Рекомендуемая скорость приема для материализованных представлений не превышает 1 ГБ/с. Более высокие показатели приема могут работать нормально. Производительность зависит от размера кластера, доступных ресурсов и объема пересечений с существующими данными.

  • Число материализованных представлений в кластере: Приведенные выше рекомендации относятся к каждому отдельному материализованныму представлению, определенному в кластере. Каждое представление использует свои собственные ресурсы, и многие представления будут конкурировать друг с другом на доступных ресурсах. Хотя количество материализованных представлений в кластере не ограничивается жестко заданными ограничениями, кластер может не суметь обрабатывать все материализованные представления, если определено множество. Политика емкости может быть скорректирована, если в кластере больше одного материализованных представлений. Увеличьте значение ClusterMinimumConcurrentOperations в политике, чтобы параллельно выполнялись более материализованные представления.

  • Определение материализованных представлений. Определение материализованных представлений должно быть определено в соответствии с рекомендациями по запросам для оптимальной производительности запросов. Дополнительные сведения см. в разделе создание советов по повышению производительности команд.

Мониторинг материализованных представлений

Отслеживайте работоспособность материализованных представлений следующими способами.

Примечание

Материализация никогда не пропускает данные даже в случае постоянных сбоев. Представление всегда гарантированно возвращает самый актуальный моментальный снимок запроса на основе всех записей в исходной таблице. Постоянные сбои значительно снижают производительность запросов, но не будут приводить к неверным результатам в запросах на просмотр.

Устранение неполадок неработоспособных материализованных представлений

MaterializedViewHealthМетрика указывает, является ли материализованный представление работоспособным. До тех пор, пока материализованный представление становится неработоспособным, его возраст, отмеченный MaterializedViewAgeMinutes метрикой, постепенно увеличится.

Материализованные представления могут стать неработоспособными по любой из следующих причин.

  • Сбой процесса материализации. Команда метрики материализедвиевресулт и . Показать материализованные — Просмотр ошибок помогает определить основную причину сбоя.
  • В кластере недостаточно емкости для материализации всех входящих данных. В этом случае могут возникнуть сбои при выполнении. Однако возраст представления постепенно увеличивается, так как он не может поддерживать скорость приема. В этой ситуации может быть несколько основных причин:
    • Материализация работает слишком долго, так как в каждом цикле материализации существует слишком много экстентов для перестроения. Дополнительные сведения о том, почему перестроение экстентов влияет на производительность представления, см. в статье Работа с материализованными представлениями. Количество экстентов, перестроенных в каждом цикле, предоставляется в MaterializedViewExtentsRebuild метрике. Следующие решения могут помочь:
    • В кластере есть дополнительные материализованные представления, и у кластера недостаточно емкости для выполнения всех представлений. См. раздел Политика емкости материализованных представлений для изменения параметров по умолчанию для количества материализованных представлений, выполняемых параллельно.

Метрика Материализедвиевресулт

MaterializedViewResultМетрика предоставляет сведения о результате цикла материализации и может использоваться для определения проблем в состоянии работоспособности материализованных представлений. Метрика включает и, и, а DatabaseMaterializedViewName также Result измерение.

ResultИзмерение может иметь одно из следующих значений:

  • Успешно: материализация успешно завершена.
  • Саурцетабленотфаунд: исходная таблица представления материализации была удалена. В результате материализованный вид автоматически отключается.
  • Саурцетаблесчемачанже: схема исходной таблицы изменилась способом, несовместимым с определением материализованных представлений (запрос материализованных представлений не соответствует схеме материализованных представлений). В результате материализованный вид автоматически отключается.
  • ИнсуффиЦиенткапаЦити: в кластере недостаточно емкости для материализации материализованных представлений. Это может указывать на отсутствие емкости приема или на отсутствие материализованных представлений. Сбои нехватки емкости могут быть временными, но если они происходят часто, рекомендуется масштабировать кластер и (или) увеличить соответствующую емкость в политике.
  • ИнсуффиЦиентресаурцес: В кластере недостаточно ресурсов (ЦП или памяти) для материализации материализованных представлений. Этот сбой также может быть временным, но если он будет повторяться часто, требуется Горизонтальное развертывание.

Мониторинг потребления ресурсов

Материализованные представления потребление ресурсов. ресурсы, потребляемые процессом материализации материализованных представлений, могут быть отслеживанием с помощью команды. Отфильтруйте записи для определенного представления, используя следующие команды (Replace DatabaseName и ViewName ):

.show commands-and-queries 
| where Database  == "DatabaseName" and ClientActivityId startswith "DN.MaterializedViews;ViewName;"

Дальнейшие действия