Compartir a través de


Error 2767 "No se pudieron encontrar estadísticas" cuando se produce un error en la consulta en la réplica secundaria

Se aplica a: SQL Server, Azure SQL Database, Azure SQL Instancia administrada

En este artículo se proporcionan soluciones alternativas para el problema de que se produce un error en una consulta en la réplica secundaria con el error 2767 "No se pudieron encontrar estadísticas".

Síntoma

Al descargar cargas de trabajo de solo lectura en una réplica secundaria de un grupo de disponibilidad AlwaysOn desde una réplica principal, observará que se produce un error en una consulta en la réplica secundaria con el siguiente mensaje de error:

Msg 2767, Level 16, State 1, Procedure sp_table_statistics2_rowset, LineNumber <> [Batch Start Line <LineNumber>]

No se pudieron encontrar las estadísticas "<StatisticsName>" en los catálogos del sistema.

Nota:

<StatisticsName> es las estadísticas generadas por una consulta (AUTO_CREATE_STATISTICS se establece ONen ) que se ejecuta en la réplica principal.

Causa

Este problema se produce porque una transacción activa impide que el registro de invalidación de caché acceda a las estadísticas de la réplica secundaria y actualice las estadísticas.

Solución alternativa

Para solucionar el problema, use uno de los métodos siguientes según sea necesario:

  • SQL Server

    Si el problema se produce en SQL Server, ejecute el siguiente comando en la réplica secundaria para sincronizar las estadísticas almacenadas en caché con las estadísticas del disco:

    DBCC FREESYSTEMCACHE('ALL')
    GO
    
  • Azure SQL Database

    Si el problema se produce en Azure SQL Database, ejecute el cmdlet Invoke-AzSqlDatabaseFailover para conmutar por error la réplica secundaria legible:

    Invoke-AzSqlDatabaseFailover -ResourceGroupName "<ResourceGroupName>" -ServerName "<ServerName>" -DatabaseName "<DatabaseName>" -ReadableSecondary
    

    Este cmdlet conmuta por error la réplica secundaria legible de la base de datos denominada <DatabaseName> en el servidor denominado <ServerName>.

  • Instancia administrada de Azure SQL

    Si el problema se produce en un Crítico para la empresa nivel de servicio de Azure SQL Instancia administrada, ejecute el cmdlet Invoke-AzSqlInstanceFailover para conmutar por error a un nodo secundario de solo lectura:

    Invoke-AzSqlInstanceFailover -ResourceGroupName "<ResourceGroupName>" -Name "<ManagedInstanceName>" -ReadableSecondary
    

    Este cmdlet conmuta por error la réplica secundaria legible del Instancia administrada denominado <ManagedInstanceName>.

  • SQL Server, Azure SQL Database y Azure SQL Instancia administrada

    Para obtener una solución alternativa más permanente, reemplace las estadísticas generadas por las consultas por las estadísticas permanentes. Siga estos pasos:

    1. Para determinar la tabla en la que se definen las estadísticas generadas por consultas, ejecute el siguiente comando en la réplica principal mediante el nombre de las estadísticas en el error 2767:

      SELECT object_name([object_id]) FROM sys.stats WHERE name='<StatisticsName>'
      

      Después de ejecutar el comando, se devuelve el nombre <TableName> de la tabla.

    2. Ejecute el comando DBCC SHOW_STATISTICS mediante el nombre de la tabla y las estadísticas para determinar el nombre de columna:

      DBCC SHOW_STATISTICS('<TableName>', '<StatisticsName>')
      GO
      

      Los resultados siguientes muestran el contenido de las estadísticas <StatisticsName> de la tabla <TableName>y puede ver que las estadísticas se crean en la columna <ColumnName> de la tabla <TableName>.

      Nombre Actualizado
      <StatisticsName> <DateTime>
      Toda la densidad Promedio de longitud Columnas
      0.5 4 <ColumnName>
    3. Para quitar las estadísticas generadas por consultas en la tabla <TableName> de la réplica principal, ejecute el siguiente comando:

      DROP STATISTICS <TableName>.<StatisticsName>
      GO
      
    4. Para crear las estadísticas permanentes en la columna <ColumnName> de la tabla <TableName> de la réplica principal, ejecute el siguiente comando:

      CREATE STATISTICS <PermanentStatistics> ON <TableName>(<ColumnName>)
      GO