Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с кодом Хранимой процедуры, и временем выполнения / 14 сообщений из 14, страница 1 из 1
05.06.2019, 08:46
    #39822608
Tohins
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
Есть хранимая процедура
Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
USE [t_artemtest]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [sm_report].[p_COUNTER_HouseController]
@supplierID					int,
@serviceID					int = null,
@controllerID				int,	--Контролер
@numberMonth			int		--Дата плана обхода
AS
DECLARE @dateCurrent			int

EXEC p_GET_currentDate_int @dateCurrent OUT	

; with fc as
(
select
	distinct f.accountID, f.supplierID
from
	dbo.flatsServices as f
where
		f.supplierID = @supplierID and f.calculated = 1 and f.dataClose > @dateCurrent
) 
,cmv as
(select counterID, max(cntrVlID) cntrVlID from countersvalues cv group by counterID)
 

SELECT
	s.nameSupplier,
	se.nameService,
    gdpo.nameGD as namePostOffice,
	substring(acc.accountN,1,3)+'-'+substring(acc.accountN,4,3)+'-'+substring(acc.accountN,7,3) as accountN,
	va.nameStreet,
	va.houseN,
	va.corpus,
	va.flatN,
	va.flatNint,
	ct.nameCounter,
	c.numberCounter,
	c.firsterValue,
	isnull(cv.valueEnd,'''') as valueEnd,	
	January, February, March, April, May, June, July, August, September, October, November, December
FROM 
	v_counterAccount as c
	JOIN flatsServices as fs ON c.objectID = fs.accountID and fs.serviceID = c.serviceID and fs.calculated = 1 and fs.dataClose > dbo.f_Get_currentDate_int()
	JOIN sm_address.account as acc ON c.objectID = acc.accountID
	JOIN v_address as va ON acc.flatID = va.flatID
	JOIN fc on c.objectID = fc.accountID --Лубов Д. 27.09.2017
	JOIN countersvalues cv ON cv.counterID=c.counterID 
	JOIN cmv ON cmv.cntrVlID=cv.cntrVlID 
	JOIN gd_guide as gdpo ON gdpo.gdID=va.postOfficeID
	JOIN countersTypes as ct ON c.cntrTypeID=ct.cntrTypeID
	JOIN suppliers as s ON fc.supplierID = s.supplierID
	JOIN services as se ON fs.serviceID = se.serviceID
	JOIN houseController as hc ON hc.houseID=va.houseID and fs.serviceID = hc.serviceID and hc.controllerID= isnull(@controllerID, hc.controllerID)
	JOIN deluxes as d ON fs.deluxeID = d.deluxeID and d.objectCalcID <> 131
WHERE  
	fs.serviceID = ISNULL(@serviceID, fs.serviceID)
    and c.dataclose>@dateCurrent


проблема в следующем, при запуске в студии mssql
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
USE [t_artemtest]
GO

DECLARE	@return_value int

EXEC	@return_value = [sm_report].[p_COUNTER_HouseController]
		@supplierID = 253,
		@serviceID = 3,
		@controllerID = NULL,
		@numberMonth = NULL

SELECT	'Return Value' = @return_value

GO



выполнение ХП растягивается на произвольное время(до 10 минут), какое серверу вздумается, в то же время полностью скопированный код из этой процедуры в отдельное окно mssql
Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
[src]DECLARE
@supplierID					int = 253,
@serviceID					int = 3,
@controllerID				int,	--Контролер
@numberMonth			int,		--Дата плана обхода
@dateCurrent			int

EXEC p_GET_currentDate_int @dateCurrent OUT	

; with fc as
(
select
	distinct f.accountID, f.supplierID
from
	dbo.flatsServices as f
where
		f.supplierID = @supplierID and f.calculated = 1 and f.dataClose > @dateCurrent
) 
,cmv as
(select counterID, max(cntrVlID) cntrVlID from countersvalues cv group by counterID)
 

SELECT
	s.nameSupplier,
	se.nameService,
    gdpo.nameGD as namePostOffice,
	substring(acc.accountN,1,3)+'-'+substring(acc.accountN,4,3)+'-'+substring(acc.accountN,7,3) as accountN,
	va.nameStreet,
	va.houseN,
	va.corpus,
	va.flatN,
	va.flatNint,
	ct.nameCounter,
	c.numberCounter,
	c.firsterValue,
	isnull(cv.valueEnd,'''') as valueEnd,	
	January, February, March, April, May, June, July, August, September, October, November, December
FROM 
	v_counterAccount as c
	JOIN flatsServices as fs ON c.objectID = fs.accountID and fs.serviceID = c.serviceID and fs.calculated = 1 and fs.dataClose > dbo.f_Get_currentDate_int()
	JOIN sm_address.account as acc ON c.objectID = acc.accountID
	JOIN v_address as va ON acc.flatID = va.flatID
	JOIN fc on c.objectID = fc.accountID --Лубов Д. 27.09.2017
	JOIN countersvalues cv ON cv.counterID=c.counterID 
	JOIN cmv ON cmv.cntrVlID=cv.cntrVlID 
	JOIN gd_guide as gdpo ON gdpo.gdID=va.postOfficeID
	JOIN countersTypes as ct ON c.cntrTypeID=ct.cntrTypeID
	JOIN suppliers as s ON fc.supplierID = s.supplierID
	JOIN services as se ON fs.serviceID = se.serviceID
	JOIN houseController as hc ON hc.houseID=va.houseID and fs.serviceID = hc.serviceID and hc.controllerID= isnull(@controllerID, hc.controllerID)
	JOIN deluxes as d ON fs.deluxeID = d.deluxeID and d.objectCalcID <> 131
WHERE  
	fs.serviceID = ISNULL(@serviceID, fs.serviceID)
    and c.dataclose>@dateCurrent




выполняется за нормальные 2-4 секунды. Проштудировал уже все статьи с перекомпиляцией планов выполнения, очищением кэша ХП и т.д.
Подскажите пожалуйста кто сталкивался с такой проблемой, спасибо.
...
Рейтинг: 0 / 0
05.06.2019, 08:51
    #39822611
Tohins
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
Версия сервера
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) Aug 19 2014 12:21:34 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
...
Рейтинг: 0 / 0
05.06.2019, 09:02
    #39822614
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
...
Рейтинг: 0 / 0
05.06.2019, 09:04
    #39822616
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
Tohinsвыполнение ХП растягивается на произвольное время(до 10 минут), какое серверу вздумается, в то же время полностью скопированный код из этой процедуры в отдельное окно mssql
[SRC sql][/SRC]Во первых, посмотрите всё таки, в чём разница, и получите актуальные планы ваыполнения для проблемного запроса

