KORRIGERA: Långsamt eller dödläge när du återställer en databas och köra rapporter i SQL Server 2012 samtidigt

Artikelöversättning Artikelöversättning
Artikel-id: 2725950 - Visa produkter som artikeln gäller.
Microsoft distribuerar Microsoft SQL Server 2012 korrigeringar som en nedladdningsbar fil. Korrigeringar är kumulativa och innehåller alla snabbkorrigeringar för varje ny utgåva och alla säkerhetskorrigeringar som ingår i föregående SQL Server 2012 säkerhetskorrigering.
Visa alla | Dölj alla

På den här sidan

Symptom

Scenario 1

Föreställ dig följande:
  • Du kan återställa en databas i Microsoft SQL Server 2012.
  • Innan databasen återställningen är klar katalogvy sys.database_recovery_status refererar till en annan process och kräver ett lås på samma databas. Till exempel kör du följande SELECT -uttryck:

    SELECT * FROM sys.database_recovery_status
I det här fallet uppstår långsamma prestanda en process för SELECT -uttrycket väntar tills databasen återställningsprocessen har slutförts.

Scenario 2

Föreställ dig följande:
  • Du kan återställa en databas i SQL Server 2012.
  • Innan databasen återställningen har slutförts kör du följande sats:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Obs! Den DataBaseID representerar ID: T för den databas som du återställer databasen.
I det här fallet uppstår ett dödläge i återställningsprocessen för databasen. Detta dödläge gör databasen återställningen misslyckas.

Orsak

Två scenarier som beskrivs i avsnittet "Symptom" orsakas av samma orsaker.

Problemet uppstår eftersom databasen återställningen kräver ett exklusivt lås på databasen i avsnittet "Scenario1". När du kör den sats som nämns i avsnittet krävs ett delade lås på samma databas. Därför väntar delade lås exklusivt lås tills exklusivt lås frigörs.

I avsnittet "Scenario 2" när du kör den sats som nämns i avsnitt, krävs delade lås både på samma databas och i tabellen sys.sysdbreg . Processen kräver ett uppdateringslås på tabellen sys.sysdbreg i den sista fasen av återställningsprocessen för databasen. Delade lås frigörs inte från databasen. Därför uppstår ett dödläge i tabellen sys.sysdbreg och återställningsprocessen databas anges vara lägst prioritet.

Lösning

Kumulativ uppdateringsinformation

Kumulativt uppdateringspaket 1 för SQL Server 2012 Service Pack 1

Korrigeringsfil för problemet gavs först ut i kumulativ uppdatering 1. Mer information om hur du hämtar paketet kumulativ uppdatering för SQL Server 2012 Service Pack 1 klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
2765331 Kumulativt uppdateringspaket 1 för SQL Server 2012 Service Pack 1
Obs! Eftersom byggen är kumulativa, varje ny version av korrigeringsfilen innehåller alla snabbkorrigeringar och säkerhetskorrigering för alla säkerhetskorrigeringar som ingår i föregående SQL Server 2012. Vi rekommenderar att du använder den senaste utgåvan, korrigering, som innehåller den här snabbkorrigeringen. Mer information klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
2772858 SQL Server 2012 bygger som har getts ut efter SQL Server 2012 Service Pack 1

Kumulativt uppdateringspaket 3 för SQL Server 2012

Korrigeringsfil för problemet gavs först ut i den kumulativa uppdateringen 3. Mer information om hur du hämtar paketet kumulativ uppdatering för SQL Server 2012 klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
2723749 Kumulativ uppdatering 3 för SQL Server 2012
Obs! Eftersom byggen är kumulativa, varje ny version av korrigeringsfilen innehåller alla snabbkorrigeringar och säkerhetskorrigering för alla säkerhetskorrigeringar som ingår i föregående SQL Server 2012. Vi rekommenderar att du använder den senaste utgåvan, korrigering, som innehåller den här snabbkorrigeringen. Mer information klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
2692828 SQL Server 2012 bygger som har getts ut efter SQL Server 2012

Status

Microsoft har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i avsnittet "Gäller".

Workaround

Använd någon av följande metoder för att undvika problem i Scenario 2.
Metod 1


Ändra ett uttryck för att undvika delade lås i tabellen sys.sysdbreg med hjälp av "NOLOCK" tips.
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Metod 2
Ange prioritet för uttrycket "Låg" dödläge
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Obs! När du använder den andra metoden för att undvika dödläge både i uttrycket och i återställningsprocessen databasen körs inte koder i IF-satsen.

Referenser

Mer information om exklusivt lås, delade lås och lås update finns på följande MSDN-webbplats:
Allmän information om låslägen
Mer information stegvis underhåll modell för SQL Server, klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
935897 En stegvis modell Service är tillgänglig från SQL Server-teamet att leverera snabbkorrigeringar för rapporterade problem
Mer information om namngivning schemat för SQL Server-uppdateringar klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
822499 För namngivning av uppdateringspaket för Microsoft SQL Server-programvara för
Mer information om terminologin för programuppdateringar klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
824684 Beskrivning av standardterminologi för beskrivning av Microsoft-programuppdateringar

Egenskaper

Artikel-id: 2725950 - Senaste granskning: den 20 november 2012 - Revision: 1.0
Informationen i denna artikel gäller:
  • 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
Nyckelord: 
kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtsv
Maskinöversatt
VIKTIGT: Denna artikel är översatt av Microsofts automatiska översättningsprogram och inte av en mänsklig översättare. För att Du skall ha åtkomst till alla artiklar i Knowledge Base på Ditt föredragna språk så är en del artiklar översatta av människor och en del artiklar av översättningsprogram. Tänk på att en artikel som är översatt av ett översättningsprogram inte alltid är perfekt. Artikeln kan innehålla fel ord, grammatik eller meningsbyggnad, ungefär som en utländsk talare kan göra misstag när han eller hon pratar med Dig på Ditt språk. Microsoft ansvarar inte för eventuella felaktigheter i översättningen, fel eller skador som orsakats av någon felöversättning av innehållet eller våra kunders användande av det översatta innehållet. Microsoft uppdaterar kontinuerligt mjukvaran för översättningsprogrammet.
Den engelska versionen av artikeln är följande: 2725950

Ge 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