FIX: Trage prestaties of impasse wanneer u een database terugzetten en instructies in SQL Server 2012 tegelijk uitvoeren

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 2725950 - Bekijk de producten waarop dit artikel van toepassing is.
Microsoft distribueert oplossingen voor Microsoft SQL Server-2012 als één downloadbaar bestand. Aangezien de oplossingen cumulatief zijn, elke nieuwe release bevat alle hotfixes en alle beveiligingscorrecties die opgenomen in de vorige SQL Server 2012 zijn release opgelost.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Symptomen

Scenario 1

Neem het volgende scenario:
  • U herstellen een database in Microsoft SQL Server-2012.
  • Voordat de database terugzetten is voltooid, wordt een ander proces verwijst naar de weergave van de catalogus sys.database_recovery_status en een vergrendeling op dezelfde database is vereist. Zo kunt u de volgende SELECT -instructie uitvoeren:

    SELECT * FROM sys.database_recovery_status
In dit scenario treedt trage prestaties op waarin een proces voor de SELECT -instructie wordt gewacht totdat de database terugzetten is voltooid.

Scenario 2

Neem het volgende scenario:
  • U herstellen een database in SQL Server 2012.
  • Voordat de database terugzetten is voltooid, kunt u de volgende instructie uitvoeren:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Opmerking Het DataBaseID Hiermee geeft u de ID van de database waarop u het terugzetten van de database uitvoeren.
In dit scenario wordt een deadlock optreedt in de herstelprocedure voor de database. Deze impasse zorgt ervoor dat de database-herstelprocedure mislukt.

Oorzaak

De twee scenario's die worden beschreven in de sectie 'Symptomen' worden veroorzaakt door de dezelfde oorzaken.

In de sectie 'Scenario1' optreedt het probleem omdat de herstelprocedure voor de database een exclusieve vergrendeling van de database is vereist. Tijdens het uitvoeren van de instructie die wordt vermeld in deze sectie wordt een gedeelde vergrendeling vereist op dezelfde database. De gedeelde vergrendeling wacht daarom voor de exclusieve vergrendeling totdat de exclusieve vergrendeling wordt opgeheven.

In de sectie 'Scenario 2' tijdens het uitvoeren van de instructie die wordt vermeld in de sectie is een gedeelde vergrendeling vereist voor dezelfde database en de tabel sys.sysdbreg . Bij de laatste fase van het herstelproces database moet de vergrendeling op de tabel met sys.sysdbreg tijdens bijwerken. Echter, de gedeelde vergrendeling wordt niet vrijgegeven uit de database. Daarom een deadlock optreedt in de tabel sys.sysdbreg en de herstelprocedure voor de database wordt bepaald dat de impasse bevindt.

Oplossing

Informatie over de cumulatieve

Cumulatieve updatepakket 1 voor SQL Server 2012 Service Pack 1

De correctie voor dit probleem werd voor het eerst uitgebracht in cumulatieve Update 1. Voor meer informatie over het verkrijgen van dit cumulatieve updatepakket voor SQL Server 2012 Service Pack 1, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
2765331 Cumulatieve updatepakket 1 voor SQL Server 2012 Service Pack 1
Opmerking Omdat de opbouw cumulatief van opzet zijn, elke nieuwe versie van de correctie bevat alle hotfixes en alle beveiligingscorrecties die opgenomen in de vorige SQL Server 2012 zijn release opgelost. We raden het toepassen van de meest recente hotfix-versie waarin deze hotfix is opgenomen. Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:
2772858 De SQL Server-2012 bouwt die zijn uitgebracht na Service Pack 1 voor SQL Server 2012 is uitgebracht

Cumulatieve updatepakket 3 voor de SQL Server-2012

De correctie voor dit probleem werd voor het eerst uitgebracht in cumulatieve Update 3. Voor meer informatie over het verkrijgen van dit cumulatieve updatepakket voor SQL Server-2012, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
2723749 Cumulatieve update 3 voor SQL Server-2012
Opmerking Omdat de opbouw cumulatief van opzet zijn, elke nieuwe versie van de correctie bevat alle hotfixes en alle beveiligingscorrecties die opgenomen in de vorige SQL Server 2012 zijn release opgelost. We raden het toepassen van de meest recente hotfix-versie waarin deze hotfix is opgenomen. Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:
2692828 De SQL Server-2012 bouwt die zijn uitgebracht na 2012 van SQL Server is gepubliceerd

Status

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

Workaround

Gebruik een van de volgende methoden om het probleem in Scenario 2.
Methode 1


De instructie om te voorkomen dat de gedeelde vergrendeling op de tabel sys.sysdbreg met behulp van de aanwijzing "NOLOCK" wijzigen.
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Methode 2
Stel de prioriteit van de impasse van de instructie "Laag".
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Opmerking Wanneer u de tweede methode gebruikt om te voorkomen dat de impasse in de instructie en in de herstelprocedure voor de database, worden de codes in de instructie niet uitgevoerd.

Referenties

Ga naar de volgende MSDN-website voor meer informatie over exclusieve vergrendeling, gedeelde vergrendeling en vergrendelen van de update:
Algemene informatie over de modi
Voor meer informatie de incrementele Servicing-Model voor SQL Server, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
935897 Een incrementele Servicing-Model is beschikbaar in de SQL Server-team voor het leveren van hotfixes voor gemelde problemen
Voor meer informatie over het naamgevingsschema voor SQL Server-updates klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:
822499 Naamgevingsschema voor software-updatepakketten voor Microsoft SQL Server
Voor meer informatie over de software-update terminologie, klik op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base te bekijken:
824684 Beschrijving van de standaardterminologie die wordt gebruikt om Microsoft software-updates te beschrijven

Eigenschappen

Artikel ID: 2725950 - Laatste beoordeling: dinsdag 20 november 2012 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
Trefwoorden: 
kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende: 2725950

Geef ons feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com