Oletusarvoisesti SQL Server 2014:n Service Pack 1 ja SQL Server 2012:n Service Pack 3 sisältävät tämän korjauksen, eikä sinun tarvitse lisätä jäljitysmerkintöjä korjauksen ottamiseksi käyttöön. Jos haluat ottaa korjauksen käyttöön sen jälkeen, kun olet asentanut jonkin Ratkaisu-osassa mainituista kumulatiivisista päivityksistä, sinun on käynnistettävä Microsoft SQL Server lisäämällä jäljitysmerkintä 1236 käynnistysparametreihin.
Ongelman ilmenemistapa
Oletetaan, että suoritat Microsoft SQL Server 2014-, SQL Server 2012-, SQL Server 2008- tai SQL Server 2008 R2 -esiintymän tietokoneessa, jossa on useita suorittimia. Kun lukitusten määrä (resurssityyppi = TIETOKANTA) tietyssä tietokannassa ylittää tietyn raja-arvon, ilmenee seuraavia suorituskykyongelmia:
Suuret arvot esiintyvät LOCK_HASH spinlock-määrässä.
Huomautus Katso Lisätietoja-osasta lisätietoja siitä, miten voit valvoa tätä askellukkoa.
Tietokannan lukitsemista edellyttävien kyselyjen tai toimintojen valmistuminen kestää kauan. Suorituskyvyn viiveet voivat ilmetä esimerkiksi seuraavissa tilanteissa:
- SQL Server -kirjautumiset
- Linkitetyn palvelimen kyselyt
- sp_reset_connection
- Tapahtumat
Huomautus: Lisätietoja-osasta voit etsiä tietyn tietokannan lukitusluettelon (resurssityyppi = TIETOKANTA). Kynnysarvo vaihtelee ympäristön mukaan.
Ratkaisu
Kumulatiiviset päivitystiedot
Ongelma korjattiin ensimmäisen kerran seuraavassa SQL Server kumulatiivisessa päivityksessä.
Kumulatiivinen päivitys 13, SQL Server 2008 R2 SP2 /en-us/help/2967540
Kumulatiivinen päivitys 17, SQL Server 2008 SP3 /en-us/help/2958696
SQL Server 2014:n kumulatiivinen päivitys 1 /en-us/help/2931693
Kumulatiivinen päivitys 9 SQL Server 2012 SP1:lle /en-us/help/2931078
Tietoja SQL Serverin kumulatiivisista päivityksistä
Jokainen uusi SQL Server -kumulatiivinen päivitys sisältää kaikki edelliseen kumulatiiviseen päivitykseen sisältyvät hotfix-korjaukset ja tietoturvakorjaukset. Tutustu SQL Serverin uusimpiin kumulatiivisiin päivityksiin:
- SQL Server 2008 R2 SP2:n uusin kumulatiivinen päivitys
- SQL Server 2008 SP3:n uusin kumulatiivinen päivitys
- SQL Server 2014:n uusin kumulatiivinen päivitys
- SQL Server 2012 SP1:n uusin kumulatiivinen päivitys
Hotfix-korjauksen tiedot
Tuettu hotfix-korjaus on saatavana Microsoftilta. Tämä hotfix-korjaus on kuitenkin tarkoitettu vain tässä artikkelissa kuvatun ongelman korjaamiseen. Käytä tämä hotfix-korjaus vain järjestelmissä, joissa on kyseinen ongelma.
Jos hotfix-korjaus on ladattavissa, Hotfix-korjauksen lataaminen saatavilla -osio on tämän tietokannan artikkelin yläosassa. Jos tätä osaa ei näy, lähetä Microsoftin asiakaspalveluun ja tukeen pyyntö hotfix-korjauksen hankkimiseksi.
Huomautus: Jos ilmenee lisää ongelmia tai jos vianmääritystä tarvitaan, sinun on ehkä luotava erillinen palvelupyyntö. Tavalliset tukikustannukset peritään lisäkysymyksistä ja ongelmista, jotka eivät liity tähän tietyn hotfix-korjaukseen. Täydellinen luettelo Microsoftin asiakaspalvelun ja tuen puhelinnumeroista tai erillisen huoltopyynnön luominen on seuraavassa Microsoftin verkkosivustossa:
/contactus/?ws=support Huomautus Hotfix-korjauksen lataaminen saatavilla -lomakkeessa näkyvät kielet, joilla hotfix-korjaus on saatavilla. Jos kieltä ei näy, sille ei ole saatavilla hotfix-korjausta.
Tila
Microsoft on vahvistanut tämän olevan ongelma niissä Microsoftin tuotteissa, jotka ovat listattuna Koskee seuraavia tuotteita -osiossa.
Lisätietoja
Kun sovellus muodostaa yhteyden SQL Server:ään, se muodostaa ensin tietokantakontekstin. Oletusarvon mukaan yhteys yrittää saada DATABASE-lukituksen SH-tilassa. SH-DATABASE-lukitus vapautuu, kun yhteys katkaistaan tai tietokantakonteksti muuttuu yhteyden elinkaaren aikana. Jos sinulla on useita aktiivisia yhteyksiä, jotka käyttävät samaa tietokantakontekstia, sinulla voi olla useita DATABASE-resurssityyppisiä lukkoja kyseiselle tietokannalle.
Tietokoneessa, jossa on vähintään 16 suoritinta, vain taulukko-objektit käyttävät osioitua lukitusmallia. Tietokannan lukitusta ei kuitenkaan osioteta. Siksi mitä suurempi tietokantalukitusten määrä on, sitä kauemmin kestää SQL Server:llä saada tietokannan lukitus. Useimmissa sovelluksissa ei ilmene tämän rakenteen aiheuttamia ongelmia. Mutta heti kun luku ylittää tietyn kynnyksen, lukon hankkiminen vaatii lisätyötä ja aikaa. Vaikka jokaisen lisälukon hinta on vain mikrosekunteja, kokonaisaika voi kasvaa nopeasti, koska lukon hajautusarvosäilöt on suojattu spinlockilla. Tämä aiheuttaa ylimääräisiä suoritinjaksoja ja odottaa, että muut työntekijät saavat lukituksen.
Tämä hotfix-korjaus sisältää DATABASE-lukituksen osion, kun jäljitysmerkintä T1236 on käytössä käynnistyksen yhteydessä. DATABASE-lukituksen osiointi pitää lukitusluettelon syvyyden hallittavissa kussakin paikallisessa osiossa. Tämä optimoi merkittävästi DATABASE-lukituksen hankkimiseen käytettävän käyttöpolun.
Voit valvoa LOCK_HASH Spinlockia seuraavan kyselyn avulla. MÄÄRITÄ NOCOUNT PÄÄLLE
CREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[pyöräytykset] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)
DECLARE @counter int = 1
KUN TAAS @counter< 100
ALOITA
INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [nimi] = 'LOCK_HASH'
WAITFOR DELAY '00:00:05'
SET @counter +=1
END
VALITSE * FROM #spinlock_stats ORDER BY [CaptureTime]
PUDOTETTAVA TAULUKKO #spinlock_stats Lisätietoja spinlock-kiistan diagnosoinnista ja ratkaisemisesta SQL Server on seuraavassa asiakirjassa:
Spinlock-kiistan diagnosointi ja ratkaiseminen SQL Server:ssä Huomautus Vaikka tämä asiakirja on kirjoitettu SQL Server 2008 R2:lle, tiedot soveltuvat edelleen SQL Server 2012:een.
Viitteet
Lisätietoja seurantamerkinnöistä SQL Server 2012:ssa on seuraavassa TechNet-sivustossa:
Tietoja seurantamerkinnöistä SQL Server 2012:ssa
Lisätietoja tietokannan lukitusten määrän selvittämisestä tietokantakohtaisessa käyttäjässä on seuraavalla kyselyllä tämän arvon laskemiseen:select Resource_database_id, resource_type, request_mode, request_status,
count (*) 'LockCount' sys.dm_tran_locks
Ryhmittelyperusteet Resource_database_id, resource_type, request_mode request_status