KB3026083 – KORJAUS: SOS_CACHESTORE Ad Hoc SQL Server suunnitelman välimuistissa esiintyvä spinlock-kiista aiheuttaa suurta suoritinkäyttöä SQL Server

Käytetään kohteeseen
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core

Ongelman ilmenemistapa

Jos liian monta samanaikaista lisäystä tapahtuu samassa hajautusarvosäilössä tai jos ad hoc SQL Server suunnitelman välimuisti saavuttaa syöttörajan (160 036), ilmenee vakavia kiistoja SOS_CACHESTORE spinlockista. Tässä tilanteessa Microsoft SQL Server käyttää paljon suoritinta.

Syy

Ongelma ilmenee, kun SQL Server -suunnitelman välimuisti saavuttaa merkintärajan, ja palvelupaketit, joiden kustannukset ovat alhaiset, on häädettävä, jotta uusia suunnitelmia voidaan lisätä. Tämä aiheuttaa kovaa kiistaa SOS_CACHESTORE spinlockille, joka mahdollistaa SQL Server suunnitelman välimuistin hajautustaulukon säilöjen synkronoinnin.

Ratkaisu

Kumulatiivisen päivityksen tiedot

Ongelma korjattiin ensimmäisen kerran seuraavassa SQL Server kumulatiivisessa päivityksessä.

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:

Lisätietoja

Suunnitelmavälimuistilla on kaksi rajoitusta: kaikkien suunnitelmien yhteiskoko ja kokonaismäärä. Koko- ja merkintämäärärajoitukset on selitetty seuraavassa teknisessä raportissa:

Välimuistin sisäisten tietojen suunnitteleminen

Suunnitelman välimuistiin voi tallentaa merkintöjä enintään neljä kertaa säilön lukumäärän verran. Voit tarkistaa nämä tiedot suorittamalla seuraavat kyselyt:


select name, type, buckets_count 
from sys.dm_os_memory_cache_hash_tables
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
 
select name, type, pages_kb, entries_count 
from sys.dm_os_memory_cache_counters
where name IN ( 'SQL Plans' , 'Object Plans' ,  'Bound Trees' )

Esimerkiksi 64-bittisissä järjestelmissä SQL Server -palvelupaketin välimuistin säilöjen määrä on 40 009. Näin ollen SQL Server -palvelupaketin välimuistiin mahtuvien merkintöjen enimmäismäärä on 160 036.

Jos työmääräsi käyttää erilaisia ad hoc -kyselyjä, tämä raja voi muodostaa pullonkaulan. Tämän hotfix-korjauksen muutos korjaa tämän tilanteen. Kun olet asentanut tämän Hotfix-korjauksen ja ottanut muutoksen käyttöön käynnistyksen jäljityksen merkinnällä "-T 174", säilöjen määrä kasvaa 160 001:een 64-bittisissä järjestelmissä. Välimuistiin mahtuu tällöin enintään 640 004 suunnitelmaa.

Tila

Microsoft on vahvistanut tämän olevan ongelma niissä Microsoftin tuotteissa, jotka ovat listattuna Koskee seuraavia tuotteita -osiossa.