FIX: Prestatieproblemen optreden wanneer lock activiteit in een database in SQL Server

BELANGRIJK: Dit artikel is vertaald door middel van automatische vertalingssoftware van Microsoft en is mogelijk nabewerkt door de Microsoft Community via CTF-technologie (Community Translation Framework) of door een menselijke vertaler. Microsoft biedt zowel automatisch vertaalde, door mensen vertaalde en door de community nabewerkte artikelen aan, zodat er in meerdere talen toegang is tot alle artikelen in onze Knowledge Base. Een vertaald of bewerkt artikel kan fouten bevatten in vocabulaire, syntaxis of grammatica.. Microsoft is niet verantwoordelijk voor eventuele onjuistheden, fouten of schade ten gevolge van een foute vertaling van de inhoud van een bericht of het gebruik van deze vertaalde berichten door onze klanten.

De Engelstalige versie van dit artikel is de volgende: 2926217
Opmerking
Standaard, Service Pack 1 voor SQL Server-2014 en Service Pack 3 voor SQL Server 2012 bevatten deze correctie en u hoeft niet te traceren zodat de correctie vlaggen toevoegen. Om de correctie inschakelen nadat u een van de cumulatieve updates in de sectie oplossing, moet Microsoft SQL Server starten door traceringsvlag 1236 startup parameters toe te voegen.
Symptomen
Stel dat u een exemplaar van Microsoft SQL Server-2014, 2012 voor SQL Server, SQL Server 2008 of SQL Server 2008 R2 uitvoert op een computer met veel processors. Wanneer het aantal vergrendelingen (brontype = DATABASE) voor een specifieke database een bepaalde drempel overschrijdt, u de volgende problemen ervaart:
  • Hogere waarden plaatsvinden voor LOCK_HASH spinlock count.

    Opmerking Zie de sectie 'Meer informatie' voor meer informatie over het controleren van deze spinlock.
  • Query's of bewerkingen waarvoor de database vergrendeld duren lang om te worden voltooid. U ziet bijvoorbeeld de volgende vertraging in de uitvoering:
    • SQL Server-aanmeldingen
    • Gekoppelde server query 's
    • sp_reset_connection
    • Transacties
Opmerking Zoek de lijst met vergrendelingen (brontype = DATABASE) op een bepaalde database, Zie de sectie 'Meer informatie'. De drempelwaarde is afhankelijk van de omgeving.
Oplossing

Cumulatieve update-informatie

Het probleem is in eerste instantie opgelost in de volgende cumulatieve update van SQL Server.

13 cumulatieve Update voor SQL Server 2008 R2 SP2

Cumulatieve Update 17 voor SQL Server 2008 SP3

Cumulatieve Update 1 voor SQL Server-2014

Cumulatieve Update 9 voor SQL Server 2012 SP1

Over cumulatieve updates voor SQL Server

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingscorrecties die zijn opgenomen in de vorige cumulatieve update. Bekijk de meest recente cumulatieve updates voor SQL Server:

Informatie over de hotfix

Een ondersteunde hotfix is beschikbaar bij Microsoft. Deze hotfix is echter alleen bedoeld voor het probleem dat wordt beschreven in dit artikel. Voer deze hotfix alleen uit op systemen waarop dit specifieke probleem zich voordoet.

Als er een hotfix beschikbaar is om te downloaden, ziet u een sectie 'Hotfix kan worden gedownload' boven aan dit Knowledge Base-artikel. Als deze sectie niet wordt weergegeven, dien dan een verzoek in bij Microsoft Customer Service and Support om de hotfix te verkrijgen.

Opmerking Als er andere problemen optreden of als er oplossingen vereist zijn, moet u wellicht een afzonderlijk serviceverzoek indienen. De normale ondersteuningskosten blijven gelden voor extra ondersteuningsvragen en problemen die niet in aanmerking voor deze specifieke hotfix komen. Voor een volledige lijst met telefoonnummers van Microsoft Customer Service and Support of om een afzonderlijk serviceverzoek aan te maken, gaat u naar de volgende Microsoft-website: Opmerking Het formulier 'Hotfix kan worden gedownload' geeft de talen weer waarin de hotfix beschikbaar is. Als uw taal niet wordt weergegeven, is dit omdat een hotfix niet voor die taal beschikbaar is.

Status
Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.
Meer informatie
Wanneer een toepassing een verbinding met SQL Server maakt, vaststelt het eerst een databasecontext. Standaard probeert de verbinding te vergrendelen in de modus SH DATABASE . De SH-DATABASE vergrendeling worden uitgebracht wanneer de verbinding is gestopt of databasecontext wordt gewijzigd tijdens de levensduur van de verbinding. Als u veel actieve verbindingen die gebruikmaken van dezelfde databasecontext hebt, kunt u veel sloten van het type DATABASE resource voor die specifieke database laten.

Table-objecten gebruiken op de computer met 16 of meer CPU's, een stelsel van gepartitioneerde vergrendelen. De database vergrendeld zijn echter niet gepartitioneerd. Daarom, hoe groter het aantal database vergrendeld, des te langer het duurt voor vergrendeling op de database van SQL Server. De meeste toepassingen ondervinden problemen die worden door dit ontwerp veroorzaakt niet. Maar als het getal groter is dan een bepaalde drempel, extra werk en tijd nodig is om de vergrendeling te verkrijgen. Hoewel de kosten voor elk extra vergrendeling alleen micro seconden, kunt totale tijd snel vergroten door de hash-lock buckets zijn beveiligd met een spinlock. Dit zorgt ervoor dat u meer CPU-cycli en wacht voor extra werknemers de vergrendeling te verkrijgen.

Deze hotfix bevat lock Databasepartitionering wanneer traceringsvlag T1236 bij het opstarten is ingeschakeld . Partitioneren van de vergrendeling van de DATABASE is, blijft de diepte van de lijst te beheren in elke lokale partitie. Dit het access-pad dat wordt gebruikt voor het vergrendelen van een DATABASE aanzienlijk wordt geoptimaliseerd.

Als u wilt controleren de spinlock LOCK_HASH , kunt u de volgende query.
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @counter < 100      BEGIN            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats
Voor meer informatie over het opsporen en oplossen van bronconflicten spinlock op SQL-Server, gaat u naar het volgende document:

Opmerking Hoewel dit document is geschreven voor SQL Server 2008 R2, is de informatie nog steeds van toepassing op SQL Server 2012.
Referenties
Ga naar de volgende TechNet-website voor meer informatie over tracering vlaggen in SQL Server 2012:


Gebruik de volgende query om deze waarde te berekenen voor meer informatie over het zoeken naar het aantal vergrendelingen database gebruiker per database:
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks group by  Resource_database_id, resource_type, request_mode, request_status


Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 2926217 - Laatst bijgewerkt: 12/03/2015 16:09:00 - Revisie: 7.0

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2008 Service Pack 3, Microsoft SQL Server 2008 R2 Service Pack 2

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbautohotfix kbhotfixserver kbmt KB2926217 KbMtnl
Feedback