web-dev-qa-db-fra.com

DBCC CheckDB tiers toutes les 20 à 60 secondes

J'ai un environnement de développement qui approche rapidement du déploiement en production et j'ai remarqué dans les bûches qui environ toutes les 20 secondes que je vois le message:

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

J'ai remarqué cela parce que les utilisateurs finaux qui testent cela avaient un problème que je suis isolé à une erreur que j'ai remarquée dans le journal des événements Windows (journal d'application):

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

Incidemment, je n'ai trouvé aucun message associé mais résolu avec le cycle hors ligne/en ligne.

La seule chose à laquelle je puisse penser, c'est que cette application recueille des données toutes les 1 ms, mais toutes ces données ne sont pas insérées dans la base de données. En tant que serveur de devir, il a été configtenu afin que les journaux et les données soient sur le même lecteur. Avec ces deux informations à l'esprit, je m'appuyais dans cette question IO et que le serveur tente de récupérer une perte de connexion à son stockage (SAN). Pourtant, même cela n'a pas de sens pour moi car il ne perd pas tous les DBS, juste celui-ci. Que pourrait-on causer cela?

Plateforme: SQL Server 2008 R2 (ENT.) SUR Windows Server 2008 R2 (STD.)

13
swasheck

La raison pour laquelle vous voyez cela:

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

Est parce que vous avez votre option de base de données définie pour AutoClose.

Pour désactiver l'autoclose, faites ceci:

alter database YourDatabase
set auto_close off
go

Qu'est-ce que AutoClose fait l'arrêt de la base de données après la déconnexion du dernier processus utilisateur. Puis la base de données automatiquement " rouvre " lorsque la prochaine connexion utilisateur tente de se connecter.

Typiquement, il est préférable de garder AutoClose éteint, en raison de la latence évidente de faire tourner la base de données à nouveau. Je comprends de votre question selon laquelle il s'agit d'un environnement de développement, mais vous ne devriez pas en avoir besoin là-bas (et vous ne voulez certainement pas cela dans votre environnement de production).

En outre DBCC CHECKDB ne fait pas "tirer toutes les 20 à 60 secondes" par le titre de la question, il apparaît juste comme ça!

Étant donné que SQL Server 2005 la valeur DBI_DBCCLASLASTKOOKOOD (si présent) est signalée dans le journal d'erreur chaque fois que la base de données est démarrée. Donc, vous venez de voir les mêmes informations historiques présentées à plusieurs reprises.

Cette rubrique est couverte dans l'article Pourquoi SQL Server exécute DBCC Checkdb contre mes bases de données au démarrage du serveur?

22
Thomas Stringer