segunda-feira, 8 de abril de 2019

CHECKDB rodando a cada minuto? SQL-Server

Dias atrás eu me deparei com uma pergunta nos fóruns onde o usuário estava recebendo essa mensagem no log de erro do SQL Server a cada minuto.
CHECKDB for database 'DBName' finished without errors on [date and time].
This is an informational message only; no user action is required.

Starting up database 'DBName'
Ele não agendou o CHECKDB para rodar a cada minuto e queria saber o que significa esta mensagem? Uma rápida olhada na mensagem informativa indica claramente que o SQL Server não está reportando os resultados do DBCC CHECKDB . Essa mensagem é relatada no log de erros sempre que um banco de dados é iniciado. Este é um recurso adicionado no antigo SQL Server 2005 em diante. Na terceira linha na mensagem acima confirma que o banco de dados está realmente iniciando a cada minuto.

Por que o banco de dados é iniciado a cada minuto?

Isso ocorre porque a propriedade AutoClose para esse banco de dados é definida como True .

Com essa propriedade definida como True , quando a última conexão do usuário é desconectada, o banco de dados é fechado. Quando um usuário se conecta de volta ao banco de dados, o banco de dados é iniciado novamente e a mensagem informativa é registrada no Log de Erros do SQL Server. Quando um banco de dados é inicializado, os recursos são atribuídos a ele e, quando ele é fechado, os recursos são liberados. opção AutoClose é útil em um banco de dados que não é usado com frequência, como em um banco de dados em execução no SQL Server Express Edition. Mas se essa propriedade estiver configurada como True em um banco de dados OLTP ocupado, isso terá um impacto negativo no desempenho da instância.
Até mesmo eu encontrei alguns bancos de dados no ambiente do meu cliente onde a propriedade AutoClose estava definida como True . Como esses bancos de dados eram pequenos em tamanho e não tinham muita importância, não houve impacto. Essa propriedade pode ser desativada usando o diálogo Propriedades do Banco de Dados no SSMS ou usando a consulta a seguir.
ALTER DATABASE [DBName] SET AUTO_CLOSE OFF