Question

Je suis en train de charger des données depuis Excel vers SQL Server en utilisant la structure suivante:

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 vitesse de la procédure dépend de la distance géographique entre le serveur et l'ordinateur exécutant la procédure. Sur le serveur lui-même, il est rapide (300.000 inserts en moins de 10 minutes), de l'autre côté du pays, il est relativement lent (300.000 inserts pourraient prendre des heures). téléchargements à distance fonctionnent sur un réseau privé virtuel.

Je pense que la latence du réseau doit être ralentir le processus. Est-il possible de se déplacer la latence du réseau, ou le VPN tweak pour accélérer les téléchargements?

Merci!

Était-ce utile?

La solution

  

La vitesse de la procédure dépend de la distance géographique entre le serveur et l'ordinateur qui exécute la procédure.

Cela dépend vraiment de combien vous houblon et la machine que vous vous connectez à l'autre extrémité sont des troncs principaux, et les routes entre. Il est pas toujours la même route, que ce soit. La commande tracert voir, parce que le goulot d'étranglement peut être paquets en passant par la connexion d'un 10 Mb / plutôt que d'une ligne OC.

  

Sur le serveur lui-même, il est rapide (300.000 inserts en moins de 10 minutes),

Il va sans dire que la réalisation quelque chose de local à la machine fonctionne à la vitesse la plus rapide possible, en dehors de la charge sur la machine au moment donné.

  

... les téléchargements fonctionnent sur un réseau privé virtuel.

Bien qu'il soit sûr, il est aggrave le problème car la surcharge de ce titre signifie que vous pouvez envoyer moins par paquet que si les données étaient non chiffrées.

Comme je l'ai mentionné précédemment, vous ne aucun contrôle sur les routes prises une fois que vos paquets sont en dehors de votre réseau. Tout ce que je peux suggérer, est de télécharger les fichiers sur le serveur, puis exécutez à partir de là.

  

Les téléchargements sont beaucoup plus vite que les téléchargements, même si elle est encore juste une commande ADO. Est-ce parce que les données sont en cours de téléchargement à partir de SQL Server en tant que données binaires? Est-il possible d'atteindre la même performance sur le téléchargement sans télécharger le fichier sur le serveur d'abord?

Cela dépend de la connexion et les termes du contrat. Internet résidentiel est toujours une connexion asymétrique - vous aurez plus de bande passante de téléchargement de téléchargement. La raison étant que le surf / etc est centrée sur le téléchargement - vous utilisez très peu de bande passante pour le téléchargement, comme les demandes de page et les formulaires qui présentent. Jusqu'à ce que vous voulez télécharger des fichiers ...

La seule façon d'obtenir une meilleure vitesse de téléchargement est d'obtenir la meilleure connexion et / ou les conditions contractuelles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top