Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Вопрос

- есть набор табличных функций, которые на основе настроечных таблиц (~200-300 записей), считают всевозможные пересечения и возвращают более 12 млн записей.

при работе с таким объемом - протекает память и вешается сервак.
подскажите пж.

1) есть ли работающие рекомендации как правильно писать табличные функциии для бережного обращения с памятью
2) есть ли обще принятый способ по рапараллеливанию через джобы и временные таблички ?
3) что вообще принято делать что бы обезопасить влияние стороней разработки на весь сервер ?

ЕР
19 мар 15, 15:37    [17405852]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Glory
Member

Откуда:
Сообщений: 104760
essbase.ru
1) есть ли работающие рекомендации как правильно писать табличные функциии для бережного обращения с памятью

А какие команды в вашей функции как-то распоряжаются памятью ?

essbase.ru
2) есть ли обще принятый способ по рапараллеливанию через джобы и временные таблички ?

распараллеливанию чего ?

essbase.ru
3) что вообще принято делать что бы обезопасить влияние стороней разработки на весь сервер ?

Принято тестировать разработку.
19 мар 15, 15:40    [17405870]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Glory,


Glory
А какие команды в вашей функции как-то распоряжаются памятью ?

табличные переменные
19 мар 15, 15:43    [17405894]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 265
essbase.ru
Вопрос
при работе с таким объемом - протекает память и вешается сервак.


Виснет сервак или приложение при попытке вывести результат на экран?
19 мар 15, 15:45    [17405901]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Glory
Member

Откуда:
Сообщений: 104760
essbase.ru
Glory,


Glory
А какие команды в вашей функции как-то распоряжаются памятью ?

табличные переменные

И что за команда такая управления памятью "табличная переменная" ?
Вы можете указать, сколько памяти она будет занимать ? И как долго занимать ?
19 мар 15, 15:46    [17405904]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Glory,

Glory
И что за команда такая управления памятью "табличная переменная" ?

да никак .
три вложенных табличные функции , результат которых сохраняется в табличной переменной.

что то вроде
 DECLARE @vtblDimBUnit_v TABLE -- список UNitov из системы 
(    bu_code nvarchar(80) NULL ,     
     bu_parent_code nvarchar(80) NULL ,
     bu_alias nvarchar(80) NULL ,
     c10_code nvarchar(80) NULL  
);
insert into  @vtblDimBUnit_v (    bu_code   ,bu_parent_code   ,  bu_alias,c10_code )
select bu_code,bu_parent_code,MAX(bu_alias) bu_alias,c10_code from (
  SELECT --child_id bu_id,
  child bu_code
,bb.OBJECT_NAME+'T'  bu_parent_code
,al2.OBJECT_NAME bu_alias 
,c10_code
    FROM [ess_xmla].[mdm].getParentChild ( 'EN_8802702') aa
 left join mdm.HSP_ALIAS_V al1 on MEMBER_ID=child_id and ALIASTBL_ID=14 
 left join mdm.HSP_OBJECT_V bb on aa.parent_id=bb.OBJECT_ID
 left join mdm.HSP_OBJECT_V al2 on al1.alias_id=al2.OBJECT_ID 
 left join @vtblOlapUnitAttrDivision_v on UnitCode=al2.OBJECT_NAME collate Cyrillic_General_CI_AS  
where 
  bb.OBJECT_NAME  like 'BU_TBU%' ) bb
group by bu_code,bu_parent_code,c10_code  
 OPTION	(MAXDOP 1); 
19 мар 15, 15:54    [17405962]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Glory
Member

Откуда:
Сообщений: 104760
essbase.ru
Glory
И что за команда такая управления памятью "табличная переменная" ?

да никак .

Вот именно, что никак.
Нужно просто запросы писать хорошие, а не пытаться управлять памятью.
19 мар 15, 15:57    [17405986]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Glory
Нужно просто запросы писать хорошие,

вот
а чем отличаются хорошие запросы от плохих ?
19 мар 15, 15:59    [17406011]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Glory
Member

Откуда:
Сообщений: 104760
essbase.ru
Glory
Нужно просто запросы писать хорошие,

вот
а чем отличаются хорошие запросы от плохих ?

Хорошие - это те, которые выполняются за приемлемое время
19 мар 15, 16:00    [17406016]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
По-моему, кто-то путает Buffer Pool с утечками.
19 мар 15, 16:02    [17406038]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
essbase.ru,

Использовать табличные переменные на больших объемах, это плохая идея в принципе. Замените на временные таблицы.
19 мар 15, 16:17    [17406148]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Glory
Хорошие - это те, которые выполняются за приемлемое время


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

