INF: Cliente efeitos no débito do SQL Server

Traduções de Artigos Traduções de Artigos
Artigo: 180775 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Na avaliação áreas gerais que afectam o desempenho, mais frequentemente considerado aspectos são a velocidade do processador, E/s do disco e memória no servidor. Embora o desempenho estas partes do servidor sejam cruciais para desempenho adequado, também tem de considerar latência de rede e tempo de processamento do cliente como factores que também pode ter um grande impacto no desempenho global do sistema.

Este artigo descreve as último áreas e fornece orientações para avaliar o impacto podem ter no servidor.

Mais Informação

Será utilizado o exemplo a seguir ao longo do documento. Os passos para duas ligações de efectuar a mesma actualização com apenas uma pequena diferença na sintaxe do Transact-SQL.

Ligação 1

use pubs
go
select convert(char(30), GetDate(), 9) "Start Time"
go

            Begin transaction

   Go   ==>   Send to SQL Server and process results

            Update authors set au_lname = au_lname

   Go   ==>   Send to SQL Server and process results

Commit / Rollback transaction

   Go   ==>   Send to SQL Server and process results

select convert(char(30), GetDate(), 9) "End Time"
go
				

Ligação 2

use pubs
go
select convert(char(30), GetDate(), 9) "Start Time"
go
begin transaction
if(0 = @@ERROR)
begin
   update authors set au_lname = au_lname
   if(0 = @@ERROR)
   begin
      commit transaction
   end
   else
   begin
      rollback transaction
   end
end
go    ==>   Send to SQL Server and process results
select convert(char(30), GetDate(), 9) "End Time"
go
				

Trips e de rede

Ligação 1 requer três viagens ao computador do SQL Server:
  • Iniciar transacção
  • Actualização
  • Consolidar / anulação transacções
Ligação 2 requer uma viagem única para concluir a actualização.

Cancelamento de consulta

A biblioteca de base de dados e as API de ODBC suportam o processamento de consultas assíncronas. Por exemplo, biblioteca de base de dados utiliza a função de dbdataready para permitir que o cliente a consultar o estado de conclusão da consulta.

Na biblioteca de base de dados, a função dbdataready é controlada pelo valor DataReadySleep. Para obter informações adicionais sobre a chave de registo DataReadySleep, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
159234: INF: como alterar o valor de suspensão utilizado pelo Dbdataready

Como tempos de inactividade afectam os intervalos

Por predefinição, o valor de suspensão é 250 milissegundos.

Ligação 1 torna três viagens arredondar para o SQL Server. Por predefinição, o cliente encontra um mínimo de 750 milisegundos do tempo de espera, não a hora de contagem para a transferência de rede real. O tempo de espera é calculado a partir (250 milissegundos * 3) = 750 milissegundos.

Ligação 2 faz com que uma única viagem e encontra um mínimo de 250 milisegundos do tempo de espera, sem contar o tempo de transferência por rede real.

Pode alterar a velocidade deste exemplo por um factor de três, simplesmente, tirando partido da sintaxe do Transact-SQL e removendo dois rede round viagens.

Como o tráfego de rede afectam outros utilizadores

Ligação 1 contém uma transacção aberta para um mínimo de 500 milissegundos. Depois de abrir a transacção, demora 500 milisegundos para concluir a actualização e, em seguida, confirmar ou anular a transacção. Concorrência da base de dados impede que outros utilizadores a aceder a registos que está a modificar.

Ligação 2 mantém a transacção aberta apenas desde conforme necessário para concluir a operação. Num 133-MHz Pentium processador único computador com o SQL Server e ISQL/w, os intervalos seguintes são vistos.

NOTA: A E/s de rede final não é mostrado dos seguintes exemplos. Depois da confirmação ou anulação concluída os bloqueios são lançados mas a E/s final não é processadas.
   Begin transaction                5 milliseconds
   Update                          20 milliseconds
   Commit/Rollback transaction      7 milliseconds
      TOTAL                        32 milliseconds
				

Ligação 2 concluirá em aproximadamente 32 milissegundos, enquanto que a ligação 1 requer uma janela de processamento muito maior e expande significativamente o tempo de latência de transacção.
   Begin transaction                5 milliseconds
   Network I/O                    250 milliseconds
   Update                          20 milliseconds
   Network I/O                    250 milliseconds
   Commit/Rollback transaction      7 milliseconds
      TOTAL                       532 milliseconds
				

Conforme se mostra acima, o tempo de rede é um factor simples de três. No entanto, o impacto de bloqueio que impõe o exemplo de outros utilizadores da base de dados é um factor de 16 (532/32 = ~ 16).

Agora vamos supor que este exemplo simples é de um computador portátil remoto estabelecer ligação com um modem de 28,8. Para além dos atraso 250 milissegundos impostas pelo parâmetro dbdatareadysleep, o tempo decorrido, na realidade, transmita as informações através de ligação lenta se appreciable. Ligação 1 irá afectar outros utilizadores da base de dados por um factor ainda maior, enquanto a ligação 2 seria afectado principalmente pela velocidade do computador cliente. O comando é enviado uma vez processadas em SQL Server em 32 milissegundos. O único utilizador do sistema que sofrer um abrandamento é o utilizador remoto, que é como previsto devido a modem lento.

