Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Idol_111
Member

Откуда:
Сообщений: 614
Переместил БД с 2008R2 сервера на SQL2014(SP1-CU1)(назавем C1 сервер), через пару недель поменял compatibility level. Неделю был полет нормальный.
Затем отметил значительное увеличение OLEDB ожидание. Это связано с линк сервером на другой (скажем C2 сервер) 2008R2 сервер. На С2 также регистрировал ненормальное увеличение ASYNC_NETWORK_IO ожидание. Все это завязано на одну ХП на С1.
ХП на С1 джойнит местные таблицы и таблицу с С2 (используя линк сервер). На С2 просто идет полное сканирование нужного индекса и передача всех строк на С1.
Так работало всегда (сканирование и прочее), и до перемещение БД и первое время после, только без громадного сетевого трафика и ожиданий.
Сетевой трафик увеличивается, приблизительно со 150 до 5000 KBps на обоих серверах.

Обновление статистики таблицы на С2 не помогает, но помогает пересоздание индекса (по которому идет сканирование). Волшебным образом сетевой трафик и ожидания исчезают. Уточняю, что план выполнения остается такой же (сканирование по индексу).

Однако в определенный момент (через несколько часов) проблема возвращается. Пока удалось отловить, что когда PageLifeExpectancy падает по минимуму проблема появляется опять, т.е. что-то там с памятью.

Не знаю, куда и как дальше копать.

Похоже что что-то не так с линк сервером. Перестает забирать результат правильно, но это только домыслы.

Детали нового линк сервера на С1 (c windows authentication):
EXEC master.dbo.sp_addlinkedserver @server = N'linkName', @srvproduct=N'SQL_SERVER', @provider=N'SQLNCLI11', @datasrc=N'serverNameC2'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'linkName',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'collation compatible', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'dist', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'pub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'rpc', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'rpc out', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'sub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'connect timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'collation name', @optvalue=null
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'lazy schema validation', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'query timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'remote proc transaction promotion', @optvalue=N'true'


старый линк сервер на С1 (до перехода на SQL2014)(authentication через sql login):
EXEC master.dbo.sp_addlinkedserver @server = N'linkName', @srvproduct=N'SQL_SERVER', @provider=N'SQLNCLI10', @datasrc=N'serverNameC2'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'linkName',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'linkName',@useself=N'False',@locallogin=N'loginName',@rmtuser=N'loginNameGeneral',@rmtpassword='########'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'collation compatible', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'dist', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'pub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'rpc out', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'sub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'connect timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'collation name', @optvalue=null
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'lazy schema validation', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'query timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'linkName', @optname=N'remote proc transaction promotion', @optvalue=N'true'


Может что забыл выставить на уровене операционки.

Короче, подскажите куда можно и нужно копать.
11 май 16, 05:14    [19156012]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
Idol_111,

сервер же не знает, что на той стороне происходит, вот он и пишет "сетевые задержки".
11 май 16, 11:26    [19157047]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 892
попробуйте на новом настроить линкед сервер с драйверами SQLNCLI10,
11 май 16, 11:55    [19157305]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Idol_111
Member

Откуда:
Сообщений: 614
Владислав Колосов
Idol_111,

сервер же не знает, что на той стороне происходит, вот он и пишет "сетевые задержки".

Это то понятно, причину то как найти?
12 май 16, 00:09    [19161279]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Idol_111
Member

Откуда:
Сообщений: 614
Slava_Nik
попробуйте на новом настроить линкед сервер с драйверами SQLNCLI10,

такого варианта в SQL2014 не существует.
12 май 16, 00:20    [19161318]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Idol_111
Member

Откуда:
Сообщений: 614
просмотрел самую очевидную причину - план выполнения на сервере С1, а он разный.
Cardinality estimator всегда плохо работает с функциями (оно и понятно), но если старый estimator не выпедривался и всегда считал, что remote query более затратна, то новый estimator считаем себя шибко умным, и вместо того чтобы запросить один раз, он делает это столько раз сколько функция вернет значений. А это обычно десятки значений. Вот и получаем сетевой трафик и прочее.

Теперь бы понять как это урезонить не делая шаг назад (не откатывая назад Compatibility Level).
12 май 16, 01:40    [19161439]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
o-o
Guest
Idol_111
просмотрел самую очевидную причину - план выполнения на сервере С1, а он разный.
Cardinality estimator всегда плохо работает с функциями (оно и понятно), но если старый estimator не выпедривался и всегда считал, что remote query более затратна, то новый estimator считаем себя шибко умным, и вместо того чтобы запросить один раз, он делает это столько раз сколько функция вернет значений. А это обычно десятки значений. Вот и получаем сетевой трафик и прочее.

Теперь бы понять как это урезонить не делая шаг назад (не откатывая назад Compatibility Level).

OPTION(QUERYTRACEON 9481) на уровне запроса
или DBCC TRACEON(9481, –1) на уровне сервера
ну или насовсем –T9481 в startup parameters
12 май 16, 10:21    [19162006]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 892
Idol_111
Slava_Nik
попробуйте на новом настроить линкед сервер с драйверами SQLNCLI10,

такого варианта в SQL2014 не существует.

чего не существует, вы отдельно драйвера поставьте и будут
12 май 16, 11:45    [19162705]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Idol_111
Member

Откуда:
Сообщений: 614
Slava_Nik
Idol_111
пропущено...

такого варианта в SQL2014 не существует.

чего не существует, вы отдельно драйвера поставьте и будут

я говорил не в плане - нельзя сделать, а в плане - не нужно.
Можно поиграться, если у вас академический интерес, но не более (имхо).
13 май 16, 02:20    [19167167]     Ответить | Цитировать Сообщить модератору
 Re: появление ASYNC_NETWORK_IO на SQL2014 с linked сервер  [new]
Idol_111
Member

Откуда:
Сообщений: 614
самый простой вариант - это переписать слегка ХП, вытаскивая удаленную таблицу (с С1) во временную таблицу (на С2), а затем уже джойнить временную с локальными объектами.

Это позволяет решить вопрос с сетевым трафиком и ожиданиями.
Хотя план выполнения все равно не идеален, но вся возня уже происходит на локальном сервере. Это уже другая история.

Всем спасибо за советы и идеи.
13 май 16, 02:33    [19167174]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить