sql >> Base de Datos >  >> RDS >> Sqlserver

Actualice las estadísticas de SQL Server utilizando un plan de mantenimiento de la base de datos

Las copias de seguridad de la base de datos, las comprobaciones de integridad y las optimizaciones de rendimiento son tareas básicas habituales de los administradores de bases de datos. Los datos del cliente son muy importantes para que un DBA administre la copia de seguridad de la base de datos y se asegure de la integridad de las copias de seguridad. Entonces, si algo sale mal con una base de datos de producción, se puede recuperar con un tiempo de inactividad mínimo. Las comprobaciones de integridad de la base de datos también son importantes porque, en el caso de corrupción de la base de datos, se puede corregir con un tiempo de inactividad y una pérdida de datos mínimos. La gestión del rendimiento de la base de datos también es importante. Administrar el rendimiento de la base de datos es una combinación de varias tareas.

  1. Identifique la lista de consultas que consumen muchos recursos y ayude a los desarrolladores a reescribirlas.
  2. Cree y administre índices en la tabla. Además, realice la desfragmentación del índice para asegurarse de que se mantengan en buen estado.
  3. Finalmente, gestión de estadísticas de tablas.

En mi artículo anterior, cubrí el tema de las estadísticas de creación automática y las estadísticas de actualización automática y cómo pueden ayudar a mejorar el rendimiento. En este artículo voy a explicar cómo crear y programar el plan de mantenimiento para actualizar las estadísticas.

Primero, permítanme explicar qué son las estadísticas de SQL Server y cómo pueden ayudar a aumentar el rendimiento del servidor SQL.

Estadísticas de SQL Server y su importancia

Las estadísticas son metadatos utilizados por el optimizador de consultas de SQL Server, lo que ayuda a determinar la mejor manera de recuperar los datos. El optimizador utiliza estadísticas para comprender los datos, su distribución y el número de filas que es probable que devuelva una consulta determinada a partir de las estadísticas disponibles. Basándose en esta información, decide la ruta óptima de acceso a los datos. También determina si hacer un escaneo de tabla o una búsqueda de índice, usar una unión de bucle anidado o una unión hash, etc.

Si las estadísticas no están actualizadas o si no están disponibles, el optimizador puede elegir el plan de ejecución deficiente, lo que reduce significativamente el rendimiento de la consulta. SQL Server puede mantener estadísticas automáticamente y actualizarlas en función de su seguimiento de las modificaciones de datos.

Las estadísticas se pueden crear y actualizar automáticamente habilitando "Crear estadísticas automáticamente" y "Estadísticas de actualización automática". Sin embargo, para algunas tablas, como las que están sujetas a cambios significativos en la distribución de datos, es posible que la actualización automática de estadísticas de SQL Server sea insuficiente para mantener altos niveles de rendimiento de consultas.

Antes de explicar los diferentes enfoques para actualizar las estadísticas, permítanme explicar las diferentes formas de revisar las estadísticas creadas en cualquier tabla.

Cómo revisar las estadísticas

Podemos ver estadísticas de columna y estadísticas de índice

  1. Uso de SQL Server Management Studio.
  2. Uso de procedimientos almacenados del sistema y catálogos del sistema y vistas de administración dinámica

Ver estadísticas con SQL Server Management Studio

Por ejemplo, quiero ver las estadísticas creadas en [HumanResources].[Empleado] tabla creada en AdventureWorks2017 base de datos. Para ello, inicie SQL Server Management Studio. Luego expanda el AdventureWorks2017 base de datos, expanda [HumanResources].[Empleado] mesa. Ver la siguiente imagen:

Uso de procedimientos almacenados del sistema y vistas de administración dinámica

Si usa una versión anterior de SQL Server, puede usar sp_helpstats procedimiento del sistema para revisar las estadísticas de las tablas. sp_helpstats mostrará las estadísticas, creadas por SQL Server o por un usuario. No mostrará las estadísticas creadas por Index. Para demostrarlo, he creado una estadística llamada User_Statistics_BirthDate en [Recursos humanos].[Empleado] mesa.

El siguiente es el ejemplo:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

El siguiente es el resultado.

