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

Откуда: Краснодар
Сообщений: 1484
имеем
Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86)   May 26 2009 14:24:20   
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

сервер отчетов на Crystal запускает хранимку на SQL Server, причем сам репортинг сервер находится в другом филиале, соединены филиалы 3-мегабитным каналом.
выяснилось, что отчет выполняется для диапазона дат 9 дней за 40 секунд, за 10 дней - отвал по таймауту через 40 минут.
запустил хранимку из отчета локально - все ок. запустил ее же удаленно, с машины в другом филиале - 30 минут и таймаут.
доковырялся до запроса в хранимке, в который вынужден был изменить переменную-таблицу на обычную, чтобы хоть как-то понять что происходит. Кусок, который тормозит ниже:
truncate table dbo.temp_result_table
truncate table dbo.temp_result_table2

	while (@DayEnd <= @PerionEnd)
	begin
		insert into dbo.temp_result_table2
		select getdate(),'loop '+cast(@DayStart as varchar(100))+'_'+ Cast(@DayEnd as varchar(100))+'_'+ Cast(@PerionEnd as varchar(100))
		
		insert into dbo.temp_result_table(
			[Date],
			[MTLCode],
			[MTLName],
			[MTLQuantity],
			[MTLUnitCode]
		)
		select top 1
			@DayMidnight,
			[ItemMTLCode]
			,MAX([ItemDescriptionEN])
			,SUM
				(cast([ItemQuantity] as decimal(18, 3))
				*
				DATEDIFF(
					second,
					case
						when PO.PlannedStartDate >= @DayStart then PO.PlannedStartDate
						else @DayStart
					end,
					case
						when PO.PlannedEndDate<= @DayEnd then PO.PlannedEndDate
						else @DayEnd 
					end)
				/DATEDIFF(second, PO.PlannedStartDate, PO.PlannedEndDate)
				) as [MTLQuantity]

      ,MAX([ItemUOM])
	  FROM [dbo].[v_POsLOCFromMSE] PM
		join dbo.v_POs PO on PM.[PONumber]=PO.[PONumber]
		where [ItemMTLCode] like '[0-9][0-9].____%'
		and PO.[Status] in ('Prepared', 'Started', 'Scheduled')
		and case
				when PO.PlannedStartDate >= @DayStart then PO.PlannedStartDate
				else @DayStart 
			end
			<
			case
				when PO.PlannedEndDate<= @DayEnd then PO.PlannedEndDate
				else @DayEnd
			end
		group by [ItemMTLCode]
		order by 1,3

		select @DayStart = @DayEnd
		select @DayMidnight = convert(char(10), @DayStart, 120) + ' 00:00:00'
		select @DayEnd = DATEADD(day, 1, @DayStart)

end
так вот - данный скрипт выполняется нормально из локальной сети и уходит в таймаут через 40 минут при запуске с машины в удаленной сети.
причем я сначала делал вставку в темповую таблицу ##result_table, но как раз на 40 секунде эта таблица неведомым образом исчезает, если делать запрос с удаленном машины.
Как может исчезать темповая таблица, не привязанная к коннекту?
Как может сказываться нахождение клиента?
Как такое вообще может быть?
5 июл 11, 16:18    [10926253]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Сначала, воспользовавшись профайлером посмотрете, какие запросы приложения отправляют на сервер и не происходит ли почему-то Logout ваших приложений.
В профайлере же сравните планы выполнения запросов в обоих случаях.
Если планы одинаковые - проблема в сети.
Если планы разные - значит приложения настроены по-разному (параметры соединений) либо запросы шлют с разными параметрами. Это тоже будет видно в профайлере.
5 июл 11, 16:27    [10926344]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
приложением является SQL Management Studio, в котором я запускаю один и тот же код
в профайлере спустя минуту пишет, что батч комплитед и аудит логаут. при этом запрос все еще крутится в менеджмент студии
с включением актуального плана запрос выполняется нормально, за те же 40 сек, что и с машины в локалке.
добавил в начало запроса
SET STATISTICS XML ON
, запрос выполнился нормально, но рекордсетов стало в 7 раз больше, чем мне нужно(парсить и отбрасывать xml не очень хочется)
В плане запроса самая "дорогая" операция - Remote Query, но разве это имеет значение? Ведь все равно клиент только дает команду серверу на выполнение и какая (по идее) разница, с какой машины давать эту команду?
5 июл 11, 18:39    [10927396]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Судя по всему, все-таки проблемы с сетью.
Данных запрос много возвращает?
5 июл 11, 18:48    [10927474]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
MTU проверяйте.. для начала.. с "плохой" машины небось есть кореляция проблемы и размера результата
протокол работы не пайп случаем? ну, мало ли.. если да - антивирю "фу" скажите
5 июл 11, 20:55    [10927973]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
Grigoriy,

А еще, я когда-то пару раз замечал, что некоторые компоненты доступа к БД отчего-то сильно засисят от приоритета, с которым запущен их поток. И это при том, что процессор не загружен.
5 июл 11, 22:41    [10928269]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
Запрос возвращает 30 строк, кол-во строк не влияет на время выполнения, а вот количество циклов while влияет, отваливается именно где-то после 9-10 цикла, даже если возврат - 1 строчка.
Более того, я все селекты перевел на вставку в таблицу и не возвращаю строк -это не поменяло ничего.
Но как может исчезнуть темповая таблица ##temp?!
Ведь она создается и живет все время, пока сервис запущен, разве нет?
Поменял протокол обмена у клиента на TCP/IP - не помогло.
Поменял размер пакета на 1024 байт вместо 4096 - заработало.
выходит MTU в сетке влияет на работу сервиса.
Спасибо всем большое. Может это кому-то и пригодится.
6 июл 11, 10:16    [10929862]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
немного рано радовался, но это уже другая тема - запрос выполняется, а хранимка выполнилась только при размере пакета 512 байт.
сам же кристалловский отчет не выполняется. в профайлере на 45 секунде пишет
Audit Logout	Report Application Server
Audit Logout Internet Information Services
Возможно у сервера отчетов и ИИС есть свои настройки, буду копать
6 июл 11, 11:31    [10930626]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
set nocount on допишите в начало запроса
6 июл 11, 11:32    [10930638]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
поставил, а что это даст в данном случае?
7 июл 11, 16:35    [10940266]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Диам
Member

Откуда:
Сообщений: 1497
Grigoriy
Поменял протокол обмена у клиента на TCP/IP - не помогло.
Поменял размер пакета на 1024 байт вместо 4096 - заработало.
выходит MTU в сетке влияет на работу сервиса.
Спасибо всем большое. Может это кому-то и пригодится.


Хотел бы уточнить, вы размер MTU меняли у клиента или у сервера?
26 окт 11, 19:46    [11505446]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Grigoriy
Member

Откуда: Краснодар
Сообщений: 1484
Диам, поздно заметил вопрос, я менял значение MTU у клиента, в UDL файле. Это помогло, но не сильно, все равно, запрос валится, если больше 45 сек проходит.
Есть смысл менять у сервера?
24 ноя 11, 18:01    [11653955]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения ОДНОГО запроса на ОДНОМ сервере, но с разных машин.  [new]
Диам
Member

Откуда:
Сообщений: 1497
Я уточнял это для себя. Менять действительно надо у клиента. И меня это спасло. В офисе был вай-фай интернет. И несмотря на большую скорость связь была крайне отвратительной. И уменьшение MTU помогло.
24 ноя 11, 19:37    [11654675]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить