powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как определить число потоков для Network I/O
20 сообщений из 20, страница 1 из 1
Как определить число потоков для Network I/O
    #39608613
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Есть-ли возможность определить сколько SQL Server использует потоков для сетевого ввода/вывода?
У меня возникает такое ощущение, что один. При любой нагрузке на 10Gb сетевухе больше 12,5% не используется.
То же самое наблюдаю если смоделировать один поток c двумя асинхронными буферами через NTttcp.
NTttcp с 8ю потоками и 2мя асинхронными буферами загружает сеть почти на 100%.
В числах это примерно Пакетов принято в сек ~15000 для SQL и NTttcp с 1 потоком и ~150000 для NTttcp с 8 потоками.
размер пакета 32к и для SQL тоже, в настройках сетевух джамбо-фреймы = 9008.
соединение точка-точка без маршрутизаторов. IPv4 и IPv6 без разницы. автоподбор окна приема отключен и т.п.
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39608617
piy8f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А backup в несколько потоков ?

Код: sql
1.
2.
3.
4.
5.
6.
BACKUP DATABASE [AdventureWorks]
TO 
	DISK='\\SERVER\BKP\AdventureWorks1.bak', 
	DISK='\\SERVER\BKP\AdventureWorks2.bak', 
	DISK='\\SERVER\BKP\AdventureWorks3.bak'
WITH FORMAT
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39608944
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
piy8f,

1 файл - ~13000 пакетов/сек 258Мб/сек
2 файла - ~15000 пакетов/сек 320Мб/сек
3 файла - ~17000 пакетов/сек 380Мб/сек
4 файла - ~19000 пакетов/сек 443Мб/сек
...
8 файлов - ~21000 пакетов/сек 480Мб/сек

но, немного изменилась ситуация - размер пакета 8к
20000 пакетов в сек это те же 12,5%.

при пакете 32к
18 файлов на 1 диск ~22000 пакетов/сек 530Мб/сек
18 файлов на 3 диска ~30000 пакетов/сек 660Мб/сек

25% нагрузку на сеть увидел только в момент когда шел бэкап на 3 диска и параллельно шло копирование большой таблы.
все вместе давало около 40 тыс пакетов в сек.
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39608954
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor,

BACKUP DATABASE test TO
DISK = 'C:\Backups\test.bak'
WITH BUFFERCOUNT = 1024, MAXTRANSFERSIZE = 2097152;

BUFFERCOUNT, MAXTRANSFERSIZE попробуйте не по умолчанию, если найду ссылку напишу там скрипт делает бэкапы и потом автоматически рисует диаграмму в excel в зависимости от этих параметров
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39608967
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архивариусShIgor,

BACKUP DATABASE test TO
DISK = 'C:\Backups\test.bak'
WITH BUFFERCOUNT = 1024, MAXTRANSFERSIZE = 2097152;

BUFFERCOUNT, MAXTRANSFERSIZE попробуйте не по умолчанию, если найду ссылку напишу там скрипт делает бэкапы и потом автоматически рисует диаграмму в excel в зависимости от этих параметров
BUFFERCOUNT, MAXTRANSFERSIZE, количество файлов
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609126
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архивариус,

у меня нет цели ускорить бэкап
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609179
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorархивариус,

у меня нет цели ускорить бэкап
если пишеться на LUN -> RAID то ребилдните массив с самый максимально возмодным значением класстера
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609191
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorархивариус,

у меня нет цели ускорить бэкапя в курсе, но если бэкап ускорится, то он будет использовать большую полосу пропускной способности LAN чего вы и хотите добиться?!
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609208
ngrfm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот скрипт для прокачки 100MB с SQL сервера на самого себя.
Можно посмотреть как сказывается промежуточный слой ПО.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
/*
EXEC master.dbo.sp_addlinkedserver @server = N'LOCALSERVER', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'lpc:(local)\SQL2017DEV', @catalog=N'master'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LOCALSERVER',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
EXEC master.dbo.sp_serveroption @server=N'LOCALSERVER', @optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'LOCALSERVER', @optname=N'rpc out', @optvalue=N'true'
*/

SET NOCOUNT ON;
declare @dt datetime, @dif1 int, @dif2 int, @dif3 int;

if object_id('tempdb..#netinfo') is not null drop table #netinfo;
create table #netinfo ([val] varchar(max));


delete from #netinfo;
set @dt = getdate();
	-- напрямую INSERT SELECT
	INSERT INTO #netinfo ([val]) SELECT [val] = REPLICATE(cast(REPLICATE(cast(CHAR(55) as varchar(max)),1024) as varchar(max)),1024*100);
set @dif1 = DATEDIFF(ms,@dt,getdate());

delete from #netinfo;
set @dt = getdate();
	-- через INSERT EXEC AT [LOCALSERVER]
	INSERT INTO #netinfo ([val]) EXEC(N'SET NOCOUNT ON; SELECT [val] = REPLICATE(cast(REPLICATE(cast(CHAR(55) as varchar(max)),1024) as varchar(max)),1024*100)') AT [LOCALSERVER];
