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

Откуда:
Сообщений: 8
У меня есть хранимая процедура, которая автоматически запускается с периодичностью 30 сек. Внутри происходит обращение к нескольким Linked серверам. Я делаю проверку на доступность каждого сервера, пробовал несколькими способами, например так:
declare @srvr nvarchar(128), @retval int;
set @srvr = 'SERVER-NAME';
begin try
    exec @retval = sys.sp_testlinkedserver @srvr
end try
begin catch
    set @retval = sign(@@error);
end catch;
if @retval <> 0
  raiserror('Unable to connect to server. This operation will be tried later!', 16, 2 );


Проблема в том, что в случае, если сервер лежит, проверка происходит слишком долго, порядка 13-20 секунд. Без проверки ни как не обойтись, можно ли сократить время проверки?
Пробовал:
EXEC sp_configure 'remote login timeout', 1
reconfigure with override 
go 

EXEC sp_configure 'remote query timeout', 1
RECONFIGURE WITH OVERRIDE
GO

Не помогло. Подскажите, пожалуйста, как решить эту проблему.
19 авг 13, 16:42    [14726703]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Glory
Member

Откуда:
Сообщений: 104751
У sp_testlinkedserver свои таймауты и алгоритмы.
Он может вообще использовать DNS для name resolution.
19 авг 13, 17:09    [14726880]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Finsman
Member

Откуда: Da UK.
Сообщений: 404
Ну можно нaпример сделать "heartbeat" .
С линкованного сервера обновлять в цикле каждые 1-5 сек на главном сервере heartbeat таблицу с записью ( СерверИД,ДатеТайм).
Потом её проверять на предмет живости линкованного сервера.
19 авг 13, 20:25    [14727618]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
saycale
Member

Откуда: Москва->Сидней
Сообщений: 32
Можно попробовать указать параметр ожидания прямо в запросе через
SET LOCK_TIMEOUT 10000;
где вечилина ожидания в миллисекундах [url=]http://technet.microsoft.com/en-us/library/ms189470.aspx[/url] Вот такой мог бы быть запрос:
BEGIN TRY
	SET @DynamicSQL = '
		SELECT
			[intTestVal]
		FROM
			OPENQUERY(' + QUOTENAME(@LinkedServerName, N']') +
				',''
				SET NOCOUNT ON;SET LOCK_TIMEOUT 10000;
				SELECT
					1 AS [intTestVal]
				''
			)'

	EXECUTE(@DynamicSQL)
END TRY
20 авг 13, 05:34    [14728448]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
sapphire.nk
Member

Откуда:
Сообщений: 8
Glory
У sp_testlinkedserver свои таймауты и алгоритмы.
Он может вообще использовать DNS для name resolution.

Проблема возникает при попытке проверить доступность любым запросом, sp_testlinkedserver я привел как один из вариантов.
20 авг 13, 08:20    [14728554]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
sapphire.nk
Member

Откуда:
Сообщений: 8
Finsman, Спасибо, отличная идея, буду использовать если не найду других вариантов.(Доступ к другим серверам у меня имеется только на чтение и запись данных, прийдётся решать вопрос с админами)


saycale, Спасибо,но,к сожалению, это тоже не помогает.
20 авг 13, 08:29    [14728575]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Glory
Member

Откуда:
Сообщений: 104751
sapphire.nk
Проблема возникает при попытке проверить доступность любым запросом

Что значит "любым" ?
sp_configure 'remote login timeout' на sp_testlinkedserver никак не влияют
А на OPENQUERY и прочие - влияют
20 авг 13, 10:01    [14728996]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Определение недоступности линкед-сервера
20 авг 13, 10:09    [14729029]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
sapphire.nk
Member

Откуда:
Сообщений: 8
Glory, Возможно на время запроса влияет что то ещё, так как установив эти параметры по минимуму я ничего не добился. Пробовал различные SELECTы, OPENQUERY.

iap, Спасибо, пробовал, время уменьшается примерно в двое, но всё равно слишком долго.


Поэкспериментировав нашёл способ, немного извращённый, но всё же:
CREATE TABLE #STAT 
  ( 
	status nvarchar(500)
  )  
  INSERT INTO #STAT(status)  EXEC  xp_cmdshell 'sc \\192.168.26.2 QUERY MSSQLSERVER | FIND "Состояние"'
20 авг 13, 10:21    [14729119]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Odess
Member

Откуда: Одесса, Украина
Сообщений: 6089
Получилось уменьшить время ожидания в свойствах самого линкед-вервера.
5 сен 13, 23:57    [14802311]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Odess
Member

Откуда: Одесса, Украина
Сообщений: 6089
А вот так получилось изменять время отклика от линкед-сервера из процедур:
USE master ;
GO
EXEC sp_configure 'remote login timeout', 4;
GO
RECONFIGURE ;
GO
6 сен 13, 00:26    [14802350]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Odess
А вот так получилось изменять время отклика от линкед-сервера из процедур:
USE master ;
GO
EXEC sp_configure 'remote login timeout', 4;
GO
RECONFIGURE ;
GO

sapphire.nk
Проблема в том, что в случае, если сервер лежит, проверка происходит слишком долго, порядка 13-20 секунд. Без проверки ни как не обойтись, можно ли сократить время проверки?
Пробовал:
EXEC sp_configure 'remote login timeout', 1
reconfigure with override 
go 

EXEC sp_configure 'remote query timeout', 1
RECONFIGURE WITH OVERRIDE
GO


Не помогло.


И чему верить ?
6 сен 13, 11:01    [14803151]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Odess
Member

Откуда: Одесса, Украина
Сообщений: 6089
Glory
И чему верить ?
Верить нельзя никому. Мне можно (С)

sp_configure 'remote query timeout' работает только в том случае, если в свойствах линкед-сервера (в Менеджмент студии) стоит значение 0. Я с этим тоже прокололся. Как написал в первом сообщении, поставил цифру 4, оно сработало. Но вот через sp_configure при этом не изменяло ни в меньшую ни в большую сторону. Как только вернул там в 0, стало работать sp_configure.
6 сен 13, 11:51    [14803500]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Odess
Member

Откуда: Одесса, Украина
Сообщений: 6089
Вот пример реальной процедуры, которая успешно обрабатывает проверку:

EXEC sp_configure 'remote login timeout', 2;

RECONFIGURE ;

exec sp_testlinkedserver [BB-CLOUD];

ALTER TABLE dbo.CardsP DISABLE TRIGGER CardsP_Trigger1;

MERGE    CardsP as target
  using (select  Код, НомерК, Фамилия, Телефон from [BB-CLOUD].[BarSQL].[dbo].[CardsP] ) as 
		 source (Код, НомерК, Фамилия, Телефон) on (target.Код = source.Код)
  when matched then
     update set НомерК=source.НомерК, Фамилия=source.Фамилия, Телефон=source.Телефон
  when not matched then
     insert (Код, НомерК, Фамилия, Телефон) values (source.Код, source.НомерК, source.Фамилия, source.Телефон);

 SET IDENTITY_INSERT dbo.CardsP Off;

end try
begin catch

end catch

ALTER TABLE dbo.CardsP ENABLE  TRIGGER CardsP_Trigger1;
6 сен 13, 11:54    [14803531]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
Odess
Member

Откуда: Одесса, Украина
Сообщений: 6089
Сорри, сначала, естественно команда BEGIN TRY
6 сен 13, 12:31    [14803811]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
kexby
Member

Откуда:
Сообщений: 4
День добрый!
Для меня этот вопрос вновь стал актуальным.
Вчера заметил что выполнение ХП sp_testlinkedserver при недоступном сервере выполняется 21 сек.
При этом параметр сервера 'remote login timeout' установлен в значение по умолчанию в 10 сек., а значение параметра для всех линкедсерверов 'connect timeout' = 5 сек.
EXEC master.dbo.sp_serveroption @server=[имя_линкедсервера], @optname='connect timeout', @optvalue='5'

И ранее выполнение sp_testlinkedserver точно реагировало на этот параметр. Проверено было не однократно

На сегодняшний же день при проверке соединения через ХП sp_testlinkedserver или OPENQUERY, результат один = 21сек. при описанных выше параметрах.

Поигрался со сменой значений обоих параметров:
1. при установке любого из двух параметров в значение от 1 до 21, проверка работает всегда 21сек.
2. при установке любого из двух параметров в значение от 22 до 42, проверка работает всегда 42сек.
3. при установке любого из двух параметров в значение от 43 до 63, проверка работает всегда 63сек.
4. видимо и т.д.

Не мог не заметить закономерность с шагом в 21сек., при этом оно же является и мин.значение для таймаутов.
Хотя MS ни слова об этом: https://msdn.microsoft.com/ru-ru/library/ms175136(v=sql.110).aspx

Как теперь всё таки можно уменьшить таймаут? xp_cmdshell не предлагать :)

P.S. Версия MS SQL:
Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
24 июн 16, 11:57    [19330641]     Ответить | Цитировать Сообщить модератору
 Re: Проверка работоспособности Linked Server. Как уменьшить время ожидания.  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
kexby
Как теперь всё таки можно уменьшить таймаут?
Никак.
https://support.microsoft.com/en-us/kb/2786464
Note In Windows 7 and Windows Server 2008 R2, the TCP maximum SYN retransmission value is set to 2, and is not configurable. Because of the 3-second limit of the initial time-out value, the TCP three-way handshake is limited to a 21-second timeframe (3 seconds + 2*3 seconds + 4*3 seconds = 21 seconds).
24 июн 16, 12:31    [19330946]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить