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+0x1dLø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