A latência ou minha VPN sufocando meu Excel aos uploads do SQL Server?
-
20-09-2019 - |
Pergunta
Estou enviando dados do Excel para o SQL Server usando a seguinte estrutura:
Private Sub ado_upload()
Dim objConnection As New ADODB.Connection
Dim objCommand As New ADODB.Command
Dim strSQL As String
Dim strDSN As String
Dim intCounter As Integer
strDSN = "provider=SQLOLEDB;" _
& "server=<server>;" _
& "database=<database>;" _
& "uid=<uid>;pwd=<pwd>;" _
& "trusted_connection=false;"
With objConnection
.ConnectionString = strDSN
.Open
End With
strSQL = "SET NOCOUNT ON; " _
& "INSERT INTO dbo.[table1] ( [col1] ) VALUES ( ? );"
With objCommand
.ActiveConnection = objConnection
.CommandText = strSQL
.Prepared = True
.Parameters.Append .CreateParameter("col1", adInteger, adParamInput)
For intCounter = 0 To 9
.Parameters("Col1").Value = intCounter
.Execute
Next intCounter
End With
End Sub
A velocidade do procedimento depende da distância geográfica entre o servidor e o computador executando o procedimento. No próprio servidor, é rápido (300.000 inserções em menos de 10 minutos), do outro lado do país, é relativamente lento (300.000 inserções podem levar horas). Os uploads remotos operam com uma VPN.
Eu acho que a latência da rede deve estar diminuindo o processo. Existe alguma maneira de contornar a latência da rede ou ajustar a VPN para tornar os uploads mais rapidamente?
Obrigado!
Solução
A velocidade do procedimento depende da distância geográfica entre o servidor e o computador executando o procedimento.
Realmente depende de quantos saltos você e da máquina que você está se conectando da outra extremidade são dos principais troncos e das rotas. Também nem sempre é o mesmo caminho. Use o tracert
Comando para ver, porque o gargalo pode ser pacotes passando por uma conexão de 10 MB/s em vez de uma linha OC.
No próprio servidor, é rápido (300.000 inserções em menos de 10 minutos),
Não é preciso dizer que executar algo local para a máquina será executado na velocidade mais rápida possível, fora da carga na máquina no horário determinado.
... uploads operam em uma VPN.
Embora seja seguro, está agravando o problema porque a sobrecarga dessa segurança significa que você pode enviar menos por pacote do que se os dados não tivessem criptografados.
Como mencionei antes, você não pode controle sobre as rotas adotadas quando seus pacotes estiverem fora da sua rede. Tudo o que posso sugerir é fazer o upload dos arquivos para o servidor e depois executar a partir daí.
Os downloads são muito mais rápidos que os uploads, mesmo que ainda seja apenas um comando ADO. Isso é porque os dados estão sendo baixados do SQL Server como dados binários? Existe alguma maneira de alcançar o mesmo desempenho no upload sem fazer upload do arquivo para o servidor primeiro?
Depende da conexão e dos termos do contrato. A Internet residencial é sempre uma conexão assimétrica - você terá mais largura de banda de download do que upload. A razão é que o surf/etc é download centrado - você usa muito pouca largura de banda para uploads, como solicitações de página e formulários de envio. Até que você queira fazer upload de arquivos ...
A única maneira de obter melhores velocidades de upload é obter a melhor conexão e/ou termos de contrato.