KB4058565 - FIX: Beweringsfout bij het uitvoeren van een opgeslagen procedure die verwijst naar een groot object in SQL Server 2014, 2016 en 2017

Van toepassing op
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)

Symptomen

Er kan een beweringsfout optreden wanneer Microsoft SQL Server herhaaldelijk een opgeslagen procedure uitvoert die het volgende uitvoert:

  • Neemt een groot object, zoals varchar(max) of varbinary(max), als een argument, en
  • Hiermee maakt u een tijdelijke tabel die is afgestemd op de uitvoering van de procedure, en
  • Hiermee wordt het argument groot object in de tijdelijke tabel gebruikt.

De beweringsfout die op de volgende lijkt, kunt u vinden in het foutenlogboek van SQL Server:

Datum/tijd SPID Fout: 17065, ernst: 16, toestand: 1.

Datum/tijd SPID SQL Server-bevestiging: File: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Poging om toegang te krijgen tot verlopen blobingang (1). Deze fout kan betrekking hebben op de timing. Als de fout zich blijft voordoen nadat de instructie opnieuw is uitgevoerd, gebruikt u DBCC CHECKDB om de database te controleren op structurele integriteit, of start u de server opnieuw op om ervoor te zorgen dat gegevensstructuren in het geheugen niet beschadigd zijn.

Datum/tijd SPID Fout: 3624, ernst: 20, toestand: 1.

Datum/tijd SPID Een systeembevestigingscontrole is mislukt. Controleer het foutenlogboek van SQL Server voor meer informatie. Meestal wordt een beweringsfout veroorzaakt door een softwarefout of gegevensbeschadiging. Als u wilt controleren op beschadigde databases, kunt u DBCC CHECKDB uitvoeren. Als u tijdens de installatie hebt afgesproken om dumps naar Microsoft te verzenden, wordt er een minidump naar Microsoft verzonden. Er is mogelijk een update beschikbaar van Microsoft in het nieuwste servicepack of in een hotfix van technische ondersteuning.

Oorzaak

SQL Server beschikt over interne logica om caching van query's die naar grote objecten verwijzen uit te schakelen, zodat volgende uitvoeringen niet verwijzen naar die LOB's (die zijn gemaakt tijdens eerdere uitvoeringen en daarom ongeldig zijn voor volgende uitvoeringen). Die logica had geen betrekking op het DNR-geval (Deferred Name Resolution ) in tijdelijke tabellen die ervoor zorgden dat die plannen in de cache werden opgeslagen. Het maken van tijdelijke tabellen met een bereik is duur en deze worden door SQL Server in de cache opgeslagen voor hergebruik in volgende uitvoeringen. Hierdoor worden dergelijke query's niet opnieuw samengesteld vanwege schemawijzigingen.

Meer informatie over Uitgestelde naamresolutie.

Oplossing

Dit probleem is opgelost in de volgende cumulatieve updates voor SQL Server:

Cumulatieve update 8 voor SQL Server 2016 SP1

Cumulatieve update 4 voor SQL Server 2017

Cumulatieve update 10 voor SQL Server 2014 Service Pack 2

Informatie over cumulatieve updates voor SQL Server

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en beveiligingspatches uit de vorige build. Bekijk de meest recente cumulatieve update voor SQL Server:

Meest recente cumulatieve update voor SQL Server 2016

Meest recente cumulatieve update voor SQL Server 2017

meest recente cumulatieve updates voor SQL Server 2014

Status

Microsoft heeft bevestigd dat dit een probleem is bij de Microsoft-producten die worden vermeld in de sectie Van toepassing op.

Meer informatie

Meer informatie over de terminologie die Microsoft gebruikt om software-updates te beschrijven.