2011-07-13 14 views
10

Tras mirar alrededor de la red utilizando el tío Google, no puedo encontrar una respuesta a esta pregunta:Evitar el almacenamiento en caché en SQL Server

¿Cuál es la mejor manera de controlar el rendimiento y la capacidad de respuesta de los servidores de producción con IIS y MS SQL Server 2005?

Actualmente estoy usando Pingdom y me gustaría que apunte a una URL que básicamente imita una "consulta del mundo real", pero por razones obvias no quiero que la consulta se ejecute desde la memoria caché. La URL se llamará cada 5 minutos.

No puedo borrar la memoria caché, los búferes, etc. ya que esto afectaría negativamente al servidor de producción. He intentado usar un número generado al azar dentro de la instrucción SELECT para generar consultas únicas, pero la consulta en caché todavía se usa.

¿Hay alguna manera de simular el NO_CACHE en MySQL?

Saludos

+0

Hola Mitch, tenemos 3 servidores, un servidor web, de aplicación y de base de datos. El monitoreo de la página principal no representa el tiempo de consulta o la capacidad de respuesta que experimentan nuestros usuarios, de ahí que la 'consulta en el mundo real' sea ejecutada por un script PHP. He enmendado la pregunta original. –

+0

IIS y 2K5 están en servidores separados. –

Respuesta

3

SQL Server no tiene un caché de resultados como MySQL u Oracle, así que estoy un poco confundido acerca de su pregunta. Si desea que el servidor recompile el caché del plan para un procedimiento almacenado, puede ejecutarlo CON RECOMPRA. Puede soltar su memoria caché de búfer, pero eso afectaría todas las consultas como usted sabe.

En mi empresa, probamos la disponibilidad y el rendimiento por separado. Le sugiero que use esta consulta solo para asegurarse de que su sistema esté trabajando en conjunto desde el front-end a la base de datos, luego escriba otras pruebas que verifiquen los componentes individuales para evaluar el rendimiento. SQL Server viene con una increíble cantidad de formas de comprobar si está experimentando cuellos de botella y dónde están. Uso PerfMon y DMV extensivamente. Utilizando PerfMon, compruebo la vida útil de la CPU y de la página, así como también el tiempo de espera de mi disco. Al usar DMV, puedo averiguar si mis consultas tardan demasiado (sys.dm_exec_query_stats) o si los tiempos de espera son largos (sys.dm_os_wait_stats).

Los dos principales cuellos de botella con IIS tienden a ser CPU y memoria, e IIS viene con su propio conjunto de objetos PerfMon para consultar, pero no estoy tan familiarizado con ellos.

+0

Hola, Noel, el motivo para preguntar es que tengo una consulta que tarda 10 segundos en ejecutarse la primera ronda, la segunda vez lleva solo 2 segundos. Alterar el cliente o la fecha (aún usando la misma tabla, etc.), vuelve a ser 10 segundos para la primera ejecución, 2 segundos para las siguientes ejecuciones. –

+0

Jim, parece que SQL Server almacena en memoria caché las páginas que de otra forma estaría leyendo en el disco y, por lo tanto, ve diferentes tiempos de consulta. Veo que estás tratando de evitar la reutilización del plan a través de los caracteres aleatorios, pero eso no hará que se descarten tus búferes.Tal vez debería colocar un orden de clasificación aleatorio (ORDER BY NEWID()) allí si está agregando TOP x, o debe seleccionar un rango aleatorio de filas cada vez, lo que haría que SQL lea desde el disco (si esas páginas no estaban en la memoria de otras consultas). – Noel

17

vaciar el búfer de SQL y plan de caché:

DBCC DROPCLEANBUFFERS 
GO 
DBCC FREEPROCCACHE 
GO 

Uso DROPCLEANBUFFERS para probar consultas con una caché de tampón frío sin necesidad de apagar y reiniciar el servidor. (source)

Use DBCC FREEPROCCACHE para borrar la memoria caché del plan con cuidado. La liberación de la memoria caché del plan provoca, por ejemplo, la recompilación de un procedimiento almacenado en lugar de su reutilización desde la memoria caché. (source)

+2

Vale la pena mencionar que esto borrará el caché de todo el servidor, por lo que ejecutarlo en un servidor de producción podría no ser la mejor idea. También puede tardar de varios segundos a media hora en completarse, dependiendo de la cantidad de bases de datos y los planes en caché. – Groo

Cuestiones relacionadas