Błąd 17066 lub 17310 podczas uruchamiania programu SQL Server

Dotyczy
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Express SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Express SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Express Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Express Edition

Objawy

Zaraz po ukończeniu odzyskiwania bazy danych i włączeniu połączeń klienckich podczas uruchamiania programu Microsoft SQL Server można zauważyć co najmniej jeden z następujących symptomów.

Objaw 1

W dzienniku błędów programu SQL Server są wyświetlane komunikaty o błędach i potwierdzenia podobne do poniższych:

Uwaga

2014-12-13 08:03:34.85 spid24s Używanie 'dbghelp.dll' wersja '4.0.5'
2014-12-13 08:03:34.85 spid24s **Gwint zrzutu - spid = 0, EC = 0x0000000082274B20
2014-12-13 08:03:34.85 spid24s ***Zrzut stosu wysyłany do C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0001.txt
2014-12-13 08:03:34.85 spid24s * *******************************************************************************
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:34.85 spid24s * ROZPOCZNIJ ZRZUT STOSU:
2014-12-13 08:03:34.85 spid24s * 12/13/14 08:03:34 spid 24
2014-12-13 08:03:34.85 spid24s *
2014-12-13 08:03:34.85 spid24s * Lokalizacja: ghost.cpp:1742
2014-12-13 08:03:34.85 spid24s * Wyrażenie: tcln1 != NULL
2014-12-13 08:03:34.85 spid24s * SPID: 24
2014-12-13 08:03:34.85 spid24s * Identyfikator procesu: 35444
2014-12-13 08:03:34.85 spid24s *

2014-12-13 08:03:35.47 spid24s Błąd: 17066, Istotność: 16, Stan: 1.
2014-12-13 08:03:35.47 spid24s SQL Server Asercja: Plik: <ghost.cpp>, line=1742 Niepowodzenie asercji = 'tcln1 != NULL'. Ten błąd może być związany z chronometrażem. Jeśli błąd będzie się powtarzał po ponownym uruchomieniu instrukcji, sprawdź integralność strukturalną bazy danych za pomocą polecenia DBCC CHECKDB lub uruchom ponownie serwer, aby upewnić się, że struktury danych w pamięci nie są uszkodzone.

Objaw 2

W dzienniku błędów programu SQL Server pojawiają się komunikaty o błędach i wyjątki podobne do poniższych:

Uwaga

2014-12-13 12:38:30.25 spid51 Przy użyciu dbghelp.dll wersji "4.0.5"
2014-12-13 12:38:30.25 spid51 ***Zrzut stosu wysyłany do C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\LOG\SQLDump0003.txt
2014-12-13 12:38:30.25 spid51 SqlDumpExceptionHandler: Proces 51 wygenerował wyjątek krytyczny c0000005 EXCEPTION_ACCESS_VIOLATION. Program SQL Server kończy ten proces.
2014-12-13 12:38:30.25 spid51 * *******************************************************************************
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 * ROZPOCZNIJ ZRZUT STOSU:
2014-12-13 12:38:30.25 spid51 * 12/13/14 12:38:30 spid 51
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 *
2014-12-13 12:38:30.25 spid51 * Adres wyjątku = 000000000030D47C Moduł(sqlservr + 000000000000FD47C)
2014-12-13 12:38:30.25 spid51 * Kod wyjątku = c0000005 EXCEPTION_ACCESS_VIOLATION
2014-12-13 12:38:30.25 spid51 * Nastąpiło naruszenie dostępu: odczyt adresu FFFFFFFFFFFFFFFF
2014-12-13 12:38:30.25 spid51 * Bufor wejściowy 54 bajty -
2014-12-13 12:38:30.25 SPID51 * Exec usp_select1

2014-12-13 12:38:30.77 Błąd serwera: 17310, Ważność: 20, Stan: 1.
2014-12-13 12:38:30.77 Serwer Żądanie użytkownika z sesji z SPID 51 wygenerowało wyjątek krytyczny. SQL Server kończy tę sesję. Skontaktuj się z Pomocą techniczną produktu i przekaż zrzut utworzony w katalogu dziennika.

Naruszenie zasad dostępu będzie miało następujący stos wywołań:

sqlservr! TaskGhostCleanup::IsHashed+0x8d
sqlservr! TaskGhostCleanup::Enqueue+0x32
sqlservr! IndexRowScanner::MoveToRowOnNextPage+0x9c
sqlservr! IndexDataSetSession::GetNextRowValuesInternal+0x11cb

Objaw 3

Po odebraniu komunikatów wymienionych w poprzednich sekcjach symptomów w dzienniku błędów programu SQL Server pojawiają się następujące komunikaty:

Uwaga

