KB2926217 – KORJAUS: Suorituskykyongelmia ilmenee, kun tietokannan lukitustoiminnot lisääntyvät SQL Server

Käytetään kohteeseen
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

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:

      

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