2008-11-10 17 views
22

Cuando perfil mi solicitud utilizando SQL Server, que estoy viendo un montón de Audit Login y Auditoría Salir mensajes para las conexiones a la misma base de datos. Me pregunto, ¿esto indica que algo está mal con mi agrupación de conexiones? La razón que pido, es porque me encontré con esto en la documentación de MSDN en lo que respecta a la agrupación de conexiones:SQL agrupación de conexiones y Auditoría de Conexión/Desconexión

conectarse y desconectarse eventos no serán plantearon en el servidor cuando una conexión se obtiene de o devueltos al grupo de conexiones. Esto se debe a que la conexión no se cierra cuando se devuelve al grupo de conexiones. Para obtener más información, vea Inicio de sesión de auditoría Clase de evento y evento de cierre de sesión de auditoría Clase en los libros en línea de SQL Server.

http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

Además, ¿alguien tiene algún consejo para determinar la eficacia de la agrupación de conexiones es para un servidor SQL dado? Tengo muchas bases de datos en un único servidor y sé que esto puede tener un gran impacto, pero me pregunto si existe una manera fácil de obtener métricas sobre la eficacia de mi agrupación de conexiones. ¡Gracias por adelantado!

Respuesta

14

Recuerde que las conexiones se agrupan por conexiones. Si tiene muchas bases de datos y se conecta utilizando muchas conexiones, su aplicación creará una nueva conexión cuando no exista ninguna con la conexión correcta. Luego agrupará esa conexión y, si el grupo está lleno, conectará una conexión existente. El valor predeterminado Max Pool Size es de 100 conexiones, por lo que si circula de forma rutinaria a través de más de 100 bases de datos, cerrará y abrirá conexiones todo el tiempo.

No es ideal, pero puede resolver el problema conectándose siempre a una única base de datos (una cadena de conexión) y luego cambiar el contexto de db 'USE [DBName]'. Hay inconvenientes:

  • Pierde la capacidad de especificar un usuario/pase por cadena de conexión (su usuario de la aplicación necesita permiso para todas las bases de datos).
  • Su SQL se vuelve más complejo (especialmente si está utilizando un ORM predefinido o procs almacenados).

Puede experimentar con aumentar el Tamaño de grupo máximo si el recuento de su base de datos no es enorme. De lo contrario, si algunas bases de datos se utilizan con frecuencia, mientras que otras no, puede desactivar la agrupación en los dbs infrecuentes. Ambos elementos se configuran a través de connectionstring.

En cuanto a las métricas, monitorear los eventos de inicio de sesión y cierre de sesión en SQL Server es un buen comienzo. Si su aplicación se está agrupando bien, no debería ver muchas de ellas.

+0

Esto me clarificó mucho. Gracias. Tal vez puedas ayudarme con esto: ¿Cuál es la diferencia entre la aplicación que golpea una conexión agrupada cuando se alcanza el tamaño máximo de la agrupación y se lanza una excepción que indica que se alcanzó el "tamaño máximo de la agrupación"? – motto

+0

@motto: verá la excepción de "tamaño máximo de la agrupación ..." cuando las conexiones no se cierren. Incluso con un grupo, debe: Cerrar las conexiones para devolverlos al grupo. Una excepción puede impedir que su llamada .Close se ejecute si no está en un bloque "por fin" o "utilizando": http://blogs.msdn.com/tolong/archive/2006/11/21/max-pool-size- was-reached.aspx Recuerde que algunas llamadas de Comando o Adaptador utilizan una conexión implícita y también deben cerrarse de manera segura. Además, tenga cuidado con la creación de objetos de BD en bucles. –

+3

También agregaría que al ejecutar "exec sp_reset_connection", los eventos de auditoría LOGIN/LOGOUT se disparan, aunque la conexión no se haya desconectado. – Martin

30

Mientras que el artículo de MSDN dice que el evento sólo se levantó para las conexiones no reutilizados, la documentación de SQL Server contradice esta afirmación:

"La clase de evento Audit Login indica que un usuario ha iniciado la sesión correctamente a Microsoft SQL Server. Los eventos en esta clase son activados por conexiones nuevas o por conexiones que se reutilizan desde un grupo de conexiones ".

La mejor manera de medir la eficacia de la agrupación es recolectar el tiempo dedicado a conectarse con y sin agrupar.Con la agrupación, debería ver que la primera conexión es lenta y las siguientes son extremadamente rápidas. Sin agrupar, cada conexión llevará mucho tiempo.

Si desea realizar un seguimiento del evento de inicio de sesión de auditoría, puede usar la columna de datos EventSubClass para determinar si el inicio de sesión tiene una conexión reutilizada o una conexión nueva. El valor será 1 para una conexión real y 2 para una conexión reutilizada de pool.application.

+0

Cuando creo un rastreador de perfiles sql, la columna EventSubClass no aparece para los eventos Audit Login y Audit Logout ... ¿Alguien sabe por qué? – Rory

+2

Hay una casilla de verificación "Mostrar todas las columnas" al configurar el seguimiento, EventSubClass luego se convierte en una opción tanto en los eventos Audit Login como Auddit Logout. –

+0

rotary_engine: ¿qué versión de SSMS y SQL Server estás usando? Puedo ver la columna EventSubClass, pero no es una opción para "Audit Login". Gracias – motto

Cuestiones relacionadas