Logg på med Microsoft
Logg på, eller opprett en konto.
Hei,
Velg en annen konto.
Du har flere kontoer
Velg kontoen du vil logge på med.

Forespørsel om innhold ideen 46887
Feil #: 53589 (innhold idé)

Symptomer

Når du installerer SQL Server 2014 Service Pack 1 (SP1), SQL Server 2012 SP3 eller SQL Server-2016, opplever du treg spørringen ytelse og utvidede systemmodus (kjernemodus)-modus CPU-bruk før serveren startes. Du kan også se et stort antall PAGELATCH_ * venter.

Oppløsning

Problemet ble løst i følgende kumulative oppdateringer for SQL Server:

Hver nye kumulative oppdateringen for SQL Server inneholder alle hurtigreparasjonene og alle sikkerhetsreparasjoner som fulgte med den forrige kumulative oppdateringen. Vi anbefaler at du laster ned og installerer de nyeste kumulative oppdateringene for SQL Server:




Årsak

SQL Server bruker dynamiske latch forfremmelse og degradering av logikk (super/delskjema-latch). Dette forbedrer SQL Server-ytelse og skalerbarhet ved å holde oversikt over antall får på en tilgangsluke, og hvor lang tid det tar for å hente samme latch Hvis det fantes ingen latch kamp om ressursene. Deretter passende kroker, fremheves (Super-IO latch) basert på denne modellen. Når det er mange endringer (oppdateringer/INSERT/sletter) på en Heap eller b-tre (HoBT), som de tilknyttede HoBT kroker kan gjøre for å Lås super status. Degraderingen oppstår imidlertid ikke automatisk. Du kan lese mer om super/delskjema-latching i denne artikkelen.

Hvis disse HoBTs er senere er fradelt, går tilbake til tidligere frigjort HoBT til en global hurtigbuffer for gjenbruk. Når denne HOBT brukes på nytt, brukes på nytt i tidligere forfremmede latch selv når det er ingen forskjeller i HoBT. Dette legger til CPU-belastning. Denne virkemåten øker systemmodus (kjernemodus)-modus CPU-bruken av SQL Server før serveren startes. Denne økningen legger vanligvis ikke mer enn noen mikrosekunder med hver kjøring. Du kan også se et stort antall PAGELATCH_ * venter på grunn av disse utvidede Super-IO kroker på HoBTs.

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".

Kallstakk

Kallstakk for problem

00007fffe2b6c4ba ntdll!ZwSignalAndWaitForSingleObject+0xa
00007fffdff80086 KERNELBASE!SignalObjectAndWait+0x82
(Innebygd)-sqldk! SystemThread::SignalAndWait + 0x2d
00007fffc50d3a3c sqldk!SOS_Scheduler::Switch+0xbc
00007fffc50d1b6d sqldk!SOS_Scheduler::SuspendNonPreemptive+0xd2
00007fffbbeb1c54 sqlmin!EventInternal<SuspendQueueSLock>::Wait+0x1ee
00007fffbbf053e8 sqlmin!LatchBase::Suspend+0x633
00007fffbbf04fb9 sqlmin!LatchBase::AcquireInternal+0x415
(Innebygd)-sqlmin! LatchBase::AcquireSublatch + 0x194
00007fffbeb05cc2 sqlmin!LatchBase::AcquireAllSublatches+0x29b
00007fffbc17bbee sqlmin!LatchBase::AcquireInternal+0x2ee
(Innebygd)-sqlmin! LatchBase:: anskaffelse + 0x2f
(Innebygd)-sqlmin! CAutoLatch::GetAccess + 0x2f
(Innebygd)-sqlmin! BaseSharedHoBt::GetVirtualRootWithLatch + 0x2f
00007fffbcaf8c58 sqlmin!HoBtAccess::GetVirtualRootWithLatch+0x48
00007fffbcafacc5 sqlmin!BTreeMgr::HandleRoot+0x105
00007fffbc1047f8 sqlmin!BTreeMgr::Seek+0x248
00007fffbbebdc67 sqlmin!BTreeMgr::GetHPageIdWithKey+0x32d
00007fffbbf3df95 sqlmin!IndexPageManager::GetPageForLinkModification+0x21a
(Innebygd)-sqlmin! LocatePageForSplit + 0x30
00007fffbbf3bd93 sqlmin!SplitPage+0x3b3
00007fffbbf3e177 sqlmin!IndexDataSetSession::InsertSmallRecord+0x1a1d
00007fffbbf25d81 sqlmin!IndexDataSetSession::InsertRowInternal+0x2de1
00007fffbbf26936 sqlmin!DatasetSession::InsertRow+0x163
00007fffbbf267c6 sqlmin!RowsetNewSS::InsertRow+0x26
00007fffbc96842b sqlmin!CXRowset::InsertRow+0xdb
(Innebygd)-sqlmin! CPerIndexMetaQS::InsertRow + 0x29
00007fffbbf32eab sqlmin!CValRowMult::SetDataX+0x194
(Innebygd)-sqltses! CallEsFn + 0x9
00007fffb93920df sqltses!CEsExec::GeneralEval+0x1a9
(Innebygd)-sqlmin! CEsRuntime:: Eval + 0xA
00007fffbbf2f64e sqlmin!CQScanUpdateNew::GetRow+0x43d
00007fffbc0d318d sqlmin!CQueryScan::GetRow+0x81
00007fffb9c393b7 sqllang!CXStmtQuery::ErsqExecuteQuery+0x36d
00007fffb9c5cabc sqllang!CXStmtDML::XretDMLExecute+0x31c
(Innebygd)-sqllang! CXStmtDML::XretDoExecute + 0x23
00007fffb9c5cc09 sqllang!CXStmtDML::XretExecute+0xad
(Innebygd)-sqllang! CExecStmtLoopVars::ExecuteXStmtAndSetXretReturn + 0x14
00007fffba7ddac2 sqllang!CMsqlExecContext::ExecuteStmts<1,0>+0x1782
00007fffb9fd00d3 sqllang!CMsqlExecContext::FExecute+0xa4a
00007fffb9c3c60f sqllang!CSQLSource::Execute+0x86c
00007fffb9c423c7 sqllang!process_request+0xa57
00007fffb9c424e3 sqllang!process_commands+0x4a3
00007fffc50d4850 sqldk!SOS_Task::Param::Execute+0x21e
00007fffc50d4634 sqldk!SOS_Scheduler::RunTask+0xa8
00007fffc50d4306 sqldk!SOS_Scheduler::ProcessTasks+0x279
00007fffc50fc2ff sqldk!SchedulerManager::WorkerEntryPoint+0x24c
00007fffc50fc450 sqldk!SystemThread::RunWorker+0x8f
00007fffc50fc3d9 sqldk!SystemThreadDispatcher::ProcessWorker+0x366
00007fffc50fcc68 sqldk!SchedulerManager::ThreadEntryPoint+0x226
00007fffe22116ad kernel32!BaseThreadInitThunk+0xd
00007fffe2b44629 ntdll!RtlUserThreadStart+0x1d

Løse oppkallstakken

# Underordnet-SP RetAddr samtale område

00 00007fd2 'c2cdc908 00007ff9' 0662a796 sqlmin! BaseSharedHoBt::DemoteLatch [d:\b\s1\sources\sql\ntdbms\storeng\dfs\schemamanager\source\hobt.cpp @ 79]

01 00007fd2'c2cdc910 00007ff9'06642990 sqlmin! VisibleHoBt::InitForRefresh + 0xf6 [d:\b\s1\sources\sql\ntdbms\storeng\dfs\schemamanager\source\hobt.cpp @ 1417]

02 00007fd2 'c2cdc950 00007ff9' 05f9d1c7 sqlmin! HoBtFactory::GetHoBtAccess + 0x370 [d:\b\s1\sources\sql\ntdbms\storeng\dfs\schemamanager\source\schemamgr.cpp @ 2343]

03 (innebygd funksjon)-------sqlmin! HoBtAccess::Init + 0x55 [d:\b\s1\sources\sql\ntdbms\storeng\include\schemamgr.inl @ 1424]

04 (innebygd funksjon)-------sqlmin! HoBtAccess::Init + 0x55 [d:\b\s1\sources\sql\ntdbms\storeng\include\schemamgr.inl @ 1440]

05 00007fd2 'c2cdcb90 00007ff9' 06a75ab6 sqlmin! GetRowsetProperties + 0x177 [d:\b\s1\sources\sql\ntdbms\storeng\dfs\access\dataset.cpp @ 3247]

06 (innebygd funksjon)-------sqlmin! RowsetNewSS::WakeUpInternal + 0x19e [d:\b\s1\sources\sql\ntdbms\storeng\drs\oledb\rowset.cpp @ 2129]

