¿El generador de perfiles SQL afecta el rendimiento del servidor?

11

Estoy enfrentando un problema en el que el servidor sql 2008 falla por alguna carga alta. Necesito encontrar ese caso de carga y necesito optimizar el código para que pueda manejar la carga. He encontrado en Internet que el generador de perfiles SQL se puede utilizar para rastrear las interacciones de la base de datos que luego se pueden analizar para encontrar el punto exacto donde ocurre el problema. También he encontrado cómo podemos iniciar el perfilador SQL. Pero ahora mi pregunta es que al iniciar el perfilador sql ¿voy a afectar el rendimiento del servidor?

Jon Seigel
fuente
55
si. Depende de cómo y dónde lo ejecutes. Hecho de la manera correcta puede ser tan poco como un pequeño porcentaje de carga adicional.
Mitch Wheat
3
Los eventos extendidos pueden ser una opción más ligera.
Martin Smith

Respuestas:

10

SQL Server Profiler es una GUI que utiliza SQL Server Trace a través del lado del cliente. Debido a esta naturaleza, sí, puede ver un impacto de rendimiento leve a severo dependiendo del entorno.

SQL Server Profiler es adecuado principalmente para un vistazo rápido de lo que está sucediendo en el servidor (siempre que el servidor de la base de datos pueda manejar la latencia adicional). No está diseñado para ejecutarse durante largos períodos de tiempo. Para rastreos más largos, use un rastreo del lado del servidor o eventos extendidos.

Thomas Stringer
fuente
+1 incluso un seguimiento de perfil muy corto, dependiendo de muchos factores, puede paralizar un servidor.
Aaron Bertrand
3

Si usa el rastreo del lado del servidor , el impacto en el rendimiento puede minimizarse.

David Brabant
fuente
Mi servidor y mi base de datos están instalados en la misma máquina. Ahora, si inicio el perfilador sql a través de "Microsoft SQL Management Studio -> Tools-> SQL profiler", ¿cuánta degradación del rendimiento puedo esperar y en función de qué factores?
Se basa en qué tan ocupado está su servidor, cuántos eventos y cuántas columnas consiste su rastreo, y su filtrado. El filtrado puede afectar en ambas direcciones: de una manera, puede reducir el número de filas que se devuelven a la interfaz de usuario (la parte que realmente hace que el generador de perfiles duela más que el rastreo del lado del servidor), pero, por otro lado, si tiene una mala elección filtro (por ejemplo textdata LIKE '%foo%') puede tener el efecto contrario. Hay demasiadas variables para proporcionar alguna expectativa mágica, solo tendrás que probarlo. Sin embargo, realmente debería usar un rastreo del lado del servidor.
Aaron Bertrand
Pruebe este enlace si no puede acceder al original.
Marc Lopez
3

Todo lo que han dicho los carteles anteriores es correcto. Profiler es una aplicación que, en un momento, usaba DMO y ahora usa SMO para capturar eventos de rastreo. Esto agrega una enorme cantidad de sobrecarga en comparación con el simple uso de un rastreo del lado del servidor.

SMO es una API que agrega un "nivel" adicional al proceso de seguimiento junto con una aplicación cliente, Profiler. Un rastreo del lado del servidor leerá los eventos de rastreo directamente desde una cola de transacciones, cuya sobrecarga resultante es insignificante.

He podido ejecutar rastreos del lado del servidor en entornos de SQL Server que procesan más de 10,000 transacciones por segundo. El uso de Profiler en esos mismos entornos pondrá de rodillas a la instancia de la base de datos. En cualquier entorno de producción, si necesita rastrear la actividad de la base de datos, use siempre un rastreo del lado del servidor. Profiler matará la instancia de la base de datos.

Christopher W. Szabo
fuente
2

Sí, SQL Server Profiler afecta el rendimiento.

Cuando realiza un seguimiento utilizando la GUI, todos los eventos se procesan y filtran de forma sincrónica, por lo que factores como la carga del servidor, la latencia de la red, los eventos que recopila e incluso dónde se almacenan los eventos recopilados, todos contribuyen a la sobrecarga.

Como han sugerido otras respuestas, se prefiere usar un rastreo del lado del servidor en lugar de la GUI. Sin embargo, este método está en desuso y , en su lugar, deben usarse eventos extendidos . (Nota: incluso usando los eventos extendidos, que son más livianos que una traza, aún es posible agregar una cantidad indeseable de carga al servidor; vea la lista en mi segundo párrafo para pensar en cómo minimizar la sobrecarga al configurar un evento sesión.)

En el caso de un servidor con mucha carga, debe tener mucho cuidado con la información que se recopila, ya que el proceso de medición en sí puede afectar el problema que se investiga.

Jon Seigel
fuente
0

SQL Server Profiler funciona en dos pasos: primero le indica que registre todas las consultas. Luego ejecuta algunas transacciones típicas (o simplemente deja que inicie sesión en la producción). Esto crea una "carga de prueba". Luego, realiza el perfil real (análisis) utilizando la carga de prueba.

El registro no es muy costoso, especialmente en comparación con el costo de las consultas en sí.

egrunin
fuente
Mi servidor y mi base de datos están instalados en la misma máquina. Ahora, si inicio el perfilador SQL a través de "Microsoft SQL Management Studio -> Tools-> SQL profiler", ¿cuánta degradación del rendimiento puedo esperar y en función de qué factores?