TohinsПроштудировал уже все статьи с перекомпиляцией планов выполнения, очищением кэша ХП и т.д.А параметр стуффинг попробовали? Это же первое, что приходит в голову, особенно для @dateCurrent
...
Рейтинг: 0 / 0
05.06.2019, 09:08
    #39822619
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
alexeyvg,

@стуффинг@
сниффинг, по ссылке все возможные варианты :)
...
Рейтинг: 0 / 0
05.06.2019, 09:10
    #39822621
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
TaPaKalexeyvg,

@стуффинг@
сниффингОй

Да, по ссылке хорошая статья, но большая, не каждый сумеет прочитать :-)
...
Рейтинг: 0 / 0
05.06.2019, 09:12
    #39822623
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
alexeyvgTaPaKalexeyvg,

@стуффинг@
сниффингОй

Да, по ссылке хорошая статья, но большая, не каждый сумеет прочитать :-)
тогда OPTION(RECOMPILE) и расходимся :)
...
Рейтинг: 0 / 0
05.06.2019, 09:21
    #39822625
Tohins
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
TaPaK,

OPTION(RECOMPILE) не помогает, уже пробовал

Код: html
1.
http://www.sommarskog.se/query-plan-mysteries.html

- эту статью я уже читал, проблема то не в приложении, а двух окнах студии по сути запускающими один код, один открыто, второй через скомпилированную ХП, сам понимаю что дело скорей всего в плане выполнения, но не могу понять чем планы могут отличаться при одном и том же коде
...
Рейтинг: 0 / 0
05.06.2019, 09:24
    #39822627
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
Tohinsно не могу понять чем планы могут отличаться при одном и том же кодеТак посмотрите, чем отличаются, чего гадать.
"Почему" - в статье как раз и написано.
Кратко - из за разных оценок оптимизатора, или из за разных установок SET
...
Рейтинг: 0 / 0
05.06.2019, 09:24
    #39822628
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
Tohins,

авторOPTION(RECOMPILE)
я ж надеюсь в процедуру вставили? и не WITH RECOMPILE?
показывайте медленный/быстрый план, и не картинкой
...
Рейтинг: 0 / 0
05.06.2019, 11:34
    #39822719
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
...
Рейтинг: 0 / 0
05.06.2019, 16:01
    #39822927
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
Konst_One https://blogs.msdn.microsoft.com/sqlprogrammability/2008/11/26/optimize-for-unknown-a-little-known-sql-server-2008-feature/
Опять лечим припарками геморрой?
v_counterAccount - это, нибось, семиэтажная вьюха? И еще парочка таких же?
...
Рейтинг: 0 / 0
05.06.2019, 16:03
    #39822929
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
это к ТС вопрос
...
Рейтинг: 0 / 0
07.06.2019, 01:15
    #39823807
Tohins
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с кодом Хранимой процедуры, и временем выполнения
Alex22, нет, вьюха нормальная.

Всем спасибо, пока готовил планы на обсуждение еще раз внимательно изучил их, нашел проблемный индекс, проблема ушла.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с кодом Хранимой процедуры, и временем выполнения / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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