Recursos que usam desvios ou técnicas semelhantes para alterar o comportamento do Microsoft SQL Server podem causar os seguintes problemas:
- Problemas de desempenho
- Resultados incorretos
- Corrupção de disco e memória
- Perda da resposta do SQL Server
- Encerramento do processo inesperado
- Incapacidade de utilização de diagnóstico padrão, como a função fn_get_sql e o comando DBCC INPUTBUFFER
- Maior chance de problemas de segurança
Observação A Microsoft não fornece serviços de suporte para recursos de terceiros que usam desvios ou técnicas semelhantes para alterar o comportamento do SQL Server. Se você estiver trabalhando com serviços de suporte do SQL Server em um problema do SQL Server, e ele é identificado que desvios ou técnicas semelhantes que alteram o comportamento do SQL Server podem ser envolvidas, o profissional de suporte pedirá que você desabilitar ou remover tais desvios ou recursos semelhantes como uma etapa de solução de problemas. Antes de solução de problemas adicional possa ocorrer, o problema informado deve ser reproduzido sem qualquer funcionalidade de desvio presente. O problema não deve ocorrer mais, talvez a Microsoft recomenda que você entre em contato com o fornecedor para o recurso de terceiros e continue a solucionar problemas com a direção do fornecedor.
Desvios são poderosos. Desvios oferecem capacidades avançadas e uma compensação de risco/recompensa. Normalmente, quando um desvio é implementado no SQL Server, o código aplicável é injetado no espaço de processo. Funções ou métodos do SQL Server são interceptadas. Essa atividade pode alterar o comportamento básico de desempenho do SQL Server.
Estas são algumas situações de exemplo e possíveis efeitos colaterais:
- Pacotes recebidos de (TDS) o tráfego de rede são examinados e alterados. O desvio é adicionado em um local crítico o thread do processo de rede net_readdata. Até mesmo alguns ciclos de CPU de 100 neste local podem reduzir significativamente a taxa de lote.
Uma alteração nos dados de TDS reais pode levar a scribblers de memória. Esse problema acionou vários problemas de estabilidade do SQL Server e na corrupção de dados. Problemas podem causar um pacote TDS parcialmente seja alterado e a repetição de lixo para SQL Server. Instalações com esse nível de log pode expor as senhas e outros dados confidenciais que SQL Server o rastreamento foi projetado para eliminar e para ajudar a proteger. - Rotinas de análise do SQL Server são detoured para alterar o comportamento. Possíveis efeitos colaterais são:
- Planos de execução não coincidem com texto de consulta propriamente dita.
- Um comando é enviado apenas uma vez do cliente. No entanto, o comando é executado várias vezes.
- Saída do rastreamento mostra o comando original em vez da consulta alterada.
- O comando DBCC INPUTBUFFER mostra o comando original em vez da consulta alterada.
- A função fn_get_sql mostra dados incorretos. Além disso, a função fn_get_sql é suscetível a exceções e a resultados incorretos. A função fn_get_sql é usada por muitas soluções de monitoramento e pode causar problemas em soluções de monitoramento.
- Em geral o Agendador de modo de usuário (UMS) e a programação do SQL Server sistema operacional (SQLOS) podem ser interrompidos. Isso leva à perda de resposta do SQL Server, para alterações de desempenho e a paralisações.
- As APIs do Win32 que fornecem recursos de segurança aprimorados são detoured. Dependendo da implementação, facilidades de registro com esse nível podem expor as senhas e outros dados confidenciais. Geral UMS e SQLOS de agendamento é interrompido. Isso leva à perda de resposta do SQL Server e a paralisações.
O exemplo a seguir mostra que o
kernel32!GetQueuedCompletionStatus função foi detoured.
MyDLL!MyGetQueuedCompletionStatus
ssnetlib!ConnectionReadAsyncWait
O assembly para a função
GetQueuedCompletionStatus , a primeira instrução foi substituída com uma instrução de salto.
0:038> u kernel32!GetQueuedCompletionStatus
kernel32!GetQueuedCompletionStatus
77e660f1 e90a9f00aa jmp 21e70000 ß This points to an address that does not appear in the loaded module list (lm). It is injected code.
77e660f6 83ec10 sub esp,10h
O assembly para o código injetado mostra a atividade detoured e uma chamada para o arquivo MyDLL.
0:038> u 21e70000
21e70000 55 push ebp
21e70001 8bec mov ebp,esp
21e70003 51 push ecx
21e70004 8b4518 mov eax,dword ptr [ebp+18h]
21e70007 50 push eax
21e70008 8b4d14 mov ecx,dword ptr [ebp+14h]
21e7000b 51 push ecx
21e7000c 8b5510 mov edx,dword ptr [ebp+10h]
21e7000f 52 push edx
21e70010 8b450c mov eax,dword ptr [ebp+0Ch]
21e70013 50 push eax
21e70014 8b4d08 mov ecx,dword ptr [ebp+8]
21e70017 51 push ecx
21e70018 e8234d19ee call MyDLL+0x4d40 (10004d40) <- Call to the MyDLL file.
21e7001d 8945fc mov dword ptr [ebp-4],eax
21e70020 8b55fc mov edx,dword ptr [ebp-4]
Você pode usar as ferramentas de depuração para Windows para determinar se os desvios estão sendo usados. Para fazer isso, siga estes passos:
Observação Sempre teste esse método antes de tentar na produção. Quando você usa as ferramentas de depuração para Windows, o processo pode congelar quando você executa os comandos. Esse comportamento pode afetar negativamente um servidor de produção.
- Anexar o Debugging Tools for Windows para SQL Server ou carregar um arquivo de despejo total do usuário.
- Emita o seguinte comando do depurador. Este comando inspeciona cada imagem em relação à imagem em disco para determinar se os desvios tenham sido injetados.
!for_each_module "!chkimg -v @#Base -d"
- Separar o depurador.
Para obter as ferramentas de depuração para Windows, visite o seguinte site da Microsoft:
Se a imagem de memória foi alterada, a saída pode ser semelhante ao seguinte:
Comparison image path: c:\program files\microsoft sql server\mssql\binn\ssnetlib.dll\ssnetlib.dll
Scanning section: .text
Size: 56488
Range to scan: 0c261000-0c26eca8
0c263710-0c26371a 11 bytes - ssnetlib!ConnectionClose
[ 8b ff 55 8b ec 83 ec 10:68 00 00 00 00 e9 27 8a ]
0c2641e0-0c2641ea 11 bytes - ssnetlib!ConnectionReadAsync (+0xad0)
[ 8b ff 55 8b ec 83 ec 38:68 00 00 00 00 e9 00 7e ]
0c265160-0c26516a 11 bytes - ssnetlib!ConnectionWriteAsync (+0xf80)
[ 8b ff 55 8b ec 83 ec 28:68 00 00 00 00 e9 ba 70 ]
Total bytes compared: 56488(100%)
Number of errors: 33
33 errors : 0c260000 (0c263710-0c26516a)Você pode revisar o assembly para examinar mais de perto o problema da seguinte maneira:
0:038> u ssnetlib!ConnectionClose
ssnetlib!ConnectionClose]:
0c263710 6800000000 push 0
0c263715 e9278ada03 jmp MyDLL!MyGetQueuedCompletionStatus <- A detour has been installed.
Recomendamos que você entre em contato com o provedor dos desvios ou das técnicas semelhantes para obter informações sobre como usar a desvios ou técnicas semelhantes no SQL Server. Para obter mais informações sobre desvios e técnicas semelhantes, visite o seguinte site da Microsoft Research Center na Web:
ID do artigo: 920925 - Última revisão: quinta-feira, 10 de janeiro de 2013 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
- Microsoft SQL Server 2005 Express Edition
- Microsoft SQL Server 2005 Express Edition with Advanced Services
- Microsoft SQL Server 2005 Standard Edition
- Microsoft SQL Server 2005 Workgroup Edition
- Microsoft SQL Server 2005 Developer Edition
- Microsoft SQL Server 2005 Enterprise Edition
- Microsoft SQL Server 2005 Standard X64 Edition
- Microsoft SQL Server 2005 Enterprise X64 Edition
- Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
- Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
- Microsoft SQL Server 2000 Personal Edition
- Microsoft SQL Server 2000 Standard Edition
- Microsoft SQL Server 2000 Workgroup Edition
- Microsoft SQL Server 2000 Developer Edition
- Microsoft SQL Server 2000 Enterprise Edition
- Microsoft SQL Server 2008 Developer
- Microsoft SQL Server 2008 Enterprise
- Microsoft SQL Server 2008 Express
- Microsoft SQL Server 2008 R2 Datacenter
- Microsoft SQL Server 2008 R2 Developer
- Microsoft SQL Server 2008 R2 Enterprise
- Microsoft SQL Server 2008 R2 Express
- Microsoft SQL Server 2008 R2 Standard
- Microsoft SQL Server 2008 R2 Web
- Microsoft SQL Server 2008 R2 Workgroup
- Microsoft SQL Server 2008 Web
- Microsoft SQL Server 2008 Workgroup
- Microsoft SQL Server 2012 Developer
- Microsoft SQL Server 2012 Enterprise
- Microsoft SQL Server 2012 Express
- Microsoft SQL Server 2012 Standard
- Microsoft SQL Server 2012 Web
- SQL Server 2012 Enterprise Core
| kbtshoot kbexpertiseadvanced kbinfo kbmt KB920925 KbMtpt |
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo:
920925
(http://support.microsoft.com/kb/920925/en-us/
)