2014-12-13 08:04:53.37 Proces serwera 0:0:0 (0x23c8) Pracownik 0x000000002880C1A0 wydaje się nie ustępować w Scheduler 23. Czas utworzenia wątku: 13062953007877. Przybliżony użyty procesor wątku: jądro 0 ms, użytkownik 0 ms. Wykorzystanie procesu 0%. Układ w stanie bezczynności 88%. Interwał: 70013 ms.
2014-12-13 08:04:53.37 Proces serwera 0:0:0 (0x71d8) Pracownik 0x000000002A8D21A0 wydaje się nie ustępować w Harmonogramie 30. Czas utworzenia wątku: 13062953007891. Przybliżony użyty procesor wątku: jądro 0 ms, użytkownik 0 ms. Wykorzystanie procesu 0%. Układ w stanie bezczynności 88%. Interwał: 70013 ms.
2014-12-13 08:04:53.38 Serwer ***Nie można pobrać kontekstu wątku dla spid 0
2014-12-13 08:04:53.38 Serwer* *******************************************************************************
2014-12-13 08:04:53.38 Serwer*
2014-12-13 08:04:53.38 Serwer * ROZPOCZNIJ ZRZUT STOSU:
2014-12-13 08:04:53.38 Serwer * 12/13/14 08:04:53 spid 29488
2014-12-13 08:04:53.38 Serwer*
2014-12-13 08:04:53.38 Serwer * Harmonogram nieyielding
2014-12-13 08:04:53.38 Serwer*
2014-12-13 08:04:53.38 Serwer* *******************************************************************************
2014-12-13 08:04:53.38 Sygnatura stosu serwera dla zrzutu jest 0x0000000000000341
2014-12-13 08:04:55.43 Kod powrotny zewnętrznego procesu zrzutu serwera 0x20000001. Proces zewnętrznego zrzutu nie zwrócił żadnych błędów.
2014-12-13 08:04:55.43 Proces serwera 0:0:0 (0x9358) Pracownik 0x0000000081CE41A0 wydaje się nie ustępować w Harmonogramie 4. Czas utworzenia wątku: 13062953009701. Przybliżony użyty procesor wątku: jądro 0 ms, użytkownik 15 ms. Wykorzystanie procesu 0%. Układ w stanie bezczynności 88%. Interwał: 70011 ms.

Obecnie program SQL Server może nie odpowiadać na żądania użytkowników. W takim przypadku należy ponownie uruchomić usługę, aby naprawić sytuację.

Przyczyna

Ten problem występuje, ponieważ zapytania użytkownika próbują użyć kolejek oczyszczania widm przed całkowitym zainicjowaniem tego procesu.

Rozwiązanie

Informacje o dodatkach Service Pack

Aby rozwiązać ten problem, należy uzyskać dodatek Service Pack 1 dla programu SQL Server 2014.

Aby uzyskać więcej informacji dotyczących dodatku Service Pack 1 (SP1) dla programu SQL Server 2014, zobacz informacje o błędach naprawionych w dodatku Service Pack 1 dla programu SQL Server 2014.

Poprawka dla programu SQL Server 2008 z dodatkiem SP4

Aby rozwiązać ten problem, należy zastosować 3034373 KB: Dla SQL Server 2008 z dodatkiem SP4 dostępny jest pakiet aktualizacji poprawek na żądanie.

Poprawka dla programu SQL Server 2008 R2 z dodatkiem SP3

Aby rozwiązać ten problem, należy zastosować 3033860 KB: Dla SQL Server 2008 R2 z dodatkiem SP3 dostępny jest pakiet aktualizacji poprawek na żądanie.

Informacje o aktualizacji zbiorczej

Ulepszenie funkcji zostało wprowadzone w następującej aktualizacji zbiorczej programu SQL Server.

Zbiorcza aktualizacja 6 dla systemu SQL Server 2014 /pl-pl/pomoc/3031047

Aktualizacja zbiorcza 4 dla dodatku SP2 SQL Server 2012 /en-us/help/3007556

Skumulowana aktualizacja 14 dla SQL Server 2012 z dodatkiem Service Pack 1 /en-us/help/3023636

Informacje o aktualizacjach zbiorczych dla programu SQL Server

Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:

      

Obejście

W celu obejścia tego problemu należy wykonać następujące czynności:

  1. Konfiguruj -T669 jako parametr uruchamiania. Te flagi śledzenia uniemożliwiają użytkownikom wysyłanie zapytań do kolejkowania żądań do procesu oczyszczania widma.
  2. Skonfiguruj alert agenta programu SQL Server, aby wyzwolić zadanie w komunikacie SQL 3408. Na przykład skonfiguruj następujący alert:
    Odzyskiwanie zostało zakończone. To jest tylko komunikat informacyjny. Użytkownik nie musi podejmować żadnych działań.
  3. Wewnątrz tego zadania uruchom skrypt TSQL, aby poczekać od 5 do 10 minut, a następnie uruchom polecenie DBCC TRACEOFF (669,-1).

Ta procedura zapewnia, że flaga śledzenia jest aktywna tylko podczas uruchamiania programu SQL Server. Użycie tej flagi śledzenia nie wpływa na normalne działanie procesu oczyszczania tła.

Stan

Firma Microsoft potwierdziła, że jest to problem z programem SQL Server, i obecnie bada rozwiązanie tego problemu. Ten artykuł z bazy wiedzy Knowledge Base zostanie zaktualizowany o dodatkowe informacje, gdy będą one dostępne.

Źródła informacji

Inside the Storage Engine: Dogłębne czyszczenie duchów
        
         Alerty
        
         sp_add_alert (Transact-SQL)
        
         DBCC TRACEOFF (Transact-SQL)
        
         Śledź flagi
        
         Opcje uruchamiania aparatu bazy danych