Tenemos un robusto servidor Windows 2008 x64 (CPU de 4 x 4 núcleos, 32 GB de RAM) que ejecuta SQL Server 2005 de 64 bits. Tenemos una base de datos pequeña (6 GB) pero muy importante a la que se accede un poco lento hasta que las páginas se almacenan en la memoria caché (el uso es muy aleatorio de E / S, por lo que las probabilidades son muy bajas de que una página determinada esté en la memoria y los usuarios finales quejarse de la lentitud inicial). Los discos son lo suficientemente rápidos (SAS local de 15K), pero supongo que la aplicación está un tanto torpemente escrita (es una solución COTS), así que me pregunto si hay una manera de "forzar" una base de datos en la memoria en SQL Server 2005 (2008 no es compatible por el proveedor, por lo que no deberíamos actualizar a eso todavía) para ayudar a evitar el blues inicial de llenado de caché?
Mi método actual es que ejecuto un SELECT * desde cada tabla en un script para obtener páginas de datos en la memoria, pero algunos objetos (índices, búsqueda de texto completo, etc.) no se almacenan en caché por este método (y modificar el script para interrogar índices y escriba las cláusulas WHERE apropiadas para almacenar en caché el complejo boil-the-ocean).
fuente
¿Por qué los objetos de la base de datos se vacían de la caché en primer lugar? ¿Está reiniciando los servicios SQL o quitando la base de datos / en línea? ¿O están siendo expulsados por el almacenamiento en caché de otras bases de datos?
Saludos,
SCM.
fuente
Si la base de datos es tan pequeña, ¿considera ponerla en SSD?
fuente
He tenido algunos escenarios en los que la actualización de estadísticas con FULLSCAN en tablas clave ha forzado los datos a la memoria caché e hizo que mis DML posteriores alrededor de esas tablas fueran mucho más rápidos. Y esto no fue el resultado de estadísticas desactualizadas ya que no resultó en cambios en los planes de ejecución.
fuente
¿Por qué no instala una segunda instancia de SQL Server con solo esa base de datos y establece la memoria mínima para esa instancia en 6 GB?
Esto garantizará que sus otras bases de datos nunca saquen memoria de su base de datos "pequeña pero muy importante".
También significará que puede desconectar la otra instancia y su pequeña base de datos permanecerá en la memoria.
fuente
Usaría profiler para verificar tu sql. Compare las lecturas 'lógicas' con las lecturas 'físicas'. El servidor SQL es inteligente y usará la RAM que necesita para obtener los resultados más eficientes.
También verifique que sus autostats estén actualizados.
Sin más idea del tipo de consulta y los tamaños de la tabla db, suena un poco extraño.
fuente