Tenho um programa escrito em Delphi que usa o SQL Server 2008 como mecanismo de banco de dados. Estou em um link p2p fornecido por duas nano estações m5. Quando executo uma consulta específica dentro do programa, o monitor de rede mostra que o cliente está capturando alguns dados do servidor com 8Mb/segundo por 6 segundos de duração.
Além disso, quando conecto o cliente diretamente ao servidor por cabo Ethernet e executo a mesma consulta, ele obtém os mesmos dados, mas mais rápido (Obtendo esses dados com 20 MB/segundo por apenas 2 segundos de duração)mas quando copio um arquivo grande do servidor para o cliente, ele será copiado com até 55Mb/segundo.
Isso está me incomodando porque faz com que o aplicativo cliente seja executado tão lentamente do que a largura de banda real da rede é capaz. Quero saber se existe uma maneira de forçar o SQL Server a usar a largura de banda máxima da rede.
Windows Server 2012 R2 e SQL Server 2008 rodando apenas com protocolo de rede tcp/ip habilitado e servidor de rede full duplex de 100 MB core i5 com 8 GB DDR 3 e SSD de 160 GB e NIC gigabit
Responder1
Você não obterá a mesma velocidade da transferência de um arquivo, mas espero que possa ficar mais rápido.
Use o SQL Profiler para registrar a consulta no banco de dados. Dê uma olhada nos resultados para garantir que o programa não esteja enviando consultas desnecessárias acompanhando a consulta principal, o que devido à latência pode estar retardando as coisas. Idealmente, você deseja ver uma conexão e apenas uma consulta.
Você também pode fazer alterações no programa Delphi? Se puder, certifique-se de usar o pool de conexões. (Criando uma conexão uma vez e reutilizando-a quando precisar fazer uma consulta) A própria conexão SQL requer cerca de 16 pacotes trocados, multiplique isso pela sua latência e pode somar. Digamos que você tenha uma latência de 100 ms e a conexão poderá levar 1,6 segundos para ser concluída.