Vaikimisi sisaldavad see parandust SQL Server 2014 hoolduspakett Service Pack 1 ja SQL Server 2012 hoolduspakett Service Pack 3 ning te ei pea paranduse lubamiseks jälituse lippe lisama. Paranduse lubamiseks pärast jaotise Eraldusvõime ühe koondvärskenduse installimist peate käivitama Microsoft SQL Server, lisades käivitusparameetritele jälituslipu 1236.
Sümptomid
Oletame, et käivitate Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 või SQL Server 2008 R2 eksemplar arvutis, mis sisaldab palju protsessoreid. Kui kindla andmebaasi lukkude arv (ressursitüüp = ANDMEBAAS) ületab teatud läve, ilmnevad järgmised jõudlusprobleemid.
Spinlocki LOCK_HASH väärtused on kõrgemad.
Märkus. Spinlocki jälgimise kohta leiate teavet jaotisest "Lisateave".
Andmebaasilukku nõudvate päringute või toimingute lõpuleviimine võtab kaua aega. Näiteks võite märgata järgmisi jõudlusviivitusi.
- SQL Server sisselogimised
- Lingitud serveripäringud
- sp_reset_connection
- Tehingud
Märkus. Kindla andmebaasi lukkude loendi (ressursitüüp = DATABASE) leidmiseks vaadake jaotist "Lisateave". Läve väärtus oleneb keskkonnast.
Lahendus
Koondvärskenduse teave
Probleem lahendati esmalt järgmises SQL Server koondvärskenduses.
koondvärskendus 13 SQL Server 2008 R2 SP2 /en-us/help/2967540
SQL Server 2008 SP3 koondvärskendus 17 /en-us/help/2958696
SQL Server 2014 koondvärskendus 1 /en-us/help/2931693
SQL Server 2012 SP1 koondvärskendus 9 /en-us/help/2931078
Teave SQL Server koondvärskenduste kohta
Iga uus koondvärskendus SQL Server sisaldab kõiki kiirparandusi ja kõiki turbeparandusi, mis olid kaasatud eelmise koondvärskenduse. Vaadake uusimaid SQL Server koondvärskendusi.
- Uusim koondvärskendus SQL Server 2008 R2 SP2 jaoks
- Uusim koondvärskendus SQL Server 2008 SP3 jaoks
- Uusim koondvärskendus SQL Server 2014 jaoks
- Uusim koondvärskendus SQL Server 2012 SP1 jaoks
Kiirparanduse teave
Microsoftilt on saadaval toetatud kiirparandus. Kuid see kiirparandus on ette nähtud ainult selles artiklis kirjeldatud probleemi lahendamiseks. Rakendage see kiirparandus ainult süsteemidele, kus esineb see konkreetne probleem.
Kui kiirparandus on allalaadimiseks saadaval, on selle teabebaasi artikli ülaosas jaotis "Kiirparanduste allalaadimine saadaval". Kui seda jaotist ei kuvata, esitage kiirparanduse hankimiseks taotlus Microsofti klienditeenindusele ja toele.
Märkus. Täiendavate probleemide korral või tõrkeotsingu vajaduse korral peate võib-olla looma eraldi hooldustaotluse. Tavalised toe kulud rakenduvad täiendavatele toega seotud küsimustele ja probleemidele, mis ei vasta sellele konkreetsele kiirparandusele. Microsofti klienditeeninduse ja -toe telefoninumbrite täieliku loendi või eraldi teenusetaotluse loomiseks külastage järgmist Microsofti veebisaiti:
/contactus/?ws=support Märkus Vorm "Kiirparanduse allalaadimine on saadaval" kuvab keeled, mille kiirparandus on saadaval. Kui te ei näe oma keelt, see on sellepärast, et kiirparandus ei ole saadaval selle keele.
Olek
Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.
Veel teavet
Kui rakendus loob ühenduse SQL Server, loob see esmalt andmebaasikonteksti. Vaikimisi proovib ühendus hankida ANDMEBAASIluku SH-režiimis. SH-DATABASE-lukk vabastatakse ühenduse peatamisel või andmebaasikonteksti muutmisel ühenduse eluea jooksul. Kui teil on palju aktiivseid ühendusi, mis kasutavad sama andmebaasikonteksti, võib teil olla selle andmebaasi jaoks mitu andmebaasi ressursitüübi lukku.
Arvutis, kus on 16 või enam protsessorit, kasutavad sektsioonitud lukustusskeemi ainult tabeliobjektid. Andmebaasilukud pole sektsioonitud. Seega, mida suurem on andmebaasilukkude arv, seda kauem kulub SQL Server andmebaasile luku hankimiseks. Enamikus rakendustes ei esine selle kujunduse põhjustatud probleeme. Kui aga arv ületab teatud läve, on lukustuse hankimiseks vaja lisatööd ja -aega. Kuigi iga täiendava luku kulu on ainult mikro sekundites, võib koguaeg kiiresti suureneda, kuna luku räsipadjad on spinlocki abil kaitstud. See põhjustab täiendavaid protsessoritsükleid ja ootab, kuni töölised lukustuse saavad.
See kiirparandus tutvustab ANDMEBAASI lukustuse sektsioonimist, kui jälituslipp T1236 on käivitamisel lubatud. ANDMEBAASIluku sektsioonimine hoiab lukuloendi sügavust hallatavana igas kohalikus sektsioonis. See optimeerib märkimisväärselt juurdepääsutee, mida kasutatakse ANDMEBAASIluku hankimiseks.
Spinlocki LOCK_HASH jälgimiseks saate kasutada järgmist päringut. SEA NOCOUNT SISSE
CREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)
DEKLAREERI INT @counter = 1
KUI @counter< 100
BEGIN
INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'
OODAKE, KUNI VIIVITUS ON 00:00:05
SET @counter +=1
Lõpuklahv (END)
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
DROP TABLE #spinlock_stats Spinlocki sisu diagnoosimise ja lahendamise kohta leiate lisateavet SQL Server järgmisest dokumendist:
Spinlocki sisu diagnoosimine ja lahendamine SQL Server märkuses Kuigi see dokument on kirjutatud SQL Server 2008 R2 jaoks, kehtib see teave endiselt SQL Server 2012 kohta.
Viited
Rakenduses SQL Server 2012 jälituslippude kohta lisateabe saamiseks külastage järgmist TechNeti veebisaiti:
Teave SQL Server 2012 jälituslippude kohta
Lisateavet selle kohta, kuidas leida kasutaja andmebaasilukkude arvu andmebaasi kohta, kasutage selle väärtuse arvutamiseks järgmist päringut:valige Resource_database_id, resource_type, request_mode, request_status,
count (*) 'LockCount' from sys.dm_tran_locks
Resource_database_id, resource_type, request_mode, request_status alusel rühmitamine