Update: Leistungsprobleme treten NUMA-Umgebung während fremden Seite verarbeitet SQL Server 2012 oder SQL Server 2014

Fehler #: 201012 (Content Maintenance) VSTS:1952739

Problembeschreibung

NUMA-Umgebung auftritt Microsoft SQL Server eine oder mehrere der folgenden Leistungsprobleme:

  • Ein SQL Server-Prozess auftritt übermäßige CPU-Auslastung.

  • Abfragen dauern lange abgeschlossen werden.

  • Applikationen oder SQL Server-Agent-Aufträge auftreten Abfrage Timeouts oder Verbindungstimeouts.

  • Ein SQL Server-Prozess wird vom Clusterdienst neu gestartet.

Darüber hinaus können die folgenden Symptome auftreten:

  • Höhere Werte für SOS_PHYS_PAGE_CACHE Wartetyps beim Abfragen von dm_os_wait_stats dynamic Management View (DMV)

  • Höhere Werte für CMEMTHREAD warten Sie Typ und SOS_SUSPEND_QUEUE Spinlock beim sys.dm_os_spinlock_stats DMV Abfragen

Problemlösung

Informationen zum kumulativen Update

Das Problem wurde erstmals in folgenden kumulativen Update von SQL Server behoben.

Kumulative Update 2 für SQL Server 2014/en-us/help/2967546

Kumulative Update 1 für SQL Server 2014/en-us/help/2931693

Kumulative Update 9 für SQL Server 2012 SP1/en-us/help/2931078

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheits-Updates, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:


Hotfix-Informationen
Ein unterstützter Hotfix ist von Microsoft erhältlich. Dieser Hotfix soll nur der Behebung des Problems dienen, das in diesem Artikel beschrieben wird. Verwenden Sie diesen Hotfix nur auf Systemen, bei denen dieses spezielle Problem auftritt.

Wenn der Hotfix zum Download zur Verfügung steht, gibt es einen Abschnitt "Hotfix download available" ("Hotfixdownload verfügbar") im oberen Bereich dieses Knowledge Base-Artikels. Wenn dieser Abschnitt nicht angezeigt wird, senden Sie eine Anforderung an Microsoft Customer Service and Support, um den Hotfix zu erhalten.

Hinweis Falls weitere Probleme auftreten oder andere Schritte zur Problembehandlung erforderlich ist, müssen Sie möglicherweise eine separate Serviceanfrage erstellen. Die normalen Supportkosten gilt für zusätzliche Support-Fragen und Problemen, die für diesen speziellen Hotfix nicht qualifizieren. Eine vollständige Liste der Telefonnummern von Microsoft Customer Service and Support oder eine separate Serviceanfrage erstellen finden Sie auf folgender Microsoft-Website:

http://support.microsoft.com/contactus/?ws=supportHinweis Das Formular "Hotfix Download Available" zeigt die Sprachen an, für die der Hotfix verfügbar ist. Wenn Ihre Sprache nicht angezeigt wird, ist dieser Hotfix für Ihre Sprache nicht verfügbar.

Wichtig Dies empfiehlt sich für alle SQL Server-Instanz, die auf einem NUMA-System unabhängig von der SQL Server Affinity Mask installiert ist. Dieses Update behebt den Weg Verarbeitung Leistungsengpass in der SQL Server-Speicher-Manager.
Das Problem wurde erstmals in folgenden kumulativen Update von SQL Server behoben.

PROBLEMUMGEHUNG

Um diese Probleme zu umgehen, erhöhen Sie die Anmelde- und Abfrage Timeoutwerte für die Anwendung.

Hinweis Diese Abhilfe kann Wirkung beschränkt. Wir empfehlen den Hotfix, der im Abschnitt "Symptome" beschriebenen Probleme.

Status

Microsoft hat bestätigt, dass es sich um ein Problem bei den Microsoft-Produkten handelt, die im Abschnitt „Eigenschaften“ aufgeführt sind.

Weitere Informationen

Wenn Microsoft SQL Server-Speicher-Manager reserviert für einen Knoten in non-Uniform Memory Access (NUMA)-aktivierten Umgebung Windows können Speicher aus beiden lokalen und entfernten Knoten (bezeichnet als "Abwesend" oder "Fremdschlüssel" Seiten) bis zum gewünschten Ziel für jeden Knoten erreicht wird. Da diese Seiten"Abwesend" nicht optimale Leistung, versucht SQL Server-Prozess den entsprechenden Speicher Knoten entfernt Puffer zuweisen oder diese Seiten zum Betriebssystem freizugeben. Diese "ABWESEND Verarbeitung" CPU-Intensive und eine Reduzierung Batch Zeitraum erhöhten CPU-Auslastung führen.

Lokale Knoten den Zielspeicher erreicht, können die Arbeitsthreads Remoteknoten ihre Ziele erreichen. Die Zuordnung auf dem entfernten Knoten und Release ABWESEND Puffer auf demselben Knoten kann gleichzeitig auftreten. Dies tritt auf, weil diese Pfade mit derselben Synchronisierungsobjekt geschützt sind. Dies führt zu Konflikten, wodurch CPU-Auslastung und lange Wartezeit erhöhte.

Im aktuellen Entwurf während der Freigabe der Blöcke Weg wir zuerst aufheben Seiten und geben die physische Seite Cache. Während der Zuweisung, wir erneut reservieren Seiten und führen Sie die Zuordnung erneut. Dadurch wird der Zugriff auf physische Seitencache und Konflikte auf physische Seite Cache hinzugefügt.

Die Änderung dieser Hotfix hinzugefügt ReleaseAwayBlock , um anzugeben, dass Seiten nicht zugeordneten nicht im Cache freigegeben Parameter. Wenn das Flag festgelegt ist, werden nur die Seiten ohne Zuordnung, und das Array PFN für nicht zugeordneten Seiten zurückgegeben. Während der Verteilung wurde zurückgegeben, PFN Array MapUserPhysicalPagesdirekt aufgerufen wird. Physische Seitencache erfolgt daher nicht.

Aufruflisteninformationenntdll!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

Referenzen

Weitere Informationen zum Verständnis von fremden Seiten finden Sie auf der folgenden MSDN-Blog Post Website:

So funktioniert es: SQL Server (NUMA lokalen außen- und entfernt Speicherblöcke)

Author:jannaw;
Ersteller: V-shysun
Technische Überprüfung: Bob Dorr; Bob Ward; Ajayj; Sureshka; Ramakoni; Jannaw; sqlprev
Redaktion: V-jesits

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×