Korriger: Ytelsesproblemer oppstår når databasen lock aktiviteten øker i SQL Server

VIKTIG: Denne artikkelen ble oversatt med maskinoversettelsesprogramvare fra Microsoft og muligens redigert av Microsoft Community via CTF-teknologi i stedet for av en oversetter. Microsoft tilbyr både menneskelig oversatte og maskinoversatte/Community-redigerte artikler, slik at du får tilgang til alle artiklene i vår Knowledge Base på ditt eget språk. En maskinoversatt eller Community-redigert artikkel er imidlertid ikke alltid perfekt. Den kan inneholde feil i vokabular, syntaks eller grammatikk, mye likt en fremmedspråklig som forsøker å snakke språket ditt. Microsoft har ikke ansvar for unøyaktige opplysninger, feil eller skade forårsaket av feilaktig oversettelse av innholdet eller kundenes bruk av informasjonen. Microsoft oppdaterer jevnlig maskinoversettelsesprogramvaren og -verktøyene for å forbedre redigering av maskinoversatte tekster.

Den engelske versjonen av denne artikkelen er den følgende: 2926217
Merknad
Som standard, Service Pack 1 for SQL Server-2014 og Service Pack 3 for SQL Server 2012 inneholder denne hurtigreparasjonen, og du trenger ikke å legge til sporing flagg for å aktivere hurtigreparasjonen. Hvis du vil aktivere hurtigreparasjonen når du har installert en av de kumulative oppdateringene i delen løsning, må du starte Microsoft SQL Server ved å legge til sporingsflagg 1236 oppstartsparameterne.
Symptom
Anta at du kjører en forekomst av Microsoft SQL Server-2014, SQL Server 2012, SQL Server 2008 eller SQL Server 2008 R2 på en datamaskin som inneholder mange prosessorer. Når antall låser (ressurstype = DATABASE) for en bestemt database overstiger en viss grense, kan du oppleve følgende ytelsesproblemer:
  • Utvidede verdiene inntreffer for LOCK_HASH spinlock antall.

    Obs! Se delen "Mer informasjon" for informasjon om hvordan du overvåker denne spinlock.
  • Spørringer eller operasjoner som krever databaselåsene ta lang tid å fullføre. For eksempel kan det hende følgende forsinkelsene ytelse:
    • SQL Server-pålogging
    • Koblet server-spørringer
    • sp_reset_connection
    • Transaksjoner
Obs! Å finne listen over låser (ressurstype = DATABASE) på en gitt database, se delen "Mer informasjon". Terskelverdien varierer fra miljø.
Løsning

Informasjon om kumulativ oppdatering

Problemet ble først løst i den følgende kumulative oppdateringen av SQL Server.

Kumulativ oppdatering 13 for SQL Server 2008 R2 SP2

Kumulativ oppdatering 17 for SQL Server 2008 SP3

Samleoppdatering 1 for SQLServer-2014

Kumulativ oppdatering 9 for SQL Server 2012 SP1

Om kumulative oppdateringer for SQL Server

Hver nye kumulative oppdateringen for SQL Server inneholder alle hurtigreparasjonene og alle sikkerhetsreparasjoner som fulgte med den forrige kumulative oppdateringen. Sjekk ut de nyeste kumulative oppdateringene for SQL Server:

Informasjon om hurtigreparasjon

En støttet hurtigreparasjon er tilgjengelig fra Microsoft. Denne hurtigreparasjonen er imidlertid ment å løse problemet som er beskrevet i denne artikkelen. Bruk denne hurtigreparasjonen bare på systemer som har dette bestemte problemet.

Hvis hurtigreparasjonen er tilgjengelig for nedlasting, finnes delen "Nedlasting av hurtigreperasjon tilgjengelig" øverst i denne Knowledge Base-artikkelen. Hvis denne delen ikke vises, kan du sende en forespørsel til Microsofts kundeservice og kundestøtte for å få hurtigreparasjonen.

Obs! Hvis det oppstår flere problemer, eller hvis feilsøkingstips, må du kanskje opprette en separat forespørsel om. Vanlige kundestøttekostnader gjelder for ytterligere kundestøttespørsmål og problemer som ikke dekkes av denne oppdateringen. For en fullstendig liste over telefonnumre for Microsofts kundeservice og kundestøtte eller opprette en separat forespørsel om, kan du gå til følgende Microsoft-webområde: Obs! Hotfix Download Available-skjemaet viser språkene som hurtigreparasjonen er tilgjengelig på. Hvis du ikke ser språket ditt, er det fordi en hurtigreparasjon ikke er tilgjengelig for dette språket.

Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".
Mer informasjon
Når et program foretar en tilkobling til SQL Server, kan det først oppretter en database-kontekst. Som standard prøver tilkoblingen å skaffe låsen på TJENESTEDATABASEN i SP-modus. SH databaselås vil bli utgitt når tilkoblingen er stoppet eller kontekst database endres i løpet av levetiden til tilkoblingen. Hvis du har mange aktive tilkoblinger som bruker den samme databasen konteksten, har du mange låser på ressursen databasetypen for databasen .

På datamaskinen som har 16 eller flere CPU-bruk bare tabellobjekter et partisjonert Lås-oppsett. Databaselåsene er imidlertid ikke partisjonert. Derfor, jo større antall database låser, jo lengre tid tar det for SQL Server for å hente en lås på databasen. De fleste programmer ikke oppleve noen problemer som skyldes utformingen. Men som overskrider en viss grense, mer arbeid og tid er nødvendig for å få låsen. Selv om kostnaden er bare micro sekunder for hver ekstra Lås, kan den totale tiden raskt øke fordi Lås hash bøtter er beskyttet ved hjelp av en spinlock. Dette gjør at flere CPU-sykluser og venter på flere arbeidere å få låsen.

Denne hurtigreparasjonen innfører DATABASEN lock partisjonering når sporingsflagg T1236 er aktivert ved oppstart. Partisjonering av DATABASE -Lås holder dybden på listen Lås håndterlig hver lokal partisjon. Dette optimaliserer tilgangsbane som brukes til å få en lås på DATABASEN betraktelig.

Hvis du vil overvåke LOCK_HASH -spinlock, kan du bruke følgende spørring.
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
Hvis du vil ha mer informasjon om å diagnostisere og løse spinlock kamp om ressursene på SQL Server, kan du gå til følgende dokument:

Obs! Selv om dette dokumentet er skrevet for SQL Server 2008 R2, er informasjonen fremdeles gjelder SQL Server 2012.
Referanser
Hvis du vil ha mer informasjon om sporing av flaggene i SQL Server 2012, kan du gå til følgende TechNet-webområde:


Hvis du vil ha mer informasjon om hvordan du finner nummeret på databaselåsene i bruker per database, kan du bruke følgende spørring til å beregne denne verdien:
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


Advarsel: Denne artikkelen er autooversatt

Egenskaper

Artikkel-ID: 2926217 – Forrige gjennomgang: 12/03/2015 16:08:00 – Revisjon: 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 KbMtno
Tilbakemelding