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ä.
- SQL Server 2014 SP1:n kumulatiivinen päivitys 1
- SQL Server 2012 SP2:n kumulatiivinen päivitys 5
- SQL Server 2014:n kumulatiivinen päivitys 6
- SQL Server 2012 SP1:n kumulatiivinen päivitys 14
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 2014 SP1:n uusin kumulatiivinen päivitys
- SQL Server 2012 SP2:n uusin kumulatiivinen päivitys
- SQL Server 2014:n uusin kumulatiivinen päivitys
- SQL Server 2012 SP1:n uusin kumulatiivinen päivitys
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.