Tempo de desfasamento de cliente

Tempo de desfasamento de cliente é o período de tempo que decorre enquanto o cliente processa os resultados que recebeu. Se observar o ligação 1 novamente, pode ver rapidamente como isto pode afectar o processo. Se um extra 10 milissegundos são necessários para o cliente tratar um conjunto de resultados, pode adicionar outro 30 milissegundos o tempo de transacção global e ainda outro 20 milissegundos o tempo de latência de transacção.

Vamos mudar exemplos novamente. Neste caso existe uma tabela de inventário a partir de um sistema online. Ter gasto meses desenvolver e instalar o que deve ser o sistema de processamento de encomenda online mais rápidas no histórico. Os utilizadores podem procurar, adquirir e manter um carrinho de compras, entre outras opções. Esta é a tabela tbllnventory:
   tblInventory
      iProductID       int
      strTitle         varchar(50)
      strDescription   varchar(255)
      iSize            int
      iInStock         int
      iOnOrder         int
      iType            int
				

Pretender adquirir alguns cereais. No entanto, quero ver o que está disponível. É possível definir cereais escrever 2, para que a aplicação emite a consulta seguinte. Neste exemplo, a base de dados contém 750 cereais relacionadas itens.
   Select strTitle, strDescription, iSize, iInStock from tblInventory
   where iType = 2
				

O SQL Server compilar e analisar a consulta e, em seguida, começar a devolver os resultados. Bloqueios partilhados são adquiridos nas páginas adequadas. Lembre-se de que partilhado bloqueios bloco actualização, inserir e operações de eliminação.

Ao mesmo tempo, porque a aplicação é utilizada em todo o país, seis outras pessoas estão a tentar colocar cereais encomendas.

SQL Server preenche o primeiro pacote de transmissão em sequência (TDS) dados tabulares, envia ao cliente e, em seguida, aguarda que o cliente para processar os resultados. Durante o período de tempo que o cliente está a processar os resultados (tempo de latência de cliente), SQL Server continua a manter um bloqueio de página partilhada na página onde este estava a processar. Este bloqueio partilhado pode bloquear um utilizador que está a tentar concluir uma encomenda.

Parece como uma acção simples. Seleccione um conjunto de resultados do SQL Server e inserir os valores de uma caixa de listagem. Um computador de processador Pentium 133-MHz pode adicionar 750 itens para uma caixa de listagem apenas através de um segundo. Desactivar a caixa de listagem ao arquivo tem apenas de um terço de segundo. Pode diminuir significativamente o tempo de latência de cliente desactivando simplesmente a caixa de listagem.

Pode mesmo ser inclined alterar a operação select para reduzir ainda mais o bloqueio. Limitar a exposição de bloqueio partilhado, alterar a consulta à seguinte.
   Insert * into #tblSelect from
   Select strTitle, strDescription, iSize, iInStock from tblInventory
				

   Select * from #tblSelect
				

A consulta é isolada no SQL Server e não será iniciado devolver resultados até que foram movidos para a tabela temporária e todos os bloqueios partilhados são libertados da tabela ' Inventário '. Isto limita o tempo que bloqueios partilhados são mantidos na tabela inventário o tempo necessário para o SQL Server mover os resultados para tempdb. O controlo é novamente com a base de dados e não o cliente.

Outra forma de efectuar um comportamento semelhante é efectuar um cliente "inteligente". Em vez de preencher uma caixa de listagem, poderá ser mais rápido carregar uma matriz. No entanto, ainda tiver dúvidas sobre a ser sujeitos a débito da rede. A tabela temporária é uma solução melhor nestas situações.

Como pode ver, o cliente pode reproduzir um rolo pivotal in o débito de base de dados. Deverá ser especial cuidado ao trabalhar com os sistemas remotos e relatórios. A quantidade de tempo que o cliente leva para processar resultados mantendo bloqueios tem o potencial para afectar o débito de base de dados. Estes tipos de problemas podem ser difícil de ver como os períodos de latência poderão ser intervalos de 100 milisegundos e difíceis de ver o procedimento sp_who armazenados. Utilize uma ligação lenta para ver rapidamente o comportamento. Executar a aplicação a partir de uma ligação RAS e veja o que é o comportamento geral como. Também pode tirar partido do utilitário de rastreio de SQL para perfil cuidadosamente a aplicação.

Para obter informações adicionais, consulte os seguintes artigos na base de dados de conhecimento da Microsoft:
165951: INF: resultado processamento para o SQL Server

172117: INF: How to perfil Transact-SQL Code em procedimentos armazenados e accionadores

162361: INF: compreender e resolver problemas de bloqueio do SQL Server

167610: INF: avaliar degradação do desempenho de consulta

48712: INF: limites de tempo correctamente na biblioteca de base de dados de processamento

117143: INF: quando e como utilizar dbcancel() ou sqlcancel()

Propriedades

Artigo: 180775 - Última revisão: 14 de fevereiro de 2014 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 6.5 Standard Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbinfo KB180775 KbMtpt
Tradução automática
IMPORTANTE: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 180775

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com