Saltar al contenido

Cómo actualizar las estadísticas de las tablas del sistema de una base de datos

Solución:

El script de mantenimiento del índice de Ola tiene parámetro SYSTEM_DATABASES -> All system databases (master, msdb, and model) por UpdateStatistics -> ALL - Update index and column statistics. que también se encarga de actualizar las estadísticas de las bases de datos del sistema.

Además, consulte Estadísticas sobre tablas del sistema y rendimiento de consultas. He visto que es muy raro actualizar las estadísticas en las tablas del sistema a menos que tenga una gran cantidad de objetos en ellas (todavía uso el script de Ola para el mantenimiento del índice semanal en las tablas del sistema).

Como nota al margen: desde que actualizó a SQL Server 2016, ¿está utilizando el nuevo CE? ¿Qué es el modo de compatibilidad ?, ¿se realizaron los pasos posteriores a la actualización?

EDITAR:


Soft NUMA automático es beneficioso: se obtuvo una ganancia del 30% en el rendimiento de las consultas mediante el uso de Soft NUMA y la configuración de MAX DOP adecuada.

Una pequeña nota: no utilice documentos indocumentados sp_MSforeachDB. Puede ser un sql dinámico es una opción mucho mejor.

p.ej

select 'ALTER DATABASE '+quotename(name)+' SET COMPATIBILITY_LEVEL = 130;'
     from sys.databases where database_id > 4 and state_desc="ONLINE"

Si observa constantemente que el comportamiento de las tablas base del sistema se está desactualizando, entonces debe presentar un error de conexión.

Puede “ver” las tablas del sistema sin utilizar la conexión DAC:

SELECT *
FROM sys.objects o
WHERE o.type="S"
ORDER BY o.name

A partir de ahí, puede crear una cadena de comandos TSQL y ejecutarla. (Yo codifiqué sys para el esquema. Es de suponer que esto nunca cambiará):

DECLARE @TSql NVARCHAR(MAX) = ''
SELECT @TSql = @TSql +  'UPDATE STATISTICS sys.' + o.name + ' WITH FULLSCAN;' + CHAR(13) + CHAR(10)
FROM sys.objects o
WHERE o.type="S"
ORDER BY o.name

--Verify/test commands.
PRINT @TSql

--Uncomment and re-run when ready to proceed.
--EXEC sp_executesql @TSql

Esto podría incluirse fácilmente en un paso de trabajo para un trabajo del Agente SQL. Probé esto en SQL Server 2012 con SP3. También ejecuté un código similar en SQL 2008 R2 y SQL 2014. No sé con certeza si funciona en SQL 2016; háganoslo saber si no es así.

Otras notas

los UPDATE STATISTICS Los comandos funcionaron cuando inicié sesión como [sysadmin]. También funcionó si el inicio de sesión no era un miembro de [sysadmin], pero era el propietario de la base de datos. Membresía en [db_owner] solo no era suficiente. (Nuevamente, esto fue en SQL 2012 con SP3. YMMV).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *