KB2926217 — LABOJUMS: Rodas veiktspējas problēmas, ja datu bāzes bloķēšanas aktivitāte palielinās operētājsistēmā SQL Server

Attiecas uz
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2012 Express SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2008 Service Pack 3 SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard

Pēc noklusējuma šis labojums ir ietverts SQL Server 2014 1. servisa pakotnē un SQL Server 2012 3. servisa pakotnē, un, lai iespējotu labojumu, nav jāpievieno izsekošanas karodziņi. Lai iespējotu labojumu pēc tam, kad esat instalējis kādu no kumulatīvajiem atjauninājumiem sadaļā Risinājums, ir jāstartē Microsoft SQL Server, startēšanas parametriem pievienojot izsekošanas karodziņu 1236.

Pazīmes

Pieņemsim, ka datorā, kurā ir daudz procesoru, palaižat Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 vai SQL Server 2008 R2 instanci. Ja bloķēšanas reižu skaits (resursa tips = DATABASE) konkrētai datu bāzei pārsniedz noteiktu slieksni, rodas šādas veiktspējas problēmas:

  • Paaugstinātas vērtības rodas LOCK_HASH spinlock skaitam.

    Piezīme Skatiet sadaļu "Papildinformācija", lai uzzinātu, kā uzraudzīt šo spinlock.

  • Vaicājumi vai darbības, kuru izpildei nepieciešama datu bāzes bloķēšana, aizņem daudz laika. Piemēram, varat novērot šādas veiktspējas aizkaves:

    • SQL Server pieteikšanās
    • Saistīto serveru vaicājumi
    • sp_reset_connection
    • Transakcijas

Piezīme Lai atrastu bloķējumu sarakstu (resursa tips = DATABASE) attiecīgajā datu bāzē, skatiet sadaļu "Papildinformācija". Sliekšņa vērtība dažādās vidēs atšķiras.

Risinājums

Kumulatīvā atjauninājuma informācija

Šī problēma pirmo reizi tika novērsta nākamajā SQL Server kumulatīvajā atjauninājumā.

Kumulatīvais atjauninājums 13 SQL Server 2008 R2 SP2 /en-us/help/2967540

SQL Server 2008 SP3 17. kumulatīvais atjauninājums /en-us/help/2958696

1. kumulatīvais atjauninājums sistēmai SQL Server 2014 /en-us/help/2931693

9. kumulatīvais atjauninājums operētājsistēmai SQL Server 2012 SP1 /en-us/help/2931078

Par SQL Server kumulatīvajiem atjauninājumiem

Katrā jaunajā SQL Server kumulatīvajā atjauninājumā ir visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos SQL Server kumulatīvos atjauninājumus:

      

Informācija par labojumfailu
 Atbalstīts labojumfails ir pieejams no Microsoft. Tomēr šis labojumfails ir paredzēts, lai novērstu tikai šajā rakstā aprakstīto problēmu. Lietojiet šo labojumfailu tikai sistēmām, kurās ir saskārusies ar šo konkrēto problēmu.

Ja labojumfails ir pieejams lejupielādei, šī zināšanu bāzes raksta augšdaļā ir sadaļa "Labojumfaila lejupielāde ir pieejama". Ja šī sadaļa netiek parādīta, iesniedziet pieprasījumu Microsoft klientu apkalpošanas un atbalsta dienestam, lai iegūtu labojumfailu.

Piezīme Ja rodas papildu problēmas vai nepieciešama problēmu novēršana, iespējams, jums būs jāizveido atsevišķs pakalpojuma pieprasījums. Parasti atbalsta izmaksas attiecas uz jautājumiem par papildu atbalstu un problēmām, kas neskar šo konkrēto labojumfailu. Lai skatītu pilnu Microsoft klientu apkalpošanas un atbalsta tālruņa numuru sarakstu vai izveidotu atsevišķu pakalpojuma pieprasījumu, apmeklējiet šo Microsoft vietni:

