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:
- Jaunākais kumulatīvais atjauninājums SQL Server 2008 R2 SP2
- Jaunākais kumulatīvais atjauninājums SQL Server 2008 SP3
- Jaunākais kumulatīvais atjauninājums SQL Server 2014
- Jaunākais kumulatīvais atjauninājums SQL Server 2012 SP1
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