DECLARE @cursorGetModelCfgS02 CURSOR;	 
	SET @cursorGetModelCfgS02 = CURSOR SCROLL FOR
	 select  C02 ,C03, C04, C05, C10, C11, BU         	
     from [ess_xmla].[P07Func].[F0002GetModelCfgS02] (   @vYear  , @vScenario)  ;

	 OPEN @cursorGetModelCfgS02
		--Выбираем первую строку
		FETCH NEXT FROM @cursorGetModelCfgS02 INTO @vC02 ,@vC03, @vC04, @vC05, @vC10, @vC11, @vBU 
			--Выполняем в цикле перебор строк
			WHILE @@FETCH_STATUS = 0
				BEGIN
				 insert into @f0002GetModelCfgS03_r
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'BegBalance' DPeriod 
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p01' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p02' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p03' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p04' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p05' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p06' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p07' DPeriod    
				      union all
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p08' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p09' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p10' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p11' DPeriod    
				      union all 
				   select @vC02 C02, @vC03 C03, @vC04 C04, @vC05 C05, @vC10 C10, @vC11 C11, @vBU BU, 'p12' DPeriod    
				  ;
		FETCH NEXT FROM @cursorGetModelCfgS02  INTO @vC02 ,@vC03, @vC04, @vC05, @vC10, @vC11, @vBU   --Выбираем следующую строку 
				END

	CLOSE @cursorGetModelCfgS02;	  	
    RETURN;
19 мар 15, 16:18    [17406156]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
WarAnt
essbase.ru,

Использовать табличные переменные на больших объемах, это плохая идея в принципе. Замените на временные таблицы.


- мне нужен результат через табличную функцию - а в них запрещено insert в живые таблицы
19 мар 15, 16:19    [17406164]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Glory
Member

Откуда:
Сообщений: 104760
essbase.ru
да собственно говоря я так и делаю

Если бы вы так делали, то не было бы " и вешается сервак."

essbase.ru
на последнем этапе выплевываю данные через курсор ,

Т.е. вы формируете " всевозможные пересечения и возвращают более 12 млн записей. " в курсор, который пототом читаете по одной записи и добавляете в таблицу ?
19 мар 15, 16:22    [17406187]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Glory
Т.е. вы формируете " всевозможные пересечения и возвращают более 12 млн записей. " в курсор, который пототом читаете по одной записи и добавляете в таблицу ?

выплевыаю наружу для загрузки во внешнюю систему

использую SQL как калькулятор
19 мар 15, 16:26    [17406221]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
WarAnt
essbase.ru,

Использовать табличные переменные на больших объемах, это плохая идея в принципе.


но только память-то тут не при чем.
19 мар 15, 16:26    [17406225]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Glory
Member

Откуда:
Сообщений: 104760
essbase.ru
выплевыаю наружу для загрузки во внешнюю систему

использую SQL как калькулятор

В приведенном вам скрипте нет никакого "выплевывания наружу"
Только курсор по результатам какой-то табличной функции

Перестаньте морочить людям голову и займитесь оптимизацией ваших запросов
19 мар 15, 16:28    [17406234]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Glory
В приведенном вам скрипте нет никакого "выплевывания наружу"


мир гораздее удивеительнее чем кажется с первого взгляда ) (см аттач)

К сообщению приложен файл. Размер - 40Kb
19 мар 15, 16:34    [17406272]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Glory
Member

Откуда:
Сообщений: 104760
essbase.ru
Glory
В приведенном вам скрипте нет никакого "выплевывания наружу"


мир гораздее удивеительнее чем кажется с первого взгляда ) (см аттач)

Картинка с другого сайта.

И что нужно увидеть в окне с текстом запроса ? Процесс выплевывния ? Протекание памяти ? ...
19 мар 15, 16:36    [17406289]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
essbase.ru
Member

Откуда: http://essbase.ru/about
Сообщений: 1407
Glory
И что нужно увидеть в окне с текстом запроса ? Процесс выплевывния ? Протекание памяти ? ...

- ЕСЛИ НЕТ МЫСЛЕЙ, ЛУЧШЕ ЭТО НЕ СВЕТИТЬ
19 мар 15, 16:43    [17406328]     Ответить | Цитировать Сообщить модератору
 Re: table function and memory leak  [new]
Glory
Member

Откуда:
Сообщений: 104760
essbase.ru
Glory
И что нужно увидеть в окне с текстом запроса ? Процесс выплевывния ? Протекание памяти ? ...

- ЕСЛИ НЕТ МЫСЛЕЙ, ЛУЧШЕ ЭТО НЕ СВЕТИТЬ

Вот на этой оптимистической ноте и закроем очередное обсуждение того, а где у MSSQL кнопка, чтобы мой говнокод стал работать быстро.
По причине того, что говнокод придется править самому
19 мар 15, 16:47    [17406346]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить