DBCC CHECKDB tirant toutes les 20 à 60 secondes

13

J'ai un environnement de développement qui approche rapidement du déploiement en production et j'ai remarqué dans les journaux que toutes les 20 secondes environ, 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 testaient cela avaient un problème que j'ai isolé à une erreur que j'ai remarquée dans le journal des événements Windows (journal des applications):

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

Soit dit en passant, je n'ai trouvé aucun message connexe mais résolu avec un cycle hors ligne / en ligne.

La seule chose à laquelle je peux penser est que cette application collecte des données toutes les 1 ms, mais toutes ces données ne sont pas insérées dans la base de données. Étant un serveur de développement, il a été configuré pour que les journaux et les données soient sur le même lecteur. Avec ces deux informations à l'esprit, je penche pour qu'il s'agisse d'un problème d'E / S et que le serveur tente de se remettre d'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-il y avoir d'autre?

Plateforme: SQL Server 2008 R2 (Ent.) Sur Windows Server 2008 R2 (Std.)

swasheck
la source

Réponses:

22

La raison pour laquelle vous voyez ceci:

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

Est-ce parce que votre option de base de données est définie pour AutoClose .

Pour désactiver la fermeture automatique, procédez comme suit:

alter database YourDatabase
set auto_close off
go

Ce AutoClosequi est arrêté la base de données après la déconnexion du dernier processus utilisateur. Et puis la base de données automatiquement " rouvre " lorsque la prochaine connexion utilisateur tente de se connecter.

Il est généralement recommandé de conserver AutoClose désactiver, en raison de la latence évidente de la rotation de la base de données. Je comprends de votre question qu'il s'agit d'un environnement de développement, mais vous ne devriez pas en avoir besoin non plus (et vous ne voulez certainement pas cela dans votre environnement de production).

en outre DBCC CHECKDB n'est pas réellement "tirer toutes les 20 - 60 secondes" selon le titre de la question, cela apparaît comme ça!

Depuis SQL Server 2005, le dbi_dbccLastKnownGood valeur (si présente) est signalée dans le journal des erreurs à chaque démarrage de la base de données. Vous ne voyez donc que les mêmes informations historiques présentées à plusieurs reprises.

Cette rubrique est traitée dans l'article Pourquoi SQL Server exécute DBCC CHECKDB sur mes bases de données au démarrage du serveur?

Thomas Stringer
la source