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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top