SQL Server nos ofrece desde la versión 2005, menos en su edición Express, informes para facilitarnos una rápida supervisión de nuestras instancias y bases de datos: de usuario o sistema. Estos reportes pueden ser visionados desde Managment Studio de una manera muy fácil realizando una rápida revisión y búsqueda de solución a problemas.
También, uno de los factores más interesantes es que se pueden añadir y visualizar informes personalizados.
Ambos tipos de reportes son una estupenda manera de presentación ante terceros del estado de nuestras instancias, bases de datos o características de ambos, incluido objetos, gracias también a la opción de exportación de los resultados en Excel, pdf y Word que hace poder visualizar el resultado de estos reportes sin la necesidad de SSMS.
Todos estos informes se conectan a la base de datos o instancia y ejecutan consultas contra ellas para obtener un conjunto de resultados, sin importar si estamos conectados a SQL Server o Azure SQL, siempre que dispongamos de los permisos necesarios. Los informes no se actualizan automáticamente, son estáticos dándonos los datos disponibles en el momento en que se ejecutan.
Informes standard
Como indicamos, SQL Server a través del Management Studio nos proporciona un gran listado de informes con una amplia información sobre nuestra instancia o bases de datos. Podemos acceder a ellos haciendo clic con el botón derecho sobre la instancia o base de datos y yendo a Reports/ Standard Reports:
Como vemos en la imagen, a continuación nos aparecerá un listado de informes estándar disponibles de base de datos:
- Uso del disco (Disk Usage): Este informe proporciona una descripción general de la utilización del espacio en disco dentro de la base de datos.
- Uso del disco por las tablas principales (Disk Usage by Top Tables): Este informe proporciona datos detallados sobre la utilización del espacio en disco de las principales 1000 tablas dentro de la base de datos.
- Uso del disco por tabla (Disk Usage by Table): Este informe proporciona datos detallados sobre la utilización del espacio en disco por tablas dentro de la base de datos.
- Uso del disco por partición (Disk Usage by Partition): Este informe detalla los datos sobre la utilización del espacio en disco por índice y por particiones dentro de la base de datos.
- Copia de seguridad y restauración de eventos (Backup and Restore Events): Este informe proporciona datos históricos sobre las acciones de copia de seguridad y restauración realizadas en la base de datos.
- Todas las transacciones (All Transactions): Este informe proporciona detalles sobre todas las transacciones de usuario actuales dentro de una base de datos.
- Todas las transacciones de bloqueo (All Blocking Transactions): Este informe identifica las transacciones dentro de la base de datos que están bloqueando otras transacciones y proporciona detalles sobre ellas.
- Principales transacciones por tiempo (Top Transactions by Age): Este informe identifica la transacción de usuario más antigua en la base de datos.
- Principales transacciones por recuento de transacciones bloqueadas (Top Transactions by Blocked Transactions Count): Este informe identifica las transacciones dentro de la base de datos que están bloqueando el mayor número de otras transacciones.
- Principales transacciones por recuento de bloqueos (Top Transactions by Locks Count): Este informe identifica las transacciones dentro de la base de datos que han obtenido los bloqueos más significativos.
- Estadísticas de bloqueo de recursos por objetos (Resource Locking Statistics by Objects): Este informe enumera todos los objetos dentro de la base de datos en los que se han adquirido los bloqueos y proporciona detalles sobre el tipo de bloqueos retenidos y quién los retiene.
- Estadística de ejecución de objetos (Object Execute Statistics): Este informe proporciona datos históricos detallados de ejecución para todos los planes actualmente en caché para objetos dentro de la base de datos. Estos datos de ejecución se agregan a lo largo del tiempo durante el cual el plan ha estado en la caché.
- Historial de consistencia de la base de datos (Database Consistency history): Este informe proporciona un historial de ejecución de DBCC CHECKDB según lo capturado por el default trace.
- Visión general del análisis de rendimiento de transacciones (Transaction Performance Analysis Overview): Este informe lo ayuda a identificar cuellos de botella en su base de datos y proporciona asistencia para migrarlos a la optimización de memoria (OLTP)
- Estadísticas de uso del índice (Index Usage Statistics): Este informe proporciona detalles sobre el uso de índices individuales dentro de la base de datos, así como datos sobre el costo de su mantenimiento.
- Índice de estadísticas físicas (Index Physical Statistics): Este informe proporciona detalles sobre la fragmentación de los índices dentro de la base de datos.
- Historial de cambios de esquema (Schema Change history): Este informe proporciona un historial de todas las ejecuciones de sentencias DDL confirmadas en la base de datos registrada por la default trace.
- Estadísticas de usuario (User Statistics): Este informe proporciona detalles sobre la actividad de todos los usuarios conectados actualmente dentro de la base de datos.
En cuanto a los informes de instancia nos aparecerán los siguientes:
- Panel del servidor (Server Dashboard): Este informe proporciona información general sobre la instancia de SQL Server, su configuración y la actividad en él.
- Historial de cambios de configuración (Configuration Changes History): Este informe proporciona un historial de todos los cambios sp_configure y Trace Flag registrados por el Default Trace.
- Historial de cambios de esquema (Schema Changes History): Este informe proporciona un historial de todas las ejecuciones de sentencias DDL confirmadas registradas por la Default trace.
- Salud del programador (Scheduler Health): Este informe proporciona datos de actividad detallados en cada uno de los programadores de la instancia.
- Consumo de memoria (Memory Consumption): Este informe proporciona datos detallados sobre el consumo de memoria de los componentes dentro de la instancia, así como también datos históricos sobre los cambios en la marca de memoria de la instancia, según lo registrado por la Default trace.
- Actividad – Todas las transacciones de bloqueo (Activity – All Blocking Trasactions): Este informe proporciona información sobre cada transacción en la instancia que está bloqueando una o más transacciones.
- Actividad – Todos los cursores (Activity – All Cursors): Este informe proporciona información sobre cada Cursor abierto en la instancia.
- Actividad – Cursores principales (Activity – Top Cursors): Este informe identifica los cursores principales de la instancia según la antigüedad, el período de dominación y la utilización de la CPU e IO.
- Actividad – Todas las sesiones (Activity – All Sessions): Este informe proporciona detalles sobre todas las sesiones de usuario activas en la instancia organizada por inicio de sesión.
- Actividad – Top Sesiones (Activity – Top Sessions): Este informe identifica las principales sesiones de usuario en la instancia según la antigüedad, la utilización de la CPU, la utilización de la memoria e IOs.
- Actividad – Sesiones inactivas (Activity – Dormant Sessions): Este informe proporciona detalles sobre las sesiones que han estado inactivas durante más de una hora.
- Actividad – Top conexiones (Activity – Top Connections): Este informe identifica las principales conexiones con la instancia en función de la antigüedad e IOs.
- Transacciones principales por periodo (Top Transaction by Age): Este informe identifica las transacciones más antiguas en la instancia.
- Transacciones principales por recuento de transacciones bloqueadas (Top Transaction by Blocked Transactions Count): Este informe identifica las transacciones en una instancia que están bloqueando el mayor número de otras transacciones.
- Principales transacciones por recuento de bloqueos (Top Transactions by Locks Count): Este informe identifica las transacciones que tienen los bloqueos más significativos en la instancia.
- Rendimiento – Estadísticas de ejecución de lotes (Performance – Batch Execution Statistics): Este informe proporciona datos de ejecución históricos detallados para todos los planes de lotes actualmente en caché. Estos datos de ejecución se agregan a lo largo del tiempo durante el cual el plan ha estado en el caché.
- Rendimiento – Estadísticas de ejecución de objetos (Performance – Object Execution Statistics): Este informe proporciona datos de ejecución históricos detallados para todos los planes de objetos actualmente en caché. Estos datos de ejecución se agregan a lo largo del tiempo durante el cual el plan ha estado en el caché.
- Rendimiento – Consultas principales por tiempo promedio de CPU (Perfomarnce – Top Queries by Average CPU Time): Este informe identifica las consultas que residen actualmente en el caché del plan que han consumido la mayor cantidad de CPU en promedio cada vez que se ejecutan. Estos datos se agregan durante la vida útil del plan en la memoria caché y están disponibles solo para el plan que se encuentra actualmente en la memoria caché.
- Rendimiento – Consultas principales por promedio de IO (Performance – Top Queries by Average IO): Este informe identifica las consultas que residen actualmente en el caché del plan que causaron la mayor cantidad de IO en promedio cada vez que se ejecutan. Estos datos se agregan a lo largo de la vida útil de la LAN en el caché y están disponibles solo para los planes que se encuentran actualmente en el caché.
- Rendimiento – Consultas principales por tiempo total de CPU (Performance – Top Queries by Total CPU Time): Este informe identifica las consultas que residen actualmente en el caché del plan que han consumido la mayor parte del tiempo de CPU en el transcurso de todas sus ejecuciones. Estos datos se agregan durante la vida útil del plan en la memoria caché y están disponibles solo para los planes que se encuentran actualmente en la memoria caché.
- Rendimiento – Top Consultas por Total IO (Performance – Top Queries by Total IO): El informe identifica las consultas que residen actualmente en la memoria caché del plan que causaron la mayor parte de las IO en el transcurso de todas sus ejecuciones. Estos datos se agregan durante la vida útil del plan en la memoria caché y están disponibles solo para los planes que se encuentran actualmente en la memoria caché.
- Estadisticas del Broker Service (Service Broker Statistics): Este informe proporciona datos básicos de nivel de instancia sobre la actividad de Service Broker.
- Estado de envío del registro de transacciones (Transaction Log Shipping Status): Este informe muestra el estado de las configuraciones de envío de registros para las cuales esta instancia de servidor es primaria, secundaria o monitor.
En la versión 2017, Microsoft agregó el informe del Panel de rendimiento (Performance Dashboard) en los informes de instancia, que muestra la utilización de la CPU, los recuentos actuales de sesiones de usuarios y otra información del sistema. Si utilizas una versión anterior a SSMS puedes descargarlos en https://www.microsoft.com/en-us/download/details.aspx?id=29063
Al ejecutar cualquiera de los informes se abrirá el reporte en la ventana de consulta de Managment Studio con información útil e incluso gráficos bastante claros:
Los informes que ejecutemos estarán en la lista de Reports recientes antes de acceder a la lista de Standard Reports. Estas listas son independientes en Instancia, Bases de datos u objetos. También, esta lista puede ser ampliada o reducida en las Opciones/General/Elementos mostrados en listas usados recientemente del SSMS.
IMPORTANTE:
Hay que tener en cuenta que necesitamos ser administradores para la ejecución de los informes o disponer de los permisos de VIEW SERVER STATE y ALTER TRACE.
Informes personalizados
Quizás los informes estándar que nos proporciona Microsoft no cubren todas nuestras necesidades. Parar ello, SQL Sever nos da la opción de cargar nuestros propios informes personalizados. Estos informe se pueden crear utilizando Business Inteligence Development Studio (BIDS) generando un archivo RDL para posteriormente ejecutarlo desde SSMS.
Para no hacer muy extensa de por sí esta entrada dejaremos para un futuro la explicación de crear un reporte aunque Microsoft nos provee de un tutorial básico de como comenzar a crear nuestros propios reports: https://docs.microsoft.com/es-es/sql/reporting-services/create-a-basic-table-report-ssrs-tutorial?view=sql-server-2017
Una vez tengamos nuestros propios informes, para poder ejecutarlos primero debemos copiar los archivos rdl en una carpeta que sea accesible desde SQL Server Management Studio. Posteriormente debemos hacer clic con el botón derecho sobre la instancia o base de datos y yendo a Reports seleccionamos Custom Reports (Informes personalizados) donde buscamos la ubicación del archivo rdl.
SSMS agregará el informe y lo ejecutará inmediatamente en la ventana de consulta. Sin embargo, primero nos mostrara la siguiente advertencia:
Para visualizar el reporte simplemente tendremos que validar.
Por suerte, otros compañeros ya llevan desarrollando reportes mucho tiempo y comparten sus proyectos en la red. Aunque hay bastantes publicados, por nuestra parte os proponemos los informes personalizados de CODEPLEX https://github.com/datafly/SSMSInfoReports que aparte de una amplia información en su sitio sobre su proyecto, nos proporcionan una extensa lista de informes para capturar información de la instancia, estado del almacenamiento, información de rendimiento, bases de datos, tablas, índices, etc:
La lista de reportes de Codeplex en su versión 6.2 es:
- Panel principal del servidor (Main Server Dashboard): este informe nos proporciona una visión general de la instancia.
- Informe de servidor (Server Report): este informe nos proporciona información general de la instancia.
- Informe de todas las bases de datos (All Databases Report): este informe nos proporciona una descripción general de las bases de datos
- Rendimiento del servidor (Server Performance): este informe nos proporicona información de rendimiento de la instancia.
- Informe de la base de datos (Database Report): este informe nos proporciona información general de la base de datos. También podría ejecutarse desde una base de datos en el explorador de objetos.
- Informe de tablas (Tables Report): este informe nos información resumida sobre tablas en una base de datos. También podría ejecutarse desde una base de datos en el explorador de objetos.
- Informe de índice (Index Report): este informe nos proporciona información del índice. También podría ejecutarse desde una base de datos o un objeto de una sola tabla en el explorador de objetos.
- Informe de estadísticas (Statistics Report): este informe nos proporciona información sobre columnas y estadísticas de índice. También podría ejecutarse desde una base de datos, una tabla única o una estadística única.
- Informe de trabajos (Jobs report): este informe nos proporciona un panel para supervisar la ejecución y el rendimiento de los trabajos.
- Informe detallado del trabajo (Job detailed report): este informe nos proporciona información detallada, también se puede ejecutar desde un solo trabajo en SSMS.
Con los informes personalizados hay que tener en cuenta que si se elimina un archivo rdl, la próxima vez que se seleccione el elemento en la lista de reportes recientes aparecerá un mensaje que le indicará que elimine el elemento de la lista de informes.
Conclusiones
Los reportes son una gran característica para una rápida y fácil supervisión de problemas. Estos pueden ayudarnos a solucionar problemas de rendimiento o de cuellos de botella, por ejemplo.
Esto ha sido un resumen puedes ampliar toda la información recurriendo a la documentación oficial: https://docs.microsoft.com/en-us/sql/ssms/object/object-explorer?view=sql-server-2017
¿Los reports son los mismos en todas las versiones?¿Depende del SSMS o de la versión del motor SQL Server?