Pregunta

Estoy subiendo datos de Excel a SQL Server mediante la siguiente estructura:

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

La velocidad del procedimiento depende de la distancia geográfica entre el servidor y el equipo que ejecuta el procedimiento. En el propio servidor es rápido (300.000 inserciones en menos de 10 minutos), en el otro lado del país es relativamente lento (300.000 inserciones podrían tardar horas). cargas remotas operan a través de una VPN.

Creo que la latencia de red debe estar ralentizando el proceso. ¿Hay alguna manera de moverse por la latencia de red, o modificar la VPN para hacer los archivos más rápido?

Gracias!

¿Fue útil?

Solución

  

La velocidad del procedimiento depende de la distancia geográfica entre el servidor y el equipo que ejecuta el procedimiento.

En realidad depende de la cantidad de lúpulo usted y la máquina que se está conectando en el otro extremo son de grandes troncos, y las rutas entre. No es siempre la misma ruta, tampoco. Utilice el comando tracert ver, porque el cuello de botella podría ser paquetes que pasan por una conexión Mb / s 10 en lugar de una línea OC.

  

en el propio servidor que es rápido (300.000 insertos en menos de 10 minutos),

No hace falta decir que la realización de algo local a la máquina funcionará a la velocidad más rápida posible, fuera de la carga en la máquina en el momento dado.

  

... subidos operan a través de una VPN.

A pesar de que es seguro, es que agrava el problema, ya que la sobrecarga de que la seguridad significa que puede enviar menos por paquete que si los datos eran sin cifrar.

Como he mencionado antes, no lo hace ningún control sobre las rutas tomadas una vez que sus paquetes están fuera de su red. Todo lo que puedo sugerir es que subir los archivos al servidor y ejecute desde allí.

  

Las descargas son mucho más rápido que las subidas, a pesar de que todavía es sólo un Comando de ADO. Es que debido a que los datos están siendo descargado de SQL Server como datos binarios? ¿Hay alguna manera de lograr el mismo rendimiento en la carga sin la posibilidad de subir el archivo al servidor primero?

Depende de la conexión y los términos del contrato. Internet residencial es siempre una conexión asimétrica - que tendrá más ancho de banda de descarga que de subida. La razón es que el surf / etc está centrada descarga - se utiliza muy poco ancho de banda para las cargas, como las solicitudes de página y las formas que presentan. Hasta que no desea cargar los archivos ...

La única manera de obtener mejores velocidades de subida es conseguir la mejor conexión y / o los términos del contrato.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top