CORREÇÃO: Problemas de desempenho ocorrem em ambientes NUMA durante processamento no SQL Server 2012 ou SQL Server 2014 externa da página

BUG n º: 201012 (Manutenção do conteúdo) VSTS:1952739

Sintomas

Em ambientes de NUMA, Microsoft SQL Server enfrenta um ou mais dos seguintes problemas de desempenho:

  • Um processo do SQL Server experiências de uso excessivo da CPU.

  • Consultas levar muito tempo para ser concluída.

  • Aplicativos ou trabalhos do SQL Server Agent enfrentar tempos limite de conexão ou de tempo limite de consulta.

  • Um processo do SQL Server é reiniciado, o serviço de Cluster.

Além disso, você pode enfrentar os seguintes sintomas:

  • Valores elevados para a SOS_PHYS_PAGE_CACHE tipo de espera quando você consulta o modo de exibição de gerenciamento dinâmico de DM os_wait_stats (DMV)

  • Valores elevados para o CMEMTHREAD espere tipo e SOS_SUSPEND_QUEUE spinlock quando você consulta o sys.dm_os_spinlock_stats DMV

Resolução

Informações da atualização cumulativa

O problema foi corrigido primeiro na atualização cumulativa seguinte do SQL Server.

Atualização cumulativa 2 para SQL Server 2014/en-us/help/2967546

Atualização cumulativa 1 para SQL Server 2014/en-us/help/2931693

Atualização cumulativa 9 para o SQL Server 2012 SP1/en-us/help/2931078

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com as atualização cumulativa anterior. Confira as mais recentes atualizações cumulativas para o SQL Server:


Informações sobre o hotfix
Um hotfix compatível foi disponibilizado pela Microsoft. No entanto, esse hotfix destina-se a corrigir somente o problema descrito neste artigo. Aplique este hotfix somente aos sistemas que apresentarem esse problema específico.

Se o hotfix estiver disponível para download, há uma seção "Download de Hotfix disponível" na parte superior deste artigo da Base de Conhecimento. Se essa seção não for exibida, envie uma solicitação ao suporte e atendimento ao cliente Microsoft para obter o hotfix.

Observação: Se ocorrerem problemas adicionais ou qualquer solução de problemas é necessária, você terá que criar uma solicitação de serviço separada. Os custos normais de suporte serão aplicadas a perguntas de suporte adicionais e problemas que não se qualificam para esse hotfix específico. Para obter uma lista completa dos números de telefone do Atendimento Microsoft e suporte ou para criar uma solicitação de serviço separada, visite o seguinte site da Microsoft:

http://support.microsoft.com/contactus/?ws=supportObservação: "Download de Hotfix disponível" exibe os idiomas para os quais o hotfix está disponível. Caso você não veja seu idioma, é porque um hotfix não está disponível para esse idioma.

Importante: Esta correção é recomendada para qualquer instância do SQL Server que está instalada em um sistema NUMA, independentemente das configurações de máscara de afinidade do SQL Server. Essa correção soluciona o gargalo de desempenho de processamento ausente no Gerenciador de memória do SQL Server.
O problema foi corrigido primeiro na atualização cumulativa seguinte do SQL Server.

Solução alternativa

Para contornar esses problemas, aumente os valores de tempo limite de consulta e logon para seus aplicativos.

Observação: Essa solução alternativa pode ser limitada em seu efeito. Recomendamos que você aplicar o hotfix para resolver os problemas que são descritos na seção "Sintomas".

Status

A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Mais informações

Quando o Gerenciador de memória do Microsoft SQL Server aloca memória para um nó no acesso à memória não-uniforme (NUMA)-ambientes ativados, o Windows podem alocar memória de ambos os nós locais e remotos (conhecidos como "ausente" ou "externas" páginas) até o destino desejado para cada nó for atingido. Como essas páginas"ausente" não ideais de uma perspectiva de desempenho, o processo do SQL Server tenta atribuir os buffers ausente para o nó de memória adequada ou liberar essas páginas para o sistema operacional. Esse processamento"ausente" pode consumir da CPU e levar a uma redução nas taxas de lotes durante um período de maior utilização da CPU.

Quando o nó local atinge a memória de destino, os threads de trabalho ajudam a nós remotos atinjam os seus alvos. A alocação do nó remoto e o lançamento de buffers ausente no mesmo nó pode ocorrer ao mesmo tempo. Isso ocorre porque esses caminhos de código são protegidos pelo mesmo objeto de sincronização. Isso leva a contenção, que faz com que maior uso de CPU e tempo de espera longo.

Design atual durante a liberação de blocos ausente, nós primeiro as páginas de desmapeamento e, em seguida, liberá-los para o cache de página física. Durante a alocação, estamos novamente alocar as páginas e realize o mapeamento novamente. Isso faz com que o acesso ao cache de página física e adiciona a contenção no bloqueio de cache de página física.

A alteração desse hotfix adiciona um parâmetro à ReleaseAwayBlock para indicar que páginas devem ser não mapeadas somente e não liberados para o cache. Quando o sinalizador estiver definido, as páginas são apenas não mapeado, e a matriz PFN para as páginas não mapeadas é retornada. Durante a alocação, retornou PFN matriz é usada para chamar diretamente MapUserPhysicalPages. Portanto, o cache de página física não é acessado.

Informações de pilha de chamadantdll!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

Referências

Para obter mais informações sobre como compreender o conceito de páginas externas, vá para o seguinte site de post de blog do MSDN:

Como funciona: SQL Server (blocos de memória Local, externo e distante NUMA)

Author:jannaw;
Gravador: v-shysun
Revisor técnico: Bob Dorr; Bob Ward; Ajayj; Sureshka; ramakoni; jannaw; sqlprev
Editor: v-jesits

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Estas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×