Поделиться через


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

Область применения: ✅Microsoft Fabric✅Azure Data Explorer

Следите за работоспособностью материализованного представления следующими способами:

Примечание.

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

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

Если метрика MaterializedViewAge постоянно увеличивается, а метрика MaterializedViewHealth показывает, что представление неработоспособно, выполните следующие рекомендации, чтобы определить первопричину:

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

    .show capacity 
    | where Resource == "MaterializedView"
    | project Resource, Total, Consumed
    

    выходных

    Ресурс Итог Потребляется
    Материализованныйview 1 0
    • Количество материализованных представлений, которые могут выполняться одновременно, зависит от емкости, показанной в столбце Total, а в столбце Consumed отображается количество материализованных представлений, выполняемых в настоящее время. Вы можете использовать политику емкости Материализованных представлений, чтобы указать минимальное и максимальное количество параллельных операций, переопределяя уровень параллелизма по умолчанию системы. Система определяет текущую параллельность, показанную в Totalна основе доступных ресурсов кластера. Следующий пример переопределяет решение системы и изменяет минимальные параллельные операции с одного на три:
    .alter-merge cluster policy capacity '{  "MaterializedViewsCapacity": { "ClusterMinimumConcurrentOperations": 3 } }'
    
    • Если вы явно измените эту политику, отслеживайте работоспособность кластера и убедитесь, что другие рабочие нагрузки не затронуты этим изменением.
  • Проверьте, возникают ли сбои во время процесса материализации с помощью .show материализованные сбои представления.

    • Если ошибка является постоянной, система автоматически отключает материализованное представление. Чтобы проверить, отключен ли он, используйте команду .show materialized-view и проверьте, falseли значение в столбце IsEnabled. Затем проверьте журнала для отключенного события с помощью команды .show journal. Примером постоянного сбоя является изменение схемы исходной таблицы, что делает его несовместимым с материализованным представлением. Дополнительные сведения см. в разделе .create materialized-view command.
    • Если сбой временный, система автоматически повторяет операцию. Однако сбой может отложить материализацию и увеличить возраст материализованного представления. Этот тип сбоя возникает, например, при достижении ограничений памяти или времени ожидания запроса. Дополнительные сведения об устранении временных сбоев см. в следующих рекомендациях.
  • Анализ процесса материализации с помощью команды .show commands-and-queries. Замените имя базы данных и ViewName для фильтрации для определенного представления:

    .show commands-and-queries 
    | where Database  == "DatabaseName" and ClientActivityId startswith "DN.MaterializedViews;ViewName;"
    
    • Проверьте потребление памяти в столбце MemoryPeak, чтобы определить все операции, которые завершилися ошибкой из-за попадания ограничений памяти, например запросов запуска. По умолчанию процесс материализации ограничен пиком памяти в 15 ГБ на узел. Если запросы или команды, выполняемые во время процесса материализации, превышают это значение, материализация завершается ошибкой из-за ограничений памяти. Чтобы увеличить пик памяти на узел, измените группу рабочих нагрузок $materialized представления. Следующий пример изменяет группу рабочих нагрузок материализованных представлений, чтобы использовать максимум 64 ГБ памяти на узел во время материализации:

      .alter-merge workload_group ['$materialized-views'] ```
      {
        "RequestLimitsPolicy": {
          "MaxMemoryPerQueryPerNode": {
            "Value": 68719241216
          }
        }
      } 
      

      Примечание.

      MaxMemoryPerQueryPerNode не может превышать 50% общего объема памяти, доступной на каждом узле.

    • Проверьте, попадает ли процесс материализации в холодный кэш. В следующем примере показана статистика кэша за последний день для материализованного представления, ViewName:

      .show commands-and-queries 
      | where ClientActivityId startswith "DN.MaterializedViews;ViewName"
      | where StartedOn > ago(1d)
      | extend HotCacheHits = tolong(CacheStatistics.Shards.Hot.HitBytes), 
               HotCacheMisses = tolong(CacheStatistics.Shards.Hot.MissBytes), 
               HotCacheRetrieved = tolong(CacheStatistics.Shards.Hot.RetrieveBytes), 
               ColdCacheHits = tolong(CacheStatistics.Shards.Cold.HitBytes), 
               ColdCacheMisses = tolong(CacheStatistics.Shards.Cold.MissBytes), 
               ColdCacheRetrieved = tolong(CacheStatistics.Shards.Cold.RetrieveBytes)
      | summarize HotCacheHits = format_bytes(sum(HotCacheHits)), 
                  HotCacheMisses = format_bytes(sum(HotCacheMisses)),
                  HotCacheRetrieved = format_bytes(sum(HotCacheRetrieved)), 
                  ColdCacheHits =format_bytes(sum(ColdCacheHits)), 
                  ColdCacheMisses = format_bytes(sum(ColdCacheMisses)),
                  ColdCacheRetrieved = format_bytes(sum(ColdCacheRetrieved))
      

      выходных

      HotCacheHits HotCacheMisses HotCacheRetrieved ColdCacheHits ColdCacheMisses ColdCacheRetrieved
      26 ГБ 0 байт 0 байт 1 ГБ 0 байт 866 МБ
    • Проверьте, сканирует ли материализация старые записи, проверив ScannedExtentsStatistics с помощью команды .show запросов. Если количество сканированных экстентов высоко и MinDataScannedTime старое, цикл материализации должен сканировать все или большую часть материализованных части представления. Сканирование необходимо для поиска пересечений с разностным . Дополнительные сведения о разностных и материализованной части см. в разделе Как материализованные представления работают. Следующие рекомендации позволяют уменьшить объем данных, сканируемых в материализованных циклах, свести к минимуму пересечение с разностными.

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

    • Включите в определение представления ключ datetime по группам. Это может значительно уменьшить объем отсканированных данных, , если в этомстолбце нет поздних поступающих данных. Дополнительные сведения см. в советы по повышению производительности. Необходимо создать новое материализованное представление, так как обновления для ключей группирования не поддерживаются.
    • Используйте lookback в рамках определения представления. Дополнительные сведения см. в разделе .create materialized view, поддерживаемые свойствами.
  • Проверьте, достаточно ли емкости приема, проверяя, отображает ли метрика MaterializedViewResult или Metric IngestionUtilization отображать значения InsufficientCapacity. Вы можете увеличить емкость приема, масштабируя доступные ресурсы (предпочтительный) или изменяя политику приема емкости.
  • Проверьте, есть ли достаточно емкости приема, проверяя, отображает ли метрика MaterializedViewResultInsufficientCapacity. Вы можете увеличить емкость приема, масштабируя доступные ресурсы.
  • Если материализованное представление по-прежнему неработоспособно, служба не имеет достаточной емкости или ресурсов для материализации всех данных вовремя. Рассмотрим следующие варианты:

    • Горизонтальное масштабирование кластера путем увеличения минимального количества экземпляров. оптимизированное автомасштабирование не учитывает материализованные представления и не масштабируется автоматически, если материализованные представления неработоспособны. Необходимо задать минимальное количество экземпляров, чтобы предоставить кластеру больше ресурсов для размещения материализованных представлений.
    • Масштабируйте хранилище событий, чтобы предоставить ему дополнительные ресурсы для размещения материализованных представлений. Дополнительные сведения см. в разделе Включение минимальногопотребления.
    • Разделите материализованное представление на несколько небольших представлений, каждый из которых охватывает подмножество данных. Например, их можно разделить на основе ключа высокой кратности из материализованных ключей представления по группам. Все представления основаны на одной исходной таблице, и каждый фильтр представлений по SourceTable | where hash(key, number_of_views) == i, где i входит в набор {0,1,…,number_of_views-1}. Затем можно определить хранимую функцию , которая профсоюзы все небольшие материализованные представления. Используйте эту функцию в запросах для доступа к объединенным данным.

    Разделение представления может увеличить использование ЦП, что снижает пик памяти в циклах материализации. Уменьшение пиковой нагрузки памяти может помочь, если одно представление завершается ошибкой из-за ограничений памяти.

Метрика MaterializedViewResult

Метрика MaterializedViewResult предоставляет сведения о результате цикла материализации и может использоваться для выявления проблем в состоянии работоспособности материализованного представления. Метрика включает Database и MaterializedViewNameResult измерение.

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

  • успех: материализация завершена успешно.

  • SourceTableNotFound: исходная таблица материализованного представления была удалена, поэтому материализованное представление отключается автоматически.

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

  • Недостаточный объем: экземпляр не имеет достаточной емкости для материализации материализованного представления из-за нехватки емкости приема. Хотя сбои емкости могут быть временными, если они часто повторяются, попробуйте выполнить масштабирование экземпляра или увеличить соответствующую емкость в политике.
  • Недостаточный объем: экземпляр не имеет достаточной емкости для материализации материализованного представления из-за нехватки емкости приема. Хотя сбои емкости могут быть временными, если они часто повторяются, попробуйте масштабировать экземпляр или увеличить емкость. Дополнительные сведения см. в разделе Планирование размера емкости.

Материализованные представления в базах данных подписчиков

Материализованные представления можно определить в базах данных подписчиков. Однако мониторинг этих материализованных представлений должен основываться на базе данных лидера, где определяется материализованное представление. В частности:

  • Метрики , связанные с материализованным выполнением представления (MaterializedViewResult, MaterializedViewExtentsRebuild), присутствуют только в базе данных лидера. Метрики, связанные с мониторингом (MaterializedViewAgeSeconds, MaterializedViewHealth, MaterializedViewRecordsInDelta) также отображаются в базах данных подписчиков.
  • Команда .show materialized-view failures работает только в базе данных лидера.

Отслеживание потребления ресурсов

Использование ресурсов материализованных представлений: ресурсы, используемые материализованным процессом материализации представлений .show commands-and-queries , можно отслеживать с помощью команды. Фильтрация записей для определенного представления с помощью следующих элементов (замена DatabaseName и ViewName):

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