Surviving the Night

El blog de Pablo Doval sobre .NET, SQL, WinDbg...

I Wonder: SQL Server 2005 Express SP2 Panic!!

El otro día llego a mi buzón de entrada un correo de un compañero con el subject "DNN Panic!". El correo hacia referencia, entre otras cosas, a un mensaje de advertencia que aparecía en el errorlog de un SQL Server 2005 Express que estaba sirviendo a un portal DotNetNuke. El mensaje en cuestión aparecía cada dos o tres minutos, y tenía el siguiente aspecto:

SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.

Como debería ser bien sabido por todos los que tenemos que trabajar con o contra un SQL Server, cuando se realizan ciertas operaciones en la base de datos se puede forzar una limpieza de la caché de planes de ejecución (similar a cuando se ejecuta un DBCC FREEPROCACHE, etc...). En principio, salvo casos muy puntuales, no es buena idea, porque al eliminarse la caché, todos los procedimientos almacenados se han de reconstruir; por tanto, las siguientes veces que se invoquen, se perderá cierto tiempo en la recompilación y almacenado de ese plan. Lo mismo es aplicable a las otras cachés que existen en SQL Server.

El mensaje de error que hemos visto es un nuevo mensaje introducido en el SP2, para intentar localizar que posible plan de mantenimiento o tarea esta haciendo limpiando la caché de los planes (o de otro tipo de cachés).

Las operaciones que pueden producir esta limpieza de planes son las siguientes:

  • Comprobación de consistencia mediante DBCC CHECKDB (Solo en SQL Server 2005 RTM o SP1.. en SP2 no se limpian por defecto)
  • Si la base de datos tiene habilitado el autoclose, cada vez que se hace un shutdown de la base de datos se limpia la caché.
  • Poner la base de datos online u offline
  • Poner la base de datos en modo readonly o writeonly
  • Cambiar el nombre de la base de datos, cambiar collation, etc...
  • Hacer un restore de la base de datos
  • Hacer un attach de la base de datos
  • Evidentmente, hacer un DBCC FREEPROCCACHE o un DBCC FREESYSTEMCACHE

En el caso que nos ocupaba (nuestro DNN Panic!! ;) ) se daba el caso más común, es decir, que el autoclose de las bases de datos estaba habilitado. Este es el comportamiento por defecto en la versión Express de SQL Server, ya que facilita el despliegue y movimiento de los ficheros de datos. No obstante, cada vez que se hace un shutdown de la base de datos, se obliga a limpiar las cachés, lo que trae consigo dos consecuencias:

  1. Aparece el molesto mensaje en el errorlog cada vez que se hace un autoclose. Esto es inocuo, excepto porque 'ensucia' el log y luego se complica la tarea de buscar errores o avisos mas severos.
  2. Como se ha explicado, se refleja el que ha habido una limpieza de cachés, con el problema de rendimiento que puede suponer sobre la aplicación debido a la necesidad de creación de nuevo de los planes de ejecución y la población de otras cachés.
Conclusión:

Si tenéis alguna aplicación funcionando en SQL Server Express 2005, aplicad el SP2 y comprobad si os aparecen estos mensajes en el log. Si es así, comprobad si realmente es necesario que tengáis el autoclose establecido, y en caso de que no lo sea, estableced el autoclose a false para evitar perder las cachés.

Os ahorraréis mensajes que ensucian el log y de paso se deberían apreciar mejoras de rendimiento... no obstante, el rendimiento en un SQL Server es algo muy complejo, así que mejor lo dejamos para otra serie de artículos.

Rock Tip:

A este post le he adjudicado el temazo 'I Wonder', de los hardrockeros suizos Gotthard. Muchas veces nos quedamos mirando a un mensaje de error o advertencia y no podemos evitar pensar 'I Wonder... que narices querrá decirme esto...' :)

Dudo mucho que los chicos de Gotthard hayan dedicado su tema a todas esas preguntas que nos hacemos cuando vemos un mensaje extraño en el log de SQL Server; aún así, para mi su 'Lipservice' fue uno de los mejores discos de 2005 y por tanto, aprovecho para recomendarlo a los más duros, pero con corazoncito, de la comunidad geek ;)

Posted: 18/12/2007 0:53 por Pablo Alvarez | con no comments
Archivado en:
Comparte este post: