Remediere: Apărea probleme de performanțe în medii NUMA în timpul străine pagina de procesare în SQL Server 2012 sau SQL Server 2014

Număr eroare: 201012 (întreținere conținut) VSTS:1952739

Simptome

În mediile NUMA, Microsoft SQL Server se confruntă cu una sau mai multe dintre următoarele probleme de performanță:

  • Un proces de SQL Server se confruntă excesive de utilizare CPU.

  • Interogări dura mult timp pentru a fi terminată.

  • Aplicații sau SQL Server Agent activităţilor experimentați interogare întreruperi sau întreruperi de conexiune.

  • Un proces de SQL Server este repornit de serviciul Cluster.

În plus, pot apărea următoarele simptome:

  • Valori privilegiat pentru SOS_PHYS_PAGE_CACHE așteptați tip când interogați sys.dm_os_wait_stats dynamic management view (DMV)

  • Valori privilegiat pentru CMEMTHREAD așteptați tipul și SOS_SUSPEND_QUEUE spinlock când interogați sys.dm_os_spinlock_stats DMV

Rezolvare

Informații despre actualizarea cumulativă

Problema a fost rezolvată mai întâi în următoarea actualizare cumulativă de SQL Server.

Actualizarea cumulativă 2 pentru SQL Server 2014/en-us/help/2967546

Actualizare cumulativă 1 pentru SQL Server 2014/en-us/help/2931693

Actualizare cumulativă 9 pentru SQL Server 2012 SP1/en-us/help/2931078

Fiecare nouă actualizare cumulativă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Verifica cele mai recente actualizări cumulative pentru SQL Server:


Informații despre remedierea rapidă
O remediere rapidă compatibilă este disponibilă de la Microsoft. Cu toate acestea, această remediere rapidă este destinată pentru a corecta doar problema descrisă în acest articol. Aplicați această remediere rapidă numai pentru sistemele care întâmpină această problemă anume.

Dacă remedierea rapidă este disponibilă pentru descărcare, există o secțiune "Descărcare disponibilă pentru remediere rapidă" în partea de sus a acestui articol din baza de cunoștințe. Dacă nu apare această secţiune, trimite o solicitare de la serviciul pentru clienți Microsoft de asistență pentru a obţine remedierea rapidă.

Notă Dacă apar probleme suplimentare sau este necesară depanarea, poate fi necesar să creați o solicitare de asistenţă separată. Se vor aplica costurile uzuale de asistenţă pentru întrebări suplimentare de asistență și probleme care nu fac obiectul remedierii rapide în chestiune. Pentru o listă completă cu numerele de telefon ale clienților servicii și asistență Microsoft sau pentru a crea o solicitare de asistenţă separată, vizitați următorul site Web Microsoft:

http://support.microsoft.com/contactus/?ws=supportNotă Formularul "Descărcare disponibilă pentru remediere rapidă" afişează limbile pentru care este disponibilă remedierea rapidă. Dacă nu vedeți limba dvs., înseamnă că o remediere rapidă nu este disponibilă pentru respectiva limbă.

Important Această remediere este recomandată pentru orice instanță de SQL Server este instalat pe un sistem de NUMA, indiferent de setările de mască de afinitate SQL Server. Această remediere adrese de procesare departe performanță blocaj în managerul de memorie SQL Server.
Problema a fost rezolvată mai întâi în următoarea actualizare cumulativă de SQL Server.

Soluție

Pentru a rezolva aceste probleme, măriți valorile pentru expirare log on și de interogare pentru aplicațiile.

Notă Această soluție poate fi limitat în efectul său. Vă recomandăm să aplicați remedierea rapidă pentru a rezolva problemele care sunt descrise în secţiunea "Simptome".

Stare

Microsoft a confirmat că aceasta este o problemă cu produsele Microsoft enumerate în secţiunea „Se aplică la".

Mai multe informații

Atunci când managerul de memorie Microsoft SQL Server alocă memorie pentru un nod în memorie non-uniform (NUMA acces)-medii activat, Windows poate aloca memorie la ambele noduri locale și la distanță (denumit "departe" sau "străine" pagini) până la destinația dorită pentru fiecare nod se atinge. Deoarece aceste pagini"departe" nu sunt ideal dintr-o perspectivă de performanță, procesul de SQL Server încearcă să atribuiți buffers departe nodul propriu de memorie sau aceste pagini înapoi la sistemul de operare de lansare. Această prelucrare"departe" poate fi cu utilizare intensă CPU şi conduce la o reducere rate de comenzi într-o perioadă de utilizare CPU sporită.

Când nodul local atinge memoria țintă, fire de lucru ajuta la distanță noduri ajunge obiectivelor lor. Alocare pe nodul la distanță și lansarea departe buffers pe același un nod poate apărea în același timp. Acest lucru se produce deoarece aceste căi de cod sunt protejate prin același obiect de sincronizare. Acest lucru duce la probleme privind împărțirea, cauzele ce a crescut de utilizare a CPU și lung de așteptare.

Design curentă în timpul lansarea departe blocuri, am mai întâi mapare paginile și apoi liber-le în memoria cache a paginii fizice. În timpul de alocare, am din nou alocarea paginile și efectuați maparea din nou. Acest lucru provoacă acces la pagina fizic cache şi adaugă probleme privind împărțirea pe pagina fizic cache de blocare.

Schimbarea de la această remediere rapidă adaugă un parametru ReleaseAwayBlock pentru a indica faptul că paginile ar trebui să fie nemapate numai și nu este eliberat în memoria cache. Când este setat semnalizatorul, paginile sunt numai unmapped, și se returnează matrice PFN pentru paginile nemapate. În timpul de alocare, aceasta returnează PFN matrice este utilizat pentru a apela direct MapUserPhysicalPages. De aceea, nu este accesată pagina fizic cache.

Informații despre stiva de apelurintdll!ZwSignalAndWaitForSingleObjectkernel32!SignalObjectAndWait
sqldk!SystemThread::SignalAndWait
sqldk!SOS_Scheduler::Switch
sqldk!SOS_Scheduler::SuspendNonPreemptive
sqldk!SOS_Scheduler::Suspend
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::LongWait
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::Wait
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::Wait
sqldk!TAutoMutex<UnfairRecursiveMutexInternal<SuspendQueueSLock,0>,4294967295>::GetAccess
sqldk!PhysicalPageCache::AllocatePhysicalPages
sqldk!MemoryNode::AllocateUserPhysicalPages
sqldk!SOS_MemoryBlockAllocator::CommitBlockAndCheckNumaLocality
sqldk!SOS_MemoryBlockAllocator::AllocateBlock
sqldk!SOS_MemoryWorkSpace::AllocatePage
sqldk!MemoryNode::AllocatePagesInternal
sqldk!MemoryClerkInternal::GetParentBrokerType
sqldk!MemoryClerkInternal::AllocatePages
sqldk!MemoryObjectFactory::CreateMemObjectInt
sqldk!MemoryObjectFactory::CreateMemObject
sqldk!SOS_UserStore::InitMemoryComponents
sqldk!SOS_UserStore::CreateStore
sqllang!FCreateAccessCheckResultStore
sqllang!CUserToken::InitToken
sqllang!CreateUserToken
sqllang!CUEnvTransient::PSecc
sqllang!FCheckDbAccess
sqllang!CSecurityContext::GetUserToken
sqllang!CSecurityContext::IdUser
sqllang!FHasEntityPermissionsWithAuditState
sqllang!FHasEntityPermissions
sqllang!CSQLObject::FPostCacheLookup
sqllang!CSQLSource::EpgParsingGrammar
sqllang!CAutoRestoreParsingGrammar::{ctor}
sqllang!CSQLSource::Transform
sqllang!CSQLSource::Execute
sqllang!CProtocolHeaderInfo::{dtor}
sqllang!process_request
sqllang!process_commands
sqldk!SOS_Task::Param::Execute
sqldk!SOS_Scheduler::RunTask
sqldk!SOS_Scheduler::ProcessTasks
sqldk!SchedulerManager::WorkerEntryPoint
sqldk!SystemThread::RunWorker
sqldk!SystemThreadDispatcher::ProcessWorker
sqldk!SchedulerManager::ThreadEntryPoint
kernel32!BaseThreadInitThunk
ntdll!RtlUserThreadStart

ntdll!ZwSignalAndWaitForSingleObject
kernel32!SignalObjectAndWait
sqldk!SystemThread::SignalAndWait
sqldk!SOS_Scheduler::Switch
sqldk!SOS_Scheduler::SuspendNonPreemptive
sqldk!SOS_Scheduler::Suspend
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::LongWait
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::Wait
sqldk!UnfairRecursiveMutexInternal<SuspendQueueSLock,0>::Wait
sqldk!TAutoMutex<UnfairRecursiveMutexInternal<SuspendQueueSLock,0>,4294967295>::GetAccess
sqldk!PhysicalPageCache::FreePhysicalPages
sqldk!MemoryNode::FreeUserPhysicalPages
sqldk!SOS_MemoryWorkSpace::DeCommitBlock
sqldk!SOS_MemoryBlockAllocator::DeCommitBlock
sqldk!MemoryNode::ReleaseAwayBlocks
sqldk!SOS_MemoryBlockAllocator::CommitBlockAndCheckNumaLocality
sqldk!SOS_MemoryBlockAllocator::AllocateBlock
sqldk!SOS_MemoryWorkSpace::AllocatePage
sqldk!MemoryNode::AllocatePagesInternal
sqldk!MemoryClerkInternal::GetParentBrokerType
sqldk!MemoryClerkInternal::AllocatePages
sqldk!MemoryObjectFactory::CreateMemObjectInt
sqldk!MemoryObjectFactory::CreateMemObject
sqllang!SOS_OS::CreateMemObject
sqllang!PmoNewMemObjNoX
sqllang!TDSSNIClient::ProcessCommon
sqldk!SOS_Task::Param::Execute
sqldk!SOS_Scheduler::RunTask
sqldk!SOS_Scheduler::ProcessTasks
sqldk!SchedulerManager::WorkerEntryPoint
sqldk!SystemThread::RunWorker
sqldk!SystemThreadDispatcher::ProcessWorker
sqldk!SchedulerManager::ThreadEntryPoint
kernel32!BaseThreadInitThunk
ntdll!RtlUserThreadStart

Referințe

Pentru mai multe informații despre cum să înțelegeți conceptul de pagini externe, mergeți la următorul blog post site Web MSDN:

Cum funcționează: SQL Server (NUMA blocuri locale, externe și departe de memorie)

Author:jannaw;
Scris de: v-shysun
Examinare tehnică: Bob Dorr; Bob cartier; Ajayj; Sureshka; ramakoni; jannaw; sqlprev
Editor: v-jesits

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

V-a fost de ajutor această informație?

Vă mulțumim pentru feedback!

Vă mulțumim pentru feedback! Se pare că ar fi util să luați legătura cu unul dintre agenții noștri de asistență Office.

×