A conexão SQL é muito lenta

1

Temos um aplicativo da web de negócios no ASP.NET + SQL Server 2008.

No começo, o SQL Server e o IIS estavam na mesma máquina. Agora nós compramos outra máquina. A configuração atual é a máquina do IIS mais a máquina do SQL Server, e eles são conectados por uma conexão LAN de 1 gb.

Com essa configuração, nosso aplicativo da web é mais lento que antes. A largura de banda máxima é de 1-2% da rede, cerca de 15mbps.

Quando usamos outros threads para o mesmo SQL Server da mesma máquina do IIS, o uso da rede é maior. Então, isso não é problema com o SQL Server.

Ho podemos aumentar a largura de banda para essa conexão SQL?

Especificações:

  • .Net 3.5
  • SQL Server 2008 Standard
  • A transferência de arquivos
  • pode usar 100% da LAN SQL
  • conexão pelo protocolo TCP / IP SQL
  • logins Pool testado com enable e
por user66905 14.01.2011 / 17:15

4 respostas

3

Usando o Profiler, examine as consultas em execução na instância do SQL.

Se o aplicativo não estiver bem codificado, você pode estar em um cenário de "cortes de até 1000 cortes", em que há centenas ou milhares de consultas pequenas, possivelmente insignificantes, retornando linhas únicas em vez de um conjunto ou uma% resultadoJOIN ed. Toda vez que o aplicativo deseja dados para um desses conjuntos de consultas, separar os níveis introduz uma enorme quantidade de latência extra em uma conexão de rede. Isso é muito contra-intuitivo se você nunca viu essa situação antes.

A execução do Profiler em um servidor com volume de consulta relativamente alto pode ser difícil, mas se for esse volume alto, você poderá ativá-lo por algumas vezes, de 1 a 2 minutos por vez, e obter uma boa amostra. Apenas faça o que fizer, não execute o Profiler em uma conexão de rede. Execute o Profiler na caixa do SQL Server via RDP ou configure o rastreamento para executar na própria instância (preferencial).

Suponho que você poderia lançar hardware nisso para reduzir a latência da rede. IMO, que realmente não é escalável, mas se você está em apuros com um aplicativo enorme que precisa ser consertado, é uma opção, pelo menos temporariamente.

    
por 09.02.2011 / 03:41
1

Eles são servidores de boa qualidade com placas de rede decentes? cartões de rede baratos (como cartões RAID baratos) são uma falsa economia. E todos os drivers mais recentes? Você tem que começar em uma extremidade e trabalhar o seu caminho através da verificação de tudo que tem uma configuração limpa. Em seguida, inicie a solução de problemas.

E você alocou memória suficiente para seus processos?

Sempre procure por coisas que sejam "diferentes". Meu último mais esquisito é um servidor de ponta que estava rodando devagar. Abundância de CPU, memória, nenhuma atividade de disco etc. O Gerenciador de Tarefas mostrou 120.000 alças ?! Um driver de impressora estava vazando uma alça a cada 2 segundos.

    
por 09.02.2011 / 04:32
0

Quando o servidor da web e o SQL Server residem na mesma máquina, por padrão shared memory é usado para o protocolo. Se você mover o SQL Server para outra caixa, a comunicação terá que passar por TCP/IP .

Basicamente, ao usar a memória compartilhada, o aplicativo cliente pode ler tabular data streams (TDS) diretamente da memória do SQL Server. Ao usar o protocolo TCP / IP, o TDS deve ser convertido em TCP / IP no servidor, enviado para o cliente e convertido novamente em TDS, o que leva tempo.

Não consigo encontrar uma boa referência para versões recentes, mas leia isso , não mudou muito desde então.

If your app runs on the same machine as your SQL Server, consider using the shared memory Net-Library if you aren't already. Shared memory Net-Library-based connections are often considerably faster than other types of connections. Keep in mind what I said earlier, though: always thoroughly test a solution and compare it with viable alternatives before assuming that it is inherently better or faster. The proof is in the pudding.

e esta postagem do blog também oferece uma breve visão geral. Uma explicação mais técnica pode ser encontrada em simple-talk / a>

    
por 05.04.2016 / 11:28
-1

Comece carregando os contadores SQL do monitor de desempenho na caixa sql e dando uma olhada.

um aplicativo .net? As chances são de que é mal escrito com consultas adhoc em todo o lugar.

Você está usando procs 100% armazenados? Se não, é melhor que haja uma boa razão.

Ter o servidor SQL na mesma caixa provavelmente mascarou algumas das más escolhas de design feitas anteriormente no aplicativo. Agora, eles estão à vista.

As consultas SQL podem ser incrivelmente rápidas em um modem de 56k, se apenas o conjunto de resultados é retornado. Mas, não se você está fazendo coisas como usar cursores do lado do cliente, onde você tem que transportar tudo de volta através do fio.

    
por 09.02.2011 / 07:51