Compartir a través de


Supervisión de vistas materializadas

Se aplica a: ✅Microsoft FabricAzure Data Explorer

Supervise el estado de la vista materializada de las maneras siguientes:

Nota:

La materialización nunca omite ningún dato, incluso si hay errores constantes. Siempre se garantiza que la vista devuelva la instantánea más actualizada de la consulta, en función de todos los registros de la tabla de origen. Los errores constantes degradan significativamente el rendimiento de las consultas, pero no provocan resultados incorrectos en las consultas de vista.

Solución de problemas de vistas materializadas incorrectas

Si la métrica MaterializedViewAge aumenta constantemente y la métrica MaterializedViewHealth muestra que la vista es incorrecta, siga estas recomendaciones para identificar la causa principal:

  • Compruebe el número de vistas materializadas en el clúster y la capacidad actual de las vistas materializadas:

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

    de salida

    Recurso Total Consumido
    MaterializedView 1 0
    • El número de vistas materializadas que se pueden ejecutar simultáneamente depende de la capacidad que se muestra en la columna Total, mientras que la columna Consumed muestra el número de vistas materializadas que se están ejecutando actualmente. Puede usar la directiva de capacidad vistas materializadas para especificar el número mínimo y máximo de operaciones simultáneas, reemplazando el nivel de simultaneidad predeterminado del sistema. El sistema determina la simultaneidad actual, que se muestra en Total, en función de los recursos disponibles del clúster. En el ejemplo siguiente se invalida la decisión del sistema y se cambian las operaciones simultáneas mínimas de una a tres:
    .alter-merge cluster policy capacity '{  "MaterializedViewsCapacity": { "ClusterMinimumConcurrentOperations": 3 } }'
    
    • Si cambia explícitamente esta directiva, supervise el estado del clúster y asegúrese de que otras cargas de trabajo no se vean afectadas por este cambio.
  • Compruebe si hay errores durante el proceso de materialización mediante .show errores de vista materializada.

    • Si el error es permanente, el sistema deshabilita automáticamente la vista materializada. Para comprobar si está deshabilitado, use el comando .show materialized-view y compruebe si el valor de la columna IsEnabled es false. A continuación, compruebe el Journal del evento deshabilitado con el comando .show journal. Un ejemplo de error permanente es un cambio de esquema de tabla de origen que hace que sea incompatible con la vista materializada. Para obtener más información, vea comando .create materialized-view.
    • Si el error es transitorio, el sistema reintenta automáticamente la operación. Sin embargo, el error puede retrasar la materialización y aumentar la antigüedad de la vista materializada. Este tipo de error se produce, por ejemplo, al alcanzar límites de memoria o con un tiempo de espera de consulta. Consulte las siguientes recomendaciones para obtener más formas de solucionar errores transitorios.
  • Analice el proceso de materialización mediante el comando .show commands-and-queries. Reemplace databasename y viewName para filtrar por una vista específica:

    .show commands-and-queries 
    | where Database  == "DatabaseName" and ClientActivityId startswith "DN.MaterializedViews;ViewName;"
    
    • Compruebe el consumo de memoria en la columna MemoryPeak para identificar las operaciones que no se pudieron realizar debido a que se alcanzaron límites de memoria, como, por ejemplo, consultas descontroladas. De forma predeterminada, el proceso de materialización se limita a un pico de memoria de 15 GB por nodo. Si las consultas o comandos ejecutados durante el proceso de materialización superan este valor, se produce un error en la materialización debido a los límites de memoria. Para aumentar el pico de memoria por nodo, modifique el grupo de cargas de trabajo $materialized vistas. En el ejemplo siguiente se modifica el grupo de cargas de trabajo de vistas materializadas para usar un máximo de 64 GB de memoria por nodo durante la materialización:

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

      Nota:

      MaxMemoryPerQueryPerNode no puede superar los 50% de la memoria total disponible en cada nodo.

    • Compruebe si el proceso de materialización está alcanzando la caché en frío. En el ejemplo siguiente se muestran las estadísticas de caché durante el último día para la vista materializada, 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))
      

      de salida

      HotCacheHits HotCacheMisses HotCacheRetrieved ColdCacheHits ColdCacheMisses ColdCacheRetrieved
      26 GB 0 bytes 0 bytes 1 GB 0 bytes 866 MB
      • Si la vista no está totalmente en la caché activa, la materialización puede experimentar errores en el disco, lo que ralentiza significativamente el proceso.

      • Aumentar la directiva de almacenamiento en caché de la vista materializada ayuda a evitar errores de caché. Para obtener más información, consulte de la directiva de caché activa y inactiva y comando de almacenamiento en caché de directivas .alter materialized-view.

    • Compruebe si la materialización examina registros antiguos comprobando el ScannedExtentsStatistics con el comando .show de consultas .show. Si el número de extensiones escaneadas es alto y el MinDataScannedTime es antiguo, el ciclo de materialización debe examinar todo, o la mayoría, del materializado parte de la vista. El examen es necesario para buscar intersecciones con el delta de. Para obtener más información sobre el delta de y la parte materializada de, vea Funcionamiento de las vistas materializadas. Las siguientes recomendaciones proporcionan maneras de reducir la cantidad de datos analizados en ciclos materializados al minimizar la intersección con el delta.

  • Si el ciclo de materialización examina una gran cantidad de datos, posiblemente incluida la caché en frío, considere la posibilidad de realizar los siguientes cambios en la definición de vista materializada:

    • Incluya una clave datetime agrupar por en la definición de vista. Esto puede reducir significativamente la cantidad de datos examinados, siempre que no haya datos de llegada tardía en esta columna. Para obtener más información, consulte sugerencias de rendimiento de . Debe crear una nueva vista materializada, ya que no se admiten las actualizaciones de claves de agrupación por.
    • Use un lookback como parte de la definición de vista. Para obtener más información, vea .create materialized view supported properties.
  • Compruebe si hay suficiente capacidad de ingesta comprobando si la métrica MaterializedViewResult o métrica IngestionUtilization muestran InsufficientCapacity valores. Puede aumentar la capacidad de ingesta escalando los recursos disponibles (preferidos) o modificando la directiva de capacidad de ingesta de .
  • Compruebe si hay suficiente capacidad de ingesta comprobando si la métrica MaterializedViewResult muestra InsufficientCapacity valores. Puede aumentar la capacidad de ingesta mediante el escalado de los recursos disponibles.
  • Si la vista materializada sigue siendo incorrecta, el servicio no tiene suficiente capacidad o recursos para materializar todos los datos a tiempo. Tenga en cuenta las siguientes opciones:

    • Escale horizontalmente el clúster aumentando el número mínimo de instancias. escalado automático optimizado no tiene en cuenta las vistas materializadas y no escala horizontalmente el clúster automáticamente si las vistas materializadas son incorrectas. Debe establecer el recuento mínimo de instancias para proporcionar al clúster más recursos para dar cabida a las vistas materializadas.
    • Escale horizontalmente eventhouse para proporcionarle más recursos para dar cabida a vistas materializadas. Para obtener más información, consulte Habilitación del consumo mínimo.
    • Divida la vista materializada en varias vistas más pequeñas, cada una de las cuales abarca un subconjunto de los datos. Por ejemplo, puede dividirlos en función de una clave de cardinalidad alta de las claves de agrupación de la vista materializada. Todas las vistas se basan en la misma tabla de origen y cada vista filtra por SourceTable | where hash(key, number_of_views) == i, donde i forma parte del conjunto {0,1,…,number_of_views-1}. A continuación, puede definir una función almacenada que uniones todas las vistas materializadas más pequeñas. Use esta función en consultas para acceder a los datos combinados.

    Al dividir la vista puede aumentar el uso de la CPU, reduce el pico de memoria en los ciclos de materialización. Reducir el pico de memoria puede ayudar si se produce un error en la vista única debido a los límites de memoria.