07 00007fd2 'c2cdccb0 00007ff9' 06a54796 sqlmin! RowsetNewSS::Init + 0x266 [d:\b\s1\sources\sql\ntdbms\storeng\drs\oledb\rowset.cpp @ 2264]

08 00007fd2 'c2cdcd70 00007ff9' 06a53ee0 sqlmin! OpenRowsetSS::OpenRowset + 0x116 [d:\b\s1\sources\sql\ntdbms\storeng\drs\oledb\openrst.cpp @ 1077]

09 00007fd2'c2cdcea0 00007ff9'05927380 sqlmin! OpenSystemTableRowset + 0x2d0 [d:\b\s1\sources\sql\ntdbms\storeng\drs\oledb\openrst.cpp @ 681]

0a 00007fd2'c2cdcfd0 00007ff9'05927951 sqlmin! CMEDScanBase::Rowset + 0x560 [d:\b\s1\sources\sql\ntdbms\metadata\src\cmedscan.cpp @ 1451]

0b 00007fd2 'c2cdd490 00007ff9' 058ec0a3 sqlmin! CMEDScan::StartSearch + 0x561 [d:\b\s1\sources\sql\ntdbms\metadata\src\cmedscan.cpp @ 1667]
Du kan samle inn et XE-økt utdata med følgende definisjon.

--opprette økt

OPPRETTE HENDELSEN økt på SERVEREN [xe_waits]

Legge til HENDELSEN sqlos.wait_info)

ACTION(package0.callstack,sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_id,sqlserver.nt_username,sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.session_id)

DER ([opcode]=(1) og ([wait_type]=(52) eller [wait_type]=(50)) AND [varighet] > 100))

Legge til mål-package0.event_file (Sett filename = N' H:\Cases\115101313260378_Denny_Cherry\2015-10-19\xe_waits.xel',max_file_size=(500),max_rollover_files=(30))

MED (MAX_MEMORY = 256000 KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY = 30 SEKUNDER, MAX_EVENT_SIZE = 0 KB, MEMORY_PARTITION_MODE = PER_CPU, TRACK_CAUSALITY = AV, STARTUP_STATE = AV)

GÅLaster inn en DB, ser ut som varme kallstakk er ganske mye på samme måte som du så i dump.

Velg a_callstack, count(*) som hot callstack' fra LatchXEDB.dbo.wait_info

Grupper etter a_callstack

rekkefølgen av 2 desc

...
(kopierer ikke utdata siden den for stor.)


Stort sett alle øverste stakker viser seg for å være en variant av følgende.

sqldk!GenericEvent::CallNextAction (00007fff`c50e3cc0)

sqldk!XeSosPkg::wait_info::Publish (00007fff`c50d14f0)

sqldk!SOS_Scheduler::UpdateWaitTimeStats (00007fff`c50d21e0)

QWORD ptr [sqlmin! _imp_? PostWaitSOS_TaskSAXPEBVSOS_WaitInfoKZ (00007fff'bf318ae0)]

sqlmin!EventInternal<SuspendQueueSLock>::Wait (00007fff`bbeb1b50)

sqlmin!LatchBase::Suspend (00007fff`bbf04fd0)

sqlmin!LatchBase::AcquireInternal (00007fff`bbeb1f20)

sqlmin!BUF::AcquireLatch (00007fff`bbebaf60)

sqlmin!BPool::Get (00007fff`bbebb1f0)

sqlmin!BTreeMgr::Seek (00007fff`bbebdd40)

sqlmin!BTreeMgr::GetHPageIdWithKey (00007fff`bbebdbe0)

sqlmin!IndexPageManager::GetPageWithKey (00007fff`bbebd6e0)

sqlmin!IndexDataSetSession::LocatePageForInsert (00007fff`bbf265d0)

sqlmin!IndexDataSetSession::InsertSmallRecord (00007fff`bbf25e50)

Forfatter:Fang Fang Meng (CSS)
Writer: v-shysun
Teknisk redaktør: tejasaks; keiikoga; ajayj; v-fmeng;
Redaktør: v-phoebh, v-rhowar

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.

Fellesskap hjelper deg med å stille og svare på spørsmål, gi tilbakemelding og høre fra eksperter med stor kunnskap.

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?
Når du trykker på Send inn, blir tilbakemeldingen brukt til å forbedre Microsoft-produkter og -tjenester. IT-administratoren kan samle inn disse dataene. Personvernerklæring.

Takk for tilbakemeldingen!

×