Puede revisar las estadísticas consultando sys.stats catálogo del sistema. Proporciona información sobre las estadísticas creadas por SQL Server, creadas por índices y creadas por un usuario.

Ejecute la siguiente consulta:

SELECT NAME         AS 'STATISTICS NAME', 
       AUTO_CREATED AS 'CREATED AUTOMATICALLY', 
       USER_CREATED AS 'CREATED BY USER' 
FROM   SYS.STATS 
WHERE  OBJECT_ID = OBJECT_ID('HUMANRESOURCES.EMPLOYEE')

El siguiente es el resultado:

Ahora, unamos esta tabla con otros catálogos del sistema para obtener información detallada sobre las estadísticas. Para hacer eso, ejecute la siguiente consulta:

SELECT [SCHEMAS].[NAME] + '.' + [OBJECTS].[NAME] AS [TABLE_NAME], 
       [INDEXES].[INDEX_ID]                      AS [INDEX ID], 
       [STATS].[NAME]                            AS [STATISTIC], 
       STUFF((SELECT ', ' + [COLUMNS].[NAME] 
              FROM   [SYS].[STATS_COLUMNS] [STATS_COLUMN] 
                     JOIN [SYS].[COLUMNS] [COLUMNS] 
                       ON [COLUMNS].[COLUMN_ID] = [STATS_COLUMN].[COLUMN_ID] 
                          AND [COLUMNS].[OBJECT_ID] = [STATS_COLUMN].[OBJECT_ID] 
              WHERE  [STATS_COLUMN].[OBJECT_ID] = [STATS].[OBJECT_ID] 
                     AND [STATS_COLUMN].[STATS_ID] = [STATS].[STATS_ID] 
              ORDER  BY [STATS_COLUMN].[STATS_COLUMN_ID] 
              FOR XML PATH('')), 1, 2, '')       AS [COLUMNS_IN_STATISTIC] 
FROM   [SYS].[STATS] [STATS] 
       JOIN [SYS].[OBJECTS] AS [OBJECTS] 
         ON [STATS].[OBJECT_ID] = [OBJECTS].[OBJECT_ID] 
       JOIN [SYS].[SCHEMAS] AS [SCHEMAS] 
         ON [OBJECTS].[SCHEMA_ID] = [SCHEMAS].[SCHEMA_ID] 
       LEFT OUTER JOIN [SYS].[INDEXES] AS [INDEXES] 
                    ON [OBJECTS].[OBJECT_ID] = [INDEXES].[OBJECT_ID] 
                       AND [STATS].[NAME] = [INDEXES].[NAME] 
WHERE  [OBJECTS].[OBJECT_ID] = OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') 
ORDER  BY [STATS].[USER_CREATED] 

GO

La consulta anterior completa los siguientes detalles

  1. La tabla en la que se crean las estadísticas.
  2. ID de índice.
  3. Nombre de las estadísticas.
  4. Columnas incluidas en estadísticas.

El siguiente es el resultado:

En la siguiente sección, explicaré diferentes formas de actualizar las estadísticas.

Diferentes enfoques para la actualización de estadísticas

Podemos actualizar las estadísticas de las siguientes formas:

  1. Cree un plan de mantenimiento de SQL Server.
  2. Crear utilizando el script personalizado.
  3. Ejecute manualmente el comando de actualización de estadísticas en una tabla individual.

En primer lugar, explicaré cómo podemos crear un plan de mantenimiento para actualizar las estadísticas.

Crear un plan de mantenimiento de SQL Server para actualizar las estadísticas

Ahora, en esta demostración, crearemos un plan de mantenimiento de estadísticas de actualización para actualizar las estadísticas. El plan de mantenimiento realizará las siguientes tareas:

Primero Cree un plan de mantenimiento. Para hacerlo, abra SQL Server Management Studio. Expanda la instancia del servidor SQL>> Carpeta de administración>> En Administración, haga clic con el botón derecho en Planes de mantenimiento y seleccione Nuevo plan de mantenimiento. Ver la siguiente imagen:

El Nuevo Plan de Mantenimiento se abre el cuadro de diálogo. En el cuadro, proporcione un nombre para el plan de mantenimiento y haga clic en Aceptar. Ver la siguiente imagen:

