A Microsoft distribui as correções R2 do Microsoft SQL Server 2008 como um ficheiro transferível. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção de R2008 do SQL Server 2008.
Sintomas
Considere o seguinte cenário:
-
Uma aplicação executa uma consulta que faz referência a algumas tabelas temporárias no Microsoft SQL Server 2008 e no Microsoft SQL Server 2008 R2. As tabelas temporárias são criadas numa sessão em vez de num procedimento armazenado.
-
O plano de consulta está em cache.
-
Muitos utilizadores executam a mesma consulta num ambiente altamente simultâneo. Por exemplo, muitos utilizadores usam uma aplicação que executa a seguinte consulta:
create table #x (col1 int) go insert into #x values (1) go select * from #x where col1 = 1 go
Neste cenário, a aplicação encontra problemas de desempenho.Nota Para obter mais informações sobre como identificar este problema, consulte a secção "Mais informações".
Causa
Este problema ocorre porque os mesmos planos de consulta são inseridos em cache no mesmo balde de haxixe para cada utilizador quando o texto de consulta é o mesmo. Quando um grande número de planos são atados para o mesmo balde (também conhecido como uma cadeia de haxixe), o tempo para procurar um plano na cache aumenta significativamente, e os problemas de desempenho podem ocorrer. Além disso, os fios dos trabalhadores podem encontrar uma forte contenção do giro, e outros fios são afetados quando estes fios do trabalhador não realizam os rendimentos corretos do programador.
Resolução
Nota Apenas a atualização para SQL Server 2008 R2 está atualmente disponível. Para o SQL Server 2008, consulte a secção "Workaround" para contornar este problema.
Informação de atualização cumulativa
Sql Server 2008 R2 Service Pack 1
A correção para este problema foi lançada pela primeira vez na Cumulativa Update 1 para SQL Server 2008 R2 Service Pack 1. Para obter mais informações sobre como obter este pacote de atualização cumulativa, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
2544793 Pacote de atualização cumulativo 1 para SQL Server 2008 R2 Service Pack 1Nota Como as construções são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção R2008 do SQL Server 2008. Recomendamos que considere aplicar o mais recente lançamento de correção que contém este hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:
2567616 O SQL Server 2008 R2 constrói que foram lançados após o lançamento do SQL Server 2008 R2 Service Pack 1
SQL Server 2008 R2
A correção para este problema foi lançada pela primeira vez na Atualização Cumulativa 7. Para obter mais informações sobre como obter este pacote de atualização cumulativa para SQL Server 2008 R2, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
2507770 Pacote de atualização cumulativa 7 para SQL Server 2008 R2 Nota Como as construções são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção R2008 do SQL Server 2008. Recomendamos que considere aplicar o mais recente lançamento de correção que contém este hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:
981356 O SQL Server 2008 R2 constrói que foram lançados após o lançamento do SQL Server 2008 R2
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Solução
Para contornar este problema no SQL Server 2008 e no SQL Server 2008 R2, mova quaisquer referências de tabelas temporárias para procedimentos armazenados no interior.
Mais Informações
Para obter mais informações sobre como criar e modificar os fundamentos da tabela, visite o seguinte website da MSDN:
Como criar e modificar os fundamentos da tabelaA contenção de spinlock pode ser identificada a partir da sys.dm_os_spinlock_stats visão de gestão dinâmica (DMV) que tem uma alta taxa de contenção no SOS_CACHESTORE spinlock. Para identificar esta questão, executar uma consulta que se assemelha ao seguinte:
select cp.bucketid, count(cp.bucketid) as BucketCount, st.text from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) as st group by cp.bucketid, st.text having count(cp.bucketid) >1 order by BucketCount descSe as seguintes condições forem verdadeiras quando executar esta consulta, poderá encontrar os problemas de desempenho:
-
Esta consulta gera o mesmo texto de consulta.
-
A contagem para o mesmo balde é grande.Nota Uma grande contagem para o mesmo balde é geralmente superior a 1000.
-
As consultas referem tabelas temporárias