¿Cuál es la mejor manera de monitorear consultas de larga duración en SQL Server?


10

Tengo que ejecutar bastantes consultas de larga duración (reconstrucción de índices, actualización de grandes conjuntos de datos) para mi base de datos. ¿Existe alguna alternativa para ejecutar la consulta en SQL Server Management Studio y verificarla cada hora más o menos? Me gustaría recibir un correo electrónico o un mensaje cuando esté listo, pero no conozco la mejor herramienta para esto.

Respuestas:


4

Siguiente publicación de Gaius: puede crear una secuencia de comandos .SQL que haga lo que necesita con el uso de db delante de la secuencia de comandos -> crear un trabajo de Agente SQL del tipo de sistema operativo que llama a la secuencia de comandos:

sqlcmd -E -S SERVERNAME -i "c: \ YOURSCRIPT.sql" -o "C: \ YOURSCRIPT_LOG.log"

Agregue un nuevo paso y use el procedimiento msdb.dbo.sp_send_dbmail para enviar correos electrónicos. Esta característica se puede personalizar para mostrar dentro del correo una consulta específica de las tablas SQL para confirmar la ejecución del script ... por ejemplo dbcc showcontig de sus índices de reconstrucción.


1

¿Tienes la opción de usar trabajos SQL? Puede hacer notificaciones y similares a través de allí. En cuanto a recibir notificaciones intermitentes, eso requeriría algún código dentro de los procedimientos almacenados, etc.


1

Sí, solo usa xp_sendmail . Puede enviar un mensaje preestablecido o los resultados de una declaración SQL con la misma facilidad. Esta característica ha estado disponible desde SQL Server 6.5, sin embargo, debe estar obsoleta en Denali ; si esto va a ser una parte permanente de su operación, entonces debe usar el Correo electrónico de base de datos, que es mucho más "empresarial".


1

Siempre escribo mensajes en una tabla "EventLog". Al procesar grandes cantidades de datos, administro los datos en fragmentos y escribo actualizaciones de estado en EventLog después de cada fragmento.

Cuando quiero verificar el progreso del proceso de larga ejecución, simplemente consulto la tabla EventLog.

Ejemplo de salida:

-------------------
- Mi gran actualización -
-------------------
Inicio: 2011-05-03 10:00:00

Registros a procesar: 1,000,000
Trozos: 200

--- Trozo 1 ---
Intentando actualizar MyTable
Registros actualizados: 5000
Registros restantes: 995,000
Rendimiento: 4210 registros por segundo

--- Trozo 2--
Intentando actualizar MyTable
Registros actualizados: 5000
Registros restantes: 990,000
Rendimiento: 3555 registros por segundo

--- Trozo 3--
etc.

También tengo columnas en la tabla EventLog para rastrear cuándo se escribió el mensaje, qué proceso escribió el mensaje, etc. Perdón por no incluir esa información en mi ejemplo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.