Applies ToSQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2012 Express SQL Server 2012 Web SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2008 Service Pack 3 SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard

Por predefinição, Service Pack 1 para o SQL Server 2014 e Service Pack 3 para SQL Server 2012 incluem esta correcção e não tem de adicionar quaisquer sinalizadores de rastreio para activar a correcção. Para activar a correcção depois de instalar uma das actualizações cumulativas contidas na secção Resolução, tem de iniciar o Microsoft SQL Server, adicionando o sinalizador de rastreio 1236 aos parâmetros de arranque.

Sintomas

Suponha que executa uma instância de Microsoft SQL Server 2014, 2012 do SQL Server, SQL Server 2008 ou SQL Server 2008 R2 num computador que contém o número de processadores. Quando o número de bloqueios (tipo de recurso = base de dados) para uma base de dados específica excede um determinado limiar, detectar os seguintes problemas de desempenho:

  • Ocorrem valores elevados para a contagem de spinlock LOCK_HASH .Nota Consulte a secção "Mais informação" para obter informações sobre como monitorizar este spinlock.

  • Consultas ou operações que necessitem de bloqueios de base de dados demoram muito tempo a ser concluída. Por exemplo, poderá detectar os atrasos de desempenho seguintes:

    • Inícios de sessão do SQL Server

    • Consultas de servidor ligado

    • sp_reset_connection

    • Transacções

Nota Para localizar a lista de bloqueios (tipo de recurso = base de dados) numa determinada base de dados, consulte a secção "Mais informação". O valor de limiar varia consoante o ambiente.

Cada nova actualização cumulativa para o SQL Server contém todas as correcções e todas as correcções de segurança que foram incluídas na anterior actualização cumulativa. Verifique as actualizações cumulativas mais recentes para o SQL Server:

Informações sobre correçãoExiste uma correção suportada pela Microsoft. No entanto, esta correção destina-se apenas a corrigir o problema descrito neste artigo. Aplique esta correcção apenas em sistemas que tenham este problema específico.Se a correção está disponível para transferência, existe uma secção de "Transferência de Correção Disponível" na parte superior deste artigo da Base de Dados de Conhecimento. Se esta secção não for apresentado, submeta um pedido de suporte e serviço de cliente Microsoft para obter a correcção.Nota Se ocorrerem problemas adicionais ou se for necessária a resolução de problemas, poderá ter de criar um pedido de assistência separado. Os custos de normais do suporte serão aplicados a perguntas de suporte adicionais e os problemas incluídos nesta correcção específica. Para uma lista completa dos números de telefone de suporte e serviço de cliente da Microsoft ou para criar um pedido de assistência separado, visite o seguinte Web site da Microsoft:

http://support.microsoft.com/contactus/?ws=supportNota O formulário "Transferência de correcção disponível" apresenta os idiomas nos quais a correcção está disponível. Se não visualizar o seu idioma, é porque uma correcção não está disponível para esse idioma.

Estado

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".

Mais informações

Quando uma aplicação efectua uma ligação ao SQL Server, primeiro estabelece um contexto de base de dados. Por predefinição, a ligação irá tentar obter um bloqueio de base de dados em modo SH. O bloqueio de Base de dados SH será liberado quando a ligação está parada ou contexto de base de dados é alterado durante a duração da ligação. Se tiver muitas ligações activas que utilizem o mesmo contexto de base de dados, pode ter muitos bloqueios do tipo de recurso base de dados para essa base de dados específica.No computador que tenha 16 ou mais CPUs, apenas os objectos tabela utilizam um esquema de bloqueio com partições. No entanto, não estão particionados os bloqueios de base de dados. Assim, quanto maior for o número de base de dados bloqueia, mais tempo que demora para o SQL Server obter um bloqueio na base de dados. A maioria das aplicações não detectar quaisquer problemas que são causados por esta estrutura. Mas, logo que o número exceder um determinado limiar, o trabalho adicional e a hora é necessária para obter o bloqueio. Embora o custo é apenas micro segundos para cada adicionais do bloqueio, o tempo total pode aumentar rapidamente, uma vez que os recipientes de hash de bloqueio estão protegidos através da utilização de um spinlock. Isto faz com que os ciclos de CPU adicionais e aguarda trabalhadores adicionais obter o bloqueio.Esta correcção introduz a base de dados de bloqueio de criação de partições quando o sinalizador de rastreio T1236 está activado no arranque. O bloqueio de base de dados de criação de partições mantém a profundidade da lista de bloqueio gerível em cada partição local. Isto optimiza significativamente o caminho de acesso que é utilizado para obter um bloqueio de base de dados .Para monitorizar o spinlock LOCK_HASH , pode utilizar a seguinte consulta.SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)DECLARE @counter int = 1WHILE @counter < 100 BEGIN INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH' WAITFOR DELAY '00:00:05' SET @counter +=1 ENDSELECT * FROM #spinlock_stats ORDER BY [CaptureTime]DROP TABLE #spinlock_stats Para mais informações sobre como diagnosticar e resolver contenção de spinlock no SQL Server, vá para o seguinte documento:

Diagnosticar e resolver contenção de Spinlock no SQL ServerNota Apesar deste documento destina-se de SQL Server 2008 R2, é aplicável a 2012 do SQL Server a informação.

Referências

Para mais informações sobre sinalizadores de rastreio de 2012 do SQL Server, vá para o seguinte Web site da TechNet:

Obter informações sobre sinalizadores de rastreio no SQL Server 2012 Para mais informações sobre como localizar o número de bloqueios de base de dados no utilizador por base de dados, utilize a seguinte consulta para calcular este valor:select Resource_database_id, resource_type, request_mode, request_status, count (*) 'LockCount' from sys.dm_tran_locks group by Resource_database_id, resource_type, request_mode, request_status

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.