set @dif2 = DATEDIFF(ms,@dt,getdate());

delete from #netinfo;
set @dt = getdate();
	-- через INSERT SELECT FROM OpenQuery ( [LOCALSERVER], ... )
	INSERT INTO #netinfo ([val]) SELECT [val] FROM OpenQuery ( [LOCALSERVER], N'SET NOCOUNT ON; SELECT [val] = REPLICATE(cast(REPLICATE(cast(CHAR(55) as varchar(max)),1024) as varchar(max)),1024*100);' );
set @dif3 = DATEDIFF(ms,@dt,getdate());


select [local ms] = @dif1 ,[AT ms] = @dif2 ,[OpenQuery ms] = @dif3;
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609865
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архивариус,

Чего я хочу добиться:
Есть 2 сервака соединенных между собой прямым шнурком в 10Gb. При любом количестве одновременно запущенных запросов с одного сервера на другой, из нескольких разных приложений и/или к разным базам, я наблюдаю максимально 12,5% загрузки сети и больше никак. Простое копирование одного файла загружает сеть до 60-70% даже в один поток, скорость передачи при этом составляет более 600Мб/сек. В случае SQL (без бэкапа) я не вижу более 140Мб/сек сколько бы запросов (приложений, соединений и т.п.) не использовалось. Те же 140Мб/сек я вижу при тестировании сети программой NTttcp в 8 потоков, но на каждом потоке!!!! причем загрузка сети 100%. Отсюда я делаю вывод, что SQL либо работает в один поток, либо просто тупо не понимает, что сетка не Гигабит, а 10Гигабит.
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609867
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorархивариус,

Чего я хочу добиться:
Есть 2 сервака соединенных между собой прямым шнурком в 10Gb. При любом количестве одновременно запущенных запросов с одного сервера на другой, из нескольких разных приложений и/или к разным базам, я наблюдаю максимально 12,5% загрузки сети и больше никак. Простое копирование одного файла загружает сеть до 60-70% даже в один поток, скорость передачи при этом составляет более 600Мб/сек. В случае SQL (без бэкапа) я не вижу более 140Мб/сек сколько бы запросов (приложений, соединений и т.п.) не использовалось. Те же 140Мб/сек я вижу при тестировании сети программой NTttcp в 8 потоков, но на каждом потоке!!!! причем загрузка сети 100%. Отсюда я делаю вывод, что SQL либо работает в один поток, либо просто тупо не понимает, что сетка не Гигабит, а 10Гигабит.
маловероятно , но вдруг, maxdop=1 на сервере по умолчанию? попробуйте в запросе maxdop указать
Код: sql
1.
2.
3.
SELECT *
FROM dbo.test
OPTION (MAXDOP 2)
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609870
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ngrfm,

local msAT msOpenQuery ms47317231400

о чем это говорит?
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609871
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архивариус,

MAXDOP 2 по умолчанию и порог 120
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609888
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorархивариус,

MAXDOP 2 по умолчанию и порог 120
попробуйте увеличивать до количества ядер процессора (в разумных пределах если это продакшен сервер :-) )
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609889
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архивариус,

в тестовом запросе (а не на сервере по умолчанию)
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39609960
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архивариус,

на сервере по умолчанию.
увеличивать пробовал результат 0. да и с чего вдруг? максдоп - это для одного конкретного запроса, грубо: параллелим исполнение запроса внутри, но передача-то все-равно по одному соединению..
я могу запустить и 1, и 1000 одновременно запросов, с максдопами и без - сеть все-равно будет использована максимум на 12,5%.
естественно в случае одного запроса - нагрузки и 0,5 % нет...
может мне кто-нибудь показать что у него не так?
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39610138
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor,

Если у вас одновременно выполняются 1000 запросов, то чего они ждут? Постоянно ASYNC_NETWORK_IO?

При использовании NTttcp с несколькими потоками вы используете сразу несколько портов (Each thread creates a logical processor that connects to (listens) a different port ).
В Sql Server используется один порт и соответственно один слушающий поток. Можно для экперимента добавить еще порт в конфигурацию.
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39610190
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorПри любой нагрузке на 10Gb сетевухе больше 12,5% не используется.
То же самое наблюдаю если смоделировать один поток c двумя асинхронными буферами через NTttcp
Кстати, вы уверены, что это нормальное поведение для NTttcp, что при использовании 1 потока \ порта он загружает сеть только на 12.5%?
Наткнулась в другом обсуждении (правда, там была 1Gb карточка) на то, что уже 1 поток должен был загрузить сеть почти полностью. Остальные потоки лишь сильнее приближают загрузку к 100%.
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39610691
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eleanor,

к тому же склоняюсь.
настроил SoftNUMA из 4х нод (4 по 6 процов в каждом),
на каждую назначил свой порт. осталось протестировать.
...
Рейтинг: 0 / 0
Как определить число потоков для Network I/O
    #39610719
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor,
может быть QoS влияет на поток или какие-то сетевые балансировщики?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как определить число потоков для Network I/O
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]