DBCC CHECKDB odpalanie co 20–60 sekund

13

Mam środowisko deweloperskie, które szybko zbliża się do wdrożenia w środowisku produkcyjnym i zauważyłem w logach, że mniej więcej co 20 sekund widzę komunikat:

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

Zauważyłem to, ponieważ użytkownicy końcowi, którzy to testują, mieli problem, który wyizolowałem, z błędem, który zauważyłem w Dzienniku zdarzeń systemu Windows (Dziennik aplikacji):

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

Nawiasem mówiąc, nie znalazłem żadnych powiązanych wiadomości, ale zostały rozwiązane w trybie offline / online.

Jedyne, co mogę wymyślić, to to, że ta aplikacja zbiera dane co 1 ms, ale wszystkie te dane nie są wstawiane do bazy danych. Jako serwer deweloperski został skonfigurowany tak, aby logi i dane znajdowały się na tym samym dysku. Mając na uwadze te dwie informacje, skłaniam się ku temu, aby być problemem IO i że serwer próbuje odzyskać utracone połączenie z pamięcią masową (SAN). Jednak nawet to nie ma dla mnie sensu, ponieważ nie traci wszystkich dbs, tylko ten. Co jeszcze może być przyczyną?

Platforma: SQL Server 2008 R2 (Ent.) W systemie Windows Server 2008 R2 (Stand.)

swasheck
źródło

Odpowiedzi:

22

Powód, dla którego to widzisz:

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

Jest tak, ponieważ masz ustawioną opcję bazy danych AutoClose.

Aby wyłączyć AutoClose, wykonaj następujące czynności:

alter database YourDatabase
set auto_close off
go

Co AutoClosepowoduje zamknięcie bazy danych po rozłączeniu ostatniego procesu użytkownika. A następnie baza danych automatycznie „ otwiera się ponownie ”, gdy następne połączenie użytkownika próbuje się połączyć.

Zazwyczaj najlepszą praktyką jest pozostawanie AutoCloseWYŁĄCZONYM z powodu oczywistego opóźnienia ponownego uruchomienia bazy danych. Rozumiem z twojego pytania, że ​​jest to środowisko programistyczne, ale nie powinieneś go też tam potrzebować (i zdecydowanie nie chcesz tego w środowisku produkcyjnym).

Co więcej, DBCC CHECKDBtak naprawdę nie jest to „strzelanie co 20–60 sekund” według tytułu pytania, po prostu tak to wygląda!

Od SQL Server 2005 wartość dbi_dbccLastKnownGood (jeśli występuje) jest raportowana w dzienniku błędów przy każdym uruchomieniu bazy danych. Widzisz tylko te same informacje historyczne prezentowane wielokrotnie.

Ten temat jest omówiony w artykule Dlaczego program SQL Server uruchamia DBCC CHECKDB na moich bazach danych podczas uruchamiania serwera?

Thomas Stringer
źródło