/contactus/?ws=support Piezīme Veidlapā "Pieejama labojumfailu lejupielāde" tiek parādītas valodas, kurām labojumfails ir pieejams. Ja neredzat savu valodu, labojumfails šai valodai nav pieejams.

Statuss

Microsoft apstiprināja, ka šī ir problēma Microsoft produktos, kas norādīti sadaļā "attiecas uz".

Papildinformācija

Kad lietojumprogramma izveido savienojumu ar SQL Server, tā vispirms izveido datu bāzes kontekstu. Pēc noklusējuma savienojums mēģinās iegūt datu bāzes bloķēšanu SH režīmā. SH-DATABASE bloķēšana tiks atbrīvota, kad savienojums tiek apturēts vai savienojuma dzīves laikā tiek mainīts datu bāzes konteksts. Ja jums ir daudz aktīvu savienojumu, kas izmanto vienu un to pašu datu bāzes kontekstu, šai datu bāzei var būt daudz datu bāzes resursa tipa bloķēšanas.

Datorā, kurā ir 16 vai vairāk centrālie procesori, tikai tabulas objekti izmanto dalītu bloķēšanas shēmu. Tomēr datu bāzes bloķēšana netiek nodalīta. Tāpēc, jo lielāks datu bāzes bloķēšanas skaits, jo ilgāks laiks nepieciešams, lai SQL Server iegūtu datu bāzes bloķēšanu. Lielākajai daļai lietojumprogrammu nerodas problēmas, ko izraisa šis dizains. Bet, tiklīdz skaits pārsniedz noteiktu slieksni, slēdzenes iegūšanai ir nepieciešams papildu darbs un laiks. Lai gan izmaksas ir tikai mikrosekundes par katru papildu slēdzeni, kopējais laiks var ātri palielināties, jo slēdzenes jaucējspaiņi ir aizsargāti, izmantojot spinlock. Tas izraisa papildu CPU ciklus un gaida, kamēr papildu darbinieki iegūst slēdzeni.

Šis labojumfails ievieš datu bāzes bloķēšanas nodalījumu, kad startēšanas laikā ir iespējots izsekošanas karodziņš T1236. Nodalījumu veikšana Datu bāzes bloķēšana nodrošina, ka bloķēšanas saraksta dziļums ir pārvaldāms katrā lokālajā nodalījumā. Tas ievērojami optimizē piekļuves ceļu, kas tiek izmantots, lai iegūtu datu bāzes bloķēšanu.

Lai pārraudzītu LOCK_HASH spinlock, varat izmantot tālāk norādīto vaicājumu. IESTATĪT FUNKCIJU NOCOUNT ON
CREATE TABLE #spinlock_stats([CaptureTime], datetime,[name], nvarchar(512),[Collisions] bigint,
[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)
DECLARE @counter int = 1
KAMĒR @counter< 100
      BEGIN
            INSERT INTO #spinlock_stats SELECT GETDATE() AS "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'
            GAIDIET AIZKAVI '00:00:05'
            IESTATĪT @counter +=1
      END
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
NOLAIŽAMĀ TABULA #spinlock_stats Lai iegūtu papildinformāciju par diagnosticēšanu un atrisināšanu spinlock strīdu SQL Server, dodieties uz šo dokumentu:

Spinlock strīda diagnosticēšana un risināšana sistēmā SQL Server Piezīme Lai gan šis dokuments ir rakstīts SQL Server 2008 R2, informācija joprojām ir piemērojama SQL Server 2012.

Atsauces

Lai iegūtu papildinformāciju par izsekošanas karodziņiem programmā SQL Server 2012, apmeklējiet šo TechNet tīmekļa vietni:

Informācija par izsekošanas karodziņiem programmā SQL Server 2012
Lai iegūtu papildinformāciju par to, kā uzzināt datu bāzes bloķēšanas skaitu katrā datu bāzē, izmantojiet tālāk norādīto vaicājumu, lai aprēķinātu šo vērtību:atlasiet Resource_database_id, resource_type, request_mode, request_status,
count (*) 'LockCount' no sys.dm_tran_locks
Grupēt pēc Resource_database_id, resource_type, request_mode request_status