DBCC CHECKDB wird alle 20 - 60 Sekunden ausgelöst

13

Ich habe eine Entwicklungsumgebung, die sich schnell der Bereitstellung in der Produktion nähert, und habe in den Protokollen festgestellt, dass ungefähr alle 20 Sekunden die folgende Meldung angezeigt wird:

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

Dies ist mir aufgefallen, weil die Endbenutzer, die dies testen, ein Problem hatten, das ich auf einen Fehler hin isolierte, den ich im Windows-Ereignisprotokoll (Anwendungsprotokoll) festgestellt habe:

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

Im Übrigen habe ich keine verwandten Meldungen gefunden, aber mit Offline / Online-Zyklus behoben.

Das einzige, was ich mir vorstellen kann, ist, dass diese Anwendung alle 1 ms Daten sammelt, aber nicht alle diese Daten in die Datenbank eingefügt werden. Da es sich um einen Entwickler-Server handelt, wurde er so konfiguriert, dass sich Protokolle und Daten auf demselben Laufwerk befinden. In Anbetracht dieser beiden Informationen möchte ich, dass dies ein E / A-Problem ist und der Server versucht, eine Wiederherstellung nach einem Verbindungsverlust zu seinem Speicher (SAN) durchzuführen. Aber selbst das ergibt für mich keinen Sinn, weil es nicht alle DBS verliert, nur diesen einen. Was könnte das noch verursachen?

Plattform: SQL Server 2008 R2 (Ent.) Unter Windows Server 2008 R2 (Std.)

Swasheck
quelle

Antworten:

22

Der Grund, warum Sie dies sehen:

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

Liegt daran, dass Sie Ihre Datenbankoption für festgelegt haben AutoClose.

Gehen Sie folgendermaßen vor, um AutoClose zu deaktivieren:

alter database YourDatabase
set auto_close off
go

Was AutoClosetut , ist Abschalten der Datenbank nach dem letzten Benutzerprozess trennt. Die Datenbank wird dann automatisch " wieder geöffnet ", wenn die nächste Benutzerverbindung versucht, eine Verbindung herzustellen.

In der Regel ist es AutoCloseempfehlenswert, AUS zu lassen, da es offensichtlich zu Verzögerungen beim erneuten Hochfahren der Datenbank kommt. Ich verstehe aus Ihrer Frage, dass dies eine Entwicklungsumgebung ist, aber Sie sollten sie dort auch nicht benötigen (und Sie möchten dies definitiv nicht in Ihrer Produktionsumgebung).

Außerdem DBCC CHECKDBwird nicht tatsächlich alle 20 - 60 Sekunden nach dem Fragentitel geschossen, sondern nur so!

Seit SQL Server 2005 wird der Wert dbi_dbccLastKnownGood (falls vorhanden) bei jedem Start der Datenbank im Fehlerprotokoll gemeldet. Sie sehen also immer wieder dieselben historischen Informationen.

Dieses Thema wird im Artikel behandelt. Warum führt SQL Server beim Serverstart DBCC CHECKDB für meine Datenbanken aus?

Thomas Stringer
quelle