В каком формате данные SQL Server сериализуются при отправке по сети?

Причина, по которой я задаю этот вопрос, заключается в том, что мы планируем прочитать A LOT (несколько GB) данных из базы данных SQL Server в приложении .NET для обработки. Я хотел бы знать, сколько космических накладных расходов необходимо вычислить для каждой записи для оценки влияния на наш сетевой трафик.

Например, запись состоит из 5 целых чисел (что составляет 4 * 5 = 20 байт данных). Сколько байтов физически передается за запись? Есть ли точная формула или эмпирическое правило?

SQL Server использует протокол TDS . И MSDN

Честно говоря, я бы не стал беспокоиться об этом. Гбайт данных займет время независимо от того, как это делается, к сожалению.

Я не имею понятия о реальном формате, но я бы предложил эмпирический подход и подключить Wireshark и самостоятельно измерить данные.

Как сказал Питер М, протестируйте его.

Существует не достаточно большой расчет, который вы можете выполнить, что даст вам достаточно информации для работы.

Реальность такова, что слишком много переменных для рассмотрения. Например:

Каков фактический уровень участия NIC? Обратите внимание, что эта скорость будет отличаться в зависимости от того, какие сетевые карты установлены, а также какие ДВИГАТЕЛИ используют эти карты. У вас вполне может быть 1Gb-карта, которая может переноситься, скажем, на 300Mb из-за проблем с драйверами. Я даже видел две карты одного и того же производителя, у которых одни и те же драйверы имели разные скорости передачи из-за небольшой разницы в конфигурации на одной из карт.

Какие еще единицы оборудования находятся между этими двумя машинами? Опять же, в зависимости от аппаратного обеспечения, os и т. Д., Вы можете видеть совершенно разные цифры. У неуправляемого коммутатора 1Gb стоимостью 100 долларов США от TRENDNet будет совсем другая пропускная способность, чем управляемый коммутатор cisco стоимостью 1 000 долларов США.

Вы также должны будете рассмотреть существующую сетевую «погоду» во время передачи. Какова пропускная способность от ДРУГОГО сетевого трафика по тем же линиям, что и для этого. Это будет переходным фактором, так как существующая сетевая нагрузка изменяется с учетом различных требований.

Кроме того, поддержка некоторых nic поддерживает TCP Offloading, другие – нет. Если ваш nic не будет, то эффективная скорость передачи будет затруднена тем, что делают CPU на этих блоках.

Затем необходимо принимать во внимание жесткие диски. Учитывая, что это большой объем данных, скорость чтения и записи различных жестких дисков будет иметь последствия. Уверен, что сеть действительно сможет работать с 90% -ной эффективностью, но если вы говорите о больших объемах данных, сами жесткие диски могут быть не в состоянии идти в ногу и, следовательно, снизить эффективность до 25% или меньше.

Точка, вы должны ее протестировать, и в конце дня протокол, используемый SQL-сервером, будет несущественным для ваших результатов. И не запускайте только один тест, запустите много реальных тестов. Только тогда вы сможете придумать среднее; который все еще может быть отключен в зависимости от того, что еще происходит в то время, но вы должны быть в пределах 10%.

По моим наблюдениям, стандартные команды SQL вызывают много круговых поездок. Поэтому для передачи большого количества данных это помогает, если вы можете пересчитать его как загрузку одной таблицы. Затем вы можете использовать операцию массового копирования, которая намного эффективнее. См. Операции массовой копии в SQL Server (ADO.NET) и утилите bcp .

На самом деле протокол TDS является очень медленным протоколом. SQL Server оптимизирован для обработки данных, а не для маршалинга данных и т. Д. Хотя накладные расходы на представление невелики, тот факт, что это протокол запроса-ответа и отсутствие бокса, делает его довольно медленным по сравнению с выделенным протоколом высокой пропускной способности, даже внутри SQL Server (например, для зеркального отображения базы данных или протоколов Service Broker). Но даже в этом случае, когда TDS будет столь же медленным, как это происходит, SQL Server, снимающий на полной скорости через TDS-трубку, будет перегревать ваш .Net-клиент, гарантированный.

В целом, если вы когда-нибудь зададите такой вопрос, как тот, который вы задали, значит, вы делаете это неправильно.

  • Получение RID-поиска вместо сканирования в таблице?
  • выполнение sproc намного медленнее, чем эквивалент SQL ad-hoc
  • C # Entity Framework 4 Свойства навигации, вызывающие медленную производительность при фиксации
  • Order by GUID vs Пропустить (Random (0, Count)) для случайной записи
  • SqlGeography пространственные операции медленны - SQL Server 2016
  • ВСТАВИТЬ данные из текстового файла на SQL-сервер (метод скорости?)
  • Каково фактическое время выполнения запроса с включенным статистическим временем в T-SQL?
  • Запрос одной левой таблицы и двух правых таблиц Результат UNION без оператора объединения
  • Эксплуатационная производительность SQL Server 2008 в производственной среде?
  • Уменьшить стоимость совпадения Hash в sql-коде
  • INNER JOIN со сложным состоянием значительно увеличивает время выполнения
  • Interesting Posts

    Фильтрация по одному столбцу на основе значения другого

    Как сохранить значения синглов в столбце с SQL с определенной комбинацией полей

    Интересная ошибка Row_Number ()

    После условий запуска

    Обновление SQL с последовательной нумерацией

    Сохранение URL-адресов в SQL Server

    Получение типа столбца OLEDB связанного сервера Paradox

    Обновление SQL Server 2005-> 2008: отсоединить / присоединить к резервному копированию / восстановлению?

    Как удалить данные на основе временного интервала

    Есть ли способ визуально отобразить представление базы данных в диаграмме базы данных?

    Исключение NullReferenceException при добавлении SqlParameter в SqlParameterCollection

    Как предоставить доступ к почтовым службам базы данных SQL Server для входа в другую базу данных?

    Как убить собственную службу Windows

    выберите несколько значений в case-заявлении при использовании «in»

    Azure Cloud Service не может подключиться к базе данных SQL только для операций записи

    Давайте будем гением компьютера.