Задержка или мой VPN блокируют загрузку Excel на SQL Server?

StackOverflow https://stackoverflow.com/questions/1926427

Вопрос

Я загружаю данные из Excel на SQL Server, используя следующую структуру:

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

Скорость процедуры зависит от географического расстояния между сервером и компьютером, на котором выполняется процедура.На самом сервере это происходит быстро (300 000 вставок менее чем за 10 минут), на другом конце страны — относительно медленно (300 000 вставок могут занять часы).Удаленная загрузка осуществляется через VPN.

Я думаю, что задержка в сети должна замедлять этот процесс.Есть ли способ обойти задержку сети или настроить VPN, чтобы ускорить загрузку?

Спасибо!

Это было полезно?

Решение

Скорость процедуры зависит от географического расстояния между сервером и компьютером, на котором выполняется процедура.

Это действительно зависит от того, сколько переходов вы и машина, к которой вы подключаетесь на другом конце, находятся от основных магистралей и маршрутов между ними.Это не всегда один и тот же маршрут.Использовать tracert команду, чтобы увидеть, потому что узким местом могут быть пакеты, проходящие через соединение со скоростью 10 Мбит/с, а не через линию OC.

На самом сервере все быстро (300 000 вставок менее чем за 10 минут),

Само собой разумеется, что выполнение чего-то локального для машины будет выполняться с максимально возможной скоростью, вне нагрузки на машину в данный момент.

...загрузка осуществляется через VPN.

Несмотря на то, что это безопасно, это усугубляет проблему, поскольку накладные расходы на эту безопасность означают, что вы можете отправлять меньше пакетов на пакет, чем если бы данные были незашифрованными.

Как я упоминал ранее, вы не можете контролировать маршруты, когда ваши пакеты находятся за пределами вашей сети.Все, что я могу предложить, это загрузить файлы на сервер, а затем запустить оттуда.

Загрузка происходит намного быстрее, чем загрузка, хотя это по-прежнему всего лишь команда ADO.Это потому, что данные загружаются с SQL Server в двоичном виде?Есть ли способ добиться такой же производительности при загрузке без предварительной загрузки файла на сервер?

Зависит от подключения и условий договора.Домашний Интернет всегда представляет собой асимметричное соединение: у вас будет больше пропускной способности для загрузки, чем для загрузки.Причина в том, что серфинг и т. д. ориентированы на загрузку - вы используете очень небольшую пропускную способность для загрузок, таких как запросы страниц и отправка форм.Пока вы не захотите загружать файлы...

Единственный способ повысить скорость загрузки — это получить лучшее соединение и/или условия контракта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top