KB4058565 — POPRAWKA: Błąd asercji podczas wykonywania procedury składowanej, która odwołuje się do dużego obiektu w SQL Server 2014, 2016 i 2017

Dotyczy
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Objawy

Błąd potwierdzenia może wystąpić, gdy firma Microsoft SQL Server wielokrotnie wykonuje procedurę składowaną, która wykonuje następujące czynności:

  • Przyjmuje duży obiekt, taki jak varchar(max) lub varbinary(max), jako argument i
  • Tworzy tabelę tymczasową, której zakres jest ograniczony do wykonywania procedury, oraz
  • Używa argumentu dużego obiektu w tabeli tymczasowej.

W dzienniku błędów programu SQL Server może pojawić się błąd potwierdzenia podobny do następującego:

SPID daty/godziny Błąd: 17065, Ważność: 16, Stan: 1.

Data/godzina SPID Potwierdzenie programu SQL Server: Plik: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Attempt to access expired blob handle (1). 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.

SPID daty/godziny Błąd: 3624, Ważność: 20, Stan: 1.

SPID daty/godziny Sprawdzanie potwierdzeń systemu nie powiodło się. Sprawdź dziennik błędów programu SQL Server, aby uzyskać szczegółowe informacje. Zazwyczaj niepowodzenie asercji jest spowodowane błędem oprogramowania lub uszkodzeniem danych. Aby sprawdzić, czy baza danych nie jest uszkodzona, rozważ uruchomienie polecenia DBCC CHECKDB. Jeśli wyrażono zgodę na wysyłanie zrzutów do firmy Microsoft podczas instalacji, minizrzut zostanie wysłany do firmy Microsoft. Aktualizacja może być dostępna od firmy Microsoft w najnowszym dodatku Service Pack lub w poprawce z pomocy technicznej.

Przyczyna

Program SQL Server ma wewnętrzną logikę wyłączającą buforowanie zapytań odwołujących się do dużych obiektów, dzięki czemu kolejne wykonania nie odwołują się do tych aplikacji LOB (utworzonych podczas poprzednich uruchomień i dlatego są nieprawidłowe dla kolejnych uruchomień). Ta logika nie obsługiwała przypadku odroczonego rozpoznawania nazw (DNR) w tabelach tymczasowych, co powodowało buforowanie tych planów. Tworzenie tabel tymczasowych o określonym zakresie jest kosztowne i SQL Server buforuje je w celu ponownego użycia w kolejnych wykonaniach. Zapobiega to ponownej kompilacji takich zapytań z powodu zmian schematu.

Dowiedz się więcej o rozpoznawaniu nazw z opóźnieniem.

Rozwiązanie

Ten problem został rozwiązany w następujących aktualizacjach zbiorczych programu SQL Server:

Aktualizacja zbiorcza 8 dla programu SQL Server 2016 z dodatkiem SP1

Aktualizacja zbiorcza 4 dla programu SQL Server 2017

Aktualizacja zbiorcza 10 dla programu SQL Server 2014 z dodatkiem Service Pack 2

Informacje o aktualizacjach zbiorczych dla programu SQL Server

Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń z poprzedniej kompilacji. Sprawdź najnowszą aktualizację zbiorczą dla programu SQL Server:

Najnowsza aktualizacja zbiorcza dla programu SQL Server 2016

Najnowsza aktualizacja zbiorcza dla programu SQL Server 2017

najnowsze aktualizacje zbiorcze dla programu SQL Server 2014

Stan

Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.

Źródła informacji

Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.