Размер сетевого пакета в строке подключения к серверу sql для повышения пропускной способности
У нас есть задание на передачу данных, которое перемещает относительно большой объем данных по сети между двумя серверами sql. серверы находятся в одной подсети, и между ними есть только переключатель. данные состоят из нескольких больших полей varchar плюс поле xml.
Чтобы увеличить пропускную способность. Я попытался изменить размер сетевого пакета с 4096 по умолчанию на 32627 в строке подключения; Однако, похоже, это не помогает производительности. Я подозреваю, что проблема в том, что, хотя у нас работает гигабайт Ethernet, "Jumbo frames" не включены.
Чтобы подтвердить это, я попробовал два теста ping:
ping -l 1400 -f pdbsql01dul
Работает
ping -l 4096 -f pdbsql01dul
Пакет должен быть фрагментирован, но DF установлен.
как вы можете видеть, наибольший размер пакета составляет около 1400
Мой вопрос: если Jumbo-кадры имеют размер ~8096, есть ли какая-то польза от установки размера сетевого пакета, превышающего этот?
Изменится ли это, если соединение является локальным для рассматриваемого сервера?
3 ответа
Что должно произойти, так это то, что значение MTU в сети Ethernet нужно увеличить с 1500 до чего-то севернее 4096. Эти настройки обычно задаются на странице настроек драйвера. Для хорошей работы сети вы действительно хотите, чтобы все устройства (включая все коммутаторы Ethernet) в одной и той же сети Ethernet имели одинаковые настройки MTU.
(источник: sysadmin1138.net)
Вот где вы могли бы изменить это на одном из моих серверов.
Это может помочь? Это конечно может. Меньшая фрагментация пакетов означает меньшую работу в стеке TCP для повторной сборки потока трафика. Это может быть не порядки, но это может помочь.
Я полагаю, что локальные для сервера соединения используют каналы, а не соединения TCP, и, вероятно, это изменение не затронет.
Можно попробовать, но я сомневаюсь, что это сильно поможет. Протокол TDS никогда не был рассчитан на высокую пропускную способность. Если вы хотите перемещать данные между двумя экземплярами SQL-сервера, вы можете вместо этого использовать Service Broker, его сетевой стек гораздо более ориентирован на высокую пропускную способность, чем TDS. Вот почему зеркалирование выбирает сетевой стек SSB для связи с резервными зеркальными серверами. Кроме того, семантика перемещения данных в SSB намного лучше, чем у связанных серверов, и обычно лучше, чем у пользовательских клиентских приложений.
Я не могу комментировать tcp, фреймы и т. Д., Но я только один раз устанавливал размер сетевого пакета SQL Sever для некоторых мерзких приложений, которым по-прежнему нужны клиентские инструменты SQL 6.5.
Это одна из тех настроек "не делай этого".