Métrica MaterializedViewResult

La métrica MaterializedViewResult proporciona información sobre el resultado de un ciclo de materialización y se puede usar para identificar problemas en el estado de mantenimiento de la vista materializada. La métrica incluye y Database y MaterializedViewName una Result dimensión.

La Result dimensión puede tener uno de los siguientes valores:

  • Success: la materialización se completó correctamente.

  • SourceTableNotFound: se quitó la tabla de origen de la vista materializada, por lo que la vista materializada se deshabilita automáticamente.

  • SourceTableSchemaChange: el esquema de la tabla de origen cambió de una manera que no es compatible con la definición de vista materializada. Dado que la consulta de vista materializada ya no coincide con el esquema de vista materializado, la vista materializada se deshabilita automáticamente.

  • InsuficienteCapacity: la instancia no tiene suficiente capacidad para materializar la vista materializada, debido a la falta de capacidad de ingesta . Aunque los errores de capacidad insuficientes pueden ser transitorios, si se vuelven a repetir a menudo, intente escalar horizontalmente la instancia o aumentar la capacidad pertinente en la directiva.
  • InsufficientCapacity: la instancia no tiene capacidad suficiente para materializar la vista materializada, debido a la falta de capacidad de ingesta. Aunque los errores de capacidad insuficientes pueden ser transitorios, si se repiten con frecuencia, pruebe a escalar horizontalmente la instancia o aumentar la capacidad. Para obtener más información, consulte Planear el tamaño de capacidad.
  • InsufficientResources: la base de datos no tiene recursos suficientes (CPU/memoria) para materializar la vista materializada. Aunque los errores de recursos insuficientes pueden ser transitorios, si se vuelven a repetir a menudo, intente escalar o escalar horizontalmente. Para obtener más ideas, consulte Solución de problemas de vistas materializadas incorrectas.

Vistas materializadas en bases de datos de seguidor

Las vistas materializadas se pueden definir en bases de datos de seguidor. Sin embargo, la supervisión de estas vistas materializadas debe basarse en la base de datos líder, donde se define la vista materializada. Específicamente:

  • Las métricas relacionadas con la ejecución de vistas materializadas (MaterializedViewResult, MaterializedViewExtentsRebuild) solo están presentes en la base de datos líder. Las métricas relacionadas con la supervisión (MaterializedViewAgeSeconds, MaterializedViewHealth, MaterializedViewRecordsInDelta) también aparecen en las bases de datos del seguidor.
  • El comando .show materialized-view failures solo funciona en la base de datos líder.

Seguimiento del consumo de recursos

Consumo de recursos de vistas materializadas: los recursos consumidos por el proceso de materialización de vistas materializadas se pueden realizar mediante el .show commands-and-queries comando . Filtre los registros de una vista específica mediante lo siguiente (reemplace DatabaseName y ViewName):

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