DBCC CHECKDB disparando cada 20 - 60 segundos

13

Tengo un entorno de desarrollo que se acerca rápidamente a la implementación en producción y he notado en los registros que aproximadamente cada 20 segundos veo el mensaje:

Starting up database 'dbname'
CHECKDB for database 'dbname' finished without errors

Noté esto porque los usuarios finales que están probando esto tenían un problema que aislé a un error que noté en el Registro de eventos de Windows (Registro de aplicaciones):

The log for database 'dbname' is not available. Check event log for related messages.

Por cierto, no encontré mensajes relacionados, pero resolví con el ciclo fuera de línea / en línea.

Lo único que se me ocurre es que esta aplicación recopila datos cada 1 ms, pero todos estos datos no se insertan en la base de datos. Al ser un servidor de desarrollo, se configuró para que los registros y los datos estén en la misma unidad. Con estos dos datos en mente, me inclino por que esto sea un problema de E / S y que el servidor esté intentando recuperarse de una pérdida de conexión a su almacenamiento (SAN). Sin embargo, incluso esto no tiene sentido para mí porque no está perdiendo todos los dbs, solo este. ¿Qué otra cosa podría estar causando esto?

Plataforma: SQL Server 2008 R2 (Ent.) En Windows Server 2008 R2 (Std.)

swasheck
fuente

Respuestas:

22

La razón por la que estás viendo esto:

Starting up database 'dbname'
CHECKDB for database 'dbname' finished without errors

Es porque tiene su opción de base de datos establecida para AutoClose.

Para desactivar AutoClose, haga esto:

alter database YourDatabase
set auto_close off
go

Lo que AutoClosehace es cerrar la base de datos después de que se desconecta el último proceso de usuario. Y luego la base de datos "se vuelve a abrir " automáticamente cuando la siguiente conexión de usuario intenta conectarse.

Por lo general, es una buena práctica mantenerse AutoCloseAPAGADO, debido a la latencia obvia para volver a girar la base de datos. Según su pregunta, entiendo que este es un entorno de desarrollo, pero tampoco debería necesitarlo allí (y definitivamente no lo quiere en su entorno de producción).

Además, en DBCC CHECKDBrealidad no está "disparando cada 20 a 60 segundos" según el título de la pregunta, ¡simplemente parece de esa manera!

Desde SQL Server 2005, el valor dbi_dbccLastKnownGood (si está presente) se informa en el registro de errores cada vez que se inicia la base de datos. Entonces solo está viendo la misma información histórica presentada repetidamente.

Este tema se trata en el artículo ¿Por qué SQL Server ejecuta DBCC CHECKDB en mis bases de datos al iniciar el servidor?

Thomas Stringer
fuente