Sql server 2008, ofrece una serie de parámetros avanzados que permiten mejorar el rendimiento de nuestras consultas. Voy a empezar por uno de los fundamentales, y al que no se le suele hacer mucho caso.
1.- Parámetro de crecimiento de los archivos de la base de datos
Normalmente dejamos la configuracion automatica para este parámetro, pero esto puede traer consecuencias graves según el tamaño y crecimiento de nuestra base datos. La base de datos en SQL Server no crece progresivamente según vamos haciendo INSERTs, si no que va creciendo a "golpes", es decir, cuando se llena, crece por ejemplo un 5% de su tamaño, que queda "en blanco" y se va rellenando. Cuando tenemos bases de datos pequeñas (menos de 1 gb por ejemplo), este parámetro no es importe, pero con bases de datos especialmente grandes, este parametro puede ser crucial. Si por ejemplo tenemos una base de datos de 30 Gb y un crecimiento del 10%, y la base de datos crece con rapidez, cada vez que se llena el espacio, el sistema tiene que aumentar el archivo en 3 GB. Esta operación tiene un coste altísimo en cuanto a Procesador y Uso de Disco, y puede llegar a bloquear nuestra base de datos. Hay que buscar una solución para cada base de datos segun su tamaño y crecimiento. En el caso de una base de datos de 30 Gb, es mas recomendable bajar el porcentaje al 1%, en este caso, el sistema crecera de 300 Mb, una operacion mucho menos costosa que los 3Gb anteriores.
En mi caso detectamos el problema en una base de datos de 24 Gb con un crecimiento automatico del 10%. Cada 15 dias se llenaba ese porcentaje, y tenia que crear 2,4 Gb de espacio. Esto bloqueaba el servidor durante unos 10 minutos. Al bajar el porcentaje al 1% solucionamos el problema y el sistema ya no se cuelga.
2.- Uso de la memoria
Sql server nos permite modificar algunos parámetros de la memoria RAM Asignada, como el numero de Mb, o la opcion AWE. Esta última opcion solo es recomendable cuando tenemos + de 4GB de RAM y queremos aprovecharlos. En cuanto a la RAM asignada, es recomendable no reservar todo la memoria del sistema para el sql server, ya que esto puede llevarnos a un bloqueo del sistema cuando windows se quede sin memoria, ya que SQL SERVER se "come" toda la que puede.
Lo ideal es dejar siempre al menos 1 Gb de memoria para el sistema operativo, este detrimento no debe afectar seriamente al funcionamiento de la base de datos.
3.- Uso de índices en sql server
Sin duda los índices es la herramienta que mas va a mejorar nuestra velocidad de consultas, para los que no sepan como funciona un índice, pongo un ejemplo. Imaginar una guía telefónica desordenada, y sin índice, buscar un telefono de una persona sería una tarea costosísima, en cambio, añadiendo un índice en las primeras páginas indicando donde empieza cada letra, reduciremos el tiempo de búsqueda drásticamente. Con los índices de una base de datos pasa igual. Creando un índice reducimos los tiempos de busqueda, y solo se necesita algo de espacio en disco.
Los mejores resultados los encontraremos para busquedas de texto, ya que las busquedas sin ellos son muy costosas. Para crear un índice en sql server, lo mejor es utilizar el optimizador de consultas, presente a partir de la version 2005. Si le indicamos que consultas sql o vistas queremos optimizar, el sistema nos dirá cuales son los indices que debemos crear y nos generará el codigo sql para hacerlo: