sql >> Base de Datos >  >> RDS >> Database

Funciones obsoletas para sacar de su caja de herramientas - Parte 2

En mi última publicación, ilustré una razón por la que debería dejar de usar tablas de sistema obsoletas como sysprocesses . Esto no fue por razones de rendimiento, directamente, o simplemente para seguir las mejores prácticas documentadas de Microsoft, sino que giró más en torno a las decisiones que podría tomar cuando solo tiene acceso a algunos de los datos.

Esta vez, quiero hablar sobre una función incluida con las herramientas de cliente de SQL Server que no deberíamos usar en estos días, no solo porque está obsoleta sino, lo que es más importante, porque tiene el potencial de acabar con un servidor por completo:

Perfilador de SQL Server

Desde SQL Server 2012 (y, en mucha menor medida, desde SQL Server 2008), la solución más completa y flexible para monitorear eventos en una instancia de SQL Server ha sido Extended Events. Por otro lado, desde que se inventó por primera vez (más o menos cuando comencé mi carrera), SQL Server Profiler ha sido una de las formas más prolíficas de poner de rodillas accidentalmente un servidor.

No hace mucho, nos pasó algo así. Un desarrollador realizó un cambio en su aplicación para reducir la cantidad de viajes de ida y vuelta que realizaba. Ejecutaron la aplicación localmente y en nuestro entorno de desarrollo, utilizando Profiler con un seguimiento filtrado, para confirmar que sus cambios funcionaban como se esperaba. Permítame recordarle en este punto que la documentación oficial de SQL Server Profiler incluye la siguiente advertencia:

SQL Trace y SQL Server Profiler están en desuso. El espacio de nombres Microsoft.SqlServer.Management.Trace que contiene los objetos Trace y Replay de Microsoft SQL Server también está obsoleto. Esta función se eliminará en una versión futura de Microsoft SQL Server. Evite usar esta función en nuevos trabajos de desarrollo y planee modificar las aplicaciones que actualmente usan esta función.

De todos modos, cuando implementaron la nueva versión de su aplicación en producción y se dirigieron al servidor de producción con el mismo seguimiento filtrado, no funcionó tan bien. Su filtro comodín en el nombre de la aplicación no tuvo en cuenta las otras aplicaciones (con nombres similares) que también se conectaban a este servidor, e inmediatamente comenzaron a capturar mucha más información de la que podía manejar su ventana abierta de Profiler. Esto resultó en un aumento catastrófico en el tiempo de conexión para todos los usuarios y aplicaciones que se conectan a esa instancia. Sería un eufemismo decir que se presentaron denuncias.

Cuando se determinó al culpable y obtuvimos una respuesta del desarrollador, puede ver que el tiempo de conexión volvió a la normalidad casi inmediatamente después de que detuvieran el seguimiento de Profiler (haga clic para ampliar):

Un mini-desastre de SQL Server Profiler

Este es definitivamente un escenario en el que la antigua declaración "funcionó en mi máquina" no significa de ninguna manera que funcionará bien en un servidor de producción ocupado. Y este incidente ha dado lugar a una conversación activa sobre la modificación del activador de inicio de sesión que ya existe en todos los servidores de nuestro entorno para simplemente bloquear el nombre de la aplicación que pasa Profiler en su cadena de conexión.

Tal vez no se trate de un problema de Profiler. (Pero en cierto modo lo es.)

No estoy aquí para sugerir que otras herramientas de monitoreo, incluidos los eventos extendidos, no puedan usarse de manera inapropiada para derribar un servidor de una manera similar (¡o peor!). Hay muchas oportunidades para afectar inadvertidamente una instancia de SQL Server, de maneras realmente adversas, sin tocar SQL Server Profiler.

Pero Profiler es conocido por este tipo de síntoma debido a la forma en que consume datos. Es una interfaz de usuario con una cuadrícula que presenta nuevas filas a medida que las recibe; desafortunadamente, hace que SQL Server espere mientras los representa antes de permitir que SQL Server transmita más filas. Este comportamiento es similar a cómo SQL Server Management Studio puede ralentizar las consultas y causar un alto ASYNC_NETWORK_IO espera mientras intenta generar una gran cantidad de salida en su propia cuadrícula. Esa es una simplificación (y no debe confundirse con la forma en que se puede hacer que se comporte el SQL Trace subyacente, que Greg Gonzalez (@SQLsensei) explica en "Don't Fear the Trace"), pero es exactamente lo que conduce a el tipo de escenario que se muestra arriba:ese cuello de botella tiene un efecto en cascada en cualquier otro proceso que intente hacer algo en la misma ruta de código que está rastreando (incluido el intento de establecer una conexión).

¿Miedo a los eventos extendidos?

no seas Ya es hora de que abandonemos Profiler y aceptemos el presente. . No hay escasez de tutoriales y guías, incluido el QuickStart de Microsoft y varios artículos aquí mismo en este sitio.

Si tiene seguimientos existentes en los que confía, Jonathan Kehayias (@SQLPoolBoy) tiene un script realmente útil para convertir un seguimiento existente en eventos extendidos. Todavía puede sentirse libre de configurar el seguimiento original con la interfaz de usuario de Profiler, si es donde se siente más cómodo; solo hágalo sin conectarse a un servidor de producción. Puede leer sobre ese guión aquí y ver algunos de los otros artículos de eventos extendidos de Jonathan aquí.

Si tiene dificultades con la experiencia del usuario, no está solo, pero hay algunas respuestas:

  • Erin Stellato (@erinstellato) ha sido durante mucho tiempo una defensora espectacular de los eventos extendidos y, a menudo, se pregunta en voz alta por qué las personas son reacias a dejar de usar Profiler y SQL Trace en general. Ella tiene una idea (e inspiró muchos comentarios) en su publicación de 2016, "¿Por qué USTED evita los eventos extendidos?"; tal vez haya una idea de si sus razones para esperar siguen siendo válidas en 2021.
  • Hay un XEvent Profiler integrado en las versiones modernas de SSMS, con una extensión equivalente para Azure Data Studio. Aunque, de manera confusa, llamaron a esta extensión, de todas las cosas que uno podría imaginar, Perfilador de SQL Server . Erin también tiene algunas ideas sobre esa elección.
  • Erik Darling (@erikdarlingdata) ha creado sp_HumanEvents para aliviar un poco el dolor de cambiar a eventos extendidos. Erik, una de mis personas favoritas de "mantenerse al grano", describe sp_HumanEvents de la siguiente manera:"Si desea una forma sencilla de generar perfiles de métricas de consulta, estadísticas de espera, bloqueos, compilaciones o recompilaciones con eventos extendidos, este es su unicornio".