Se abre el diseñador del plan de mantenimiento. En la caja de herramientas del diseñador del plan de mantenimiento, arrastre y suelte "Tarea de actualización de estadísticas" en la ventana del diseñador. Ver la siguiente imagen:

Ahora haga doble clic en Tarea de actualización de estadísticas . La tarea de actualización de estadísticas se abre el cuadro de diálogo. En el cuadro de diálogo, hay opciones que se pueden usar para personalizar el plan de mantenimiento. Ver la siguiente imagen:

Podemos personalizar las siguientes opciones sobre el uso de Actualizar estadísticas Plan de mantenimiento.

  1. Actualiza las estadísticas de todos los objetos de una base de datos específica. Ver la siguiente imagen:
  2. Objetos específicos de bases de datos seleccionadas. Puede actualizar las estadísticas de Todas las tablas y vistas / Tablas y vistas específicas. Ver la siguiente imagen:

    Si elegimos Tablas o Vistas, SQL completará el nombre de las vistas o tablas en la selección caja de diálogo. Ver la siguiente imagen:
  3. La tercera opción es Actualizar . Podemos actualizar todas las estadísticas de tablas/vistas, o podemos optar por actualizar solo las estadísticas de columna (estadísticas creadas en columnas no indexadas), o podemos elegir solo estadísticas de índice (estadísticas creadas por índices). Ver la siguiente imagen:
  4. También podemos seleccionar el tipo de análisis de cualquier estadística. Podemos elegir Análisis completo o Muestra por un porcentaje especificado o filas especificadas. Ver la siguiente imagen:

Ahora, como mencioné, crearemos una tarea de mantenimiento que actualizará las estadísticas de todas las tablas dentro de AdventureWorks2017 base de datos con un escaneo completo. Por lo tanto, elija las opciones en consecuencia. Una vez que se configura la tarea de mantenimiento, se ve así:

Una vez que la tarea de mantenimiento esté configurada correctamente, cierre el cuadro de diálogo de estadísticas de actualización. Después de la configuración, el plan de mantenimiento tiene el siguiente aspecto:

Una vez que se crea el plan de mantenimiento, programemos el plan de mantenimiento. Para ello, haga clic en el icono de calendario que se encuentra junto a la Descripción. columna. Ver la siguiente imagen:

Una vez que hace clic en el botón del calendario, se abre un cuadro de diálogo para configurar la programación del trabajo. Ver la siguiente imagen:

Como mencioné, nuestro plan de mantenimiento de estadísticas de actualización se ejecutará todos los domingos a las 4:00 a.m. Entonces configuraremos el horario de trabajo en consecuencia. La programación de trabajos es sencilla. Una vez que configure la programación, el cuadro de diálogo tendrá el siguiente aspecto:

Una vez que se configura un cronograma de ejecución, todo el plan de mantenimiento se ve como la siguiente imagen. Guarde el plan de mantenimiento y cierre la ventana.

Ahora, ejecutemos este plan de mantenimiento ejecutando el trabajo SQL creado por el plan de mantenimiento. Para abrir Trabajos SQL, expanda Agente SQL Server y ampliar Empleos . Puede ver el trabajo de SQL creado por el plan de mantenimiento de SQL. Ahora, para ejecutar el trabajo, haga clic con el botón derecho en Actualizar estadísticas semanalmente.Semanalmente.Subplan_1 y haga clic en Iniciar trabajo en el paso . Ver la siguiente imagen.

Una vez que se completa el trabajo, puede ver el siguiente cuadro de diálogo de ejecución exitosa del trabajo.

Resumen

En este artículo, he cubierto:

  1. Una explicación detallada de las estadísticas de SQL Server y su importancia.
  2. Diferentes opciones para actualizar las estadísticas.
  3. Un ejemplo funcional de la creación de un plan de mantenimiento de SQL para actualizar las estadísticas.

En mi próximo artículo, explicaré varios comandos T-SQL para actualizar las estadísticas. Además, explicaré un script T-SQL que actualizará las estadísticas en función del volumen de cambios de datos que ocurrieron después de la inserción/actualización/eliminación en la tabla.