Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Management Studio MSSQL2008 R2 - утечка памяти при работе скрипта  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 337
Есть следующий скрипт:
-- таблица должна быть создана до работы скрипта
-- create table mseqShemas(m int, shema int)  
-- create unique index mseqShemas_i on mseqShemas(m, shema) 

create table #regValues(reg int)	
create index #regValues_i on #regValues(reg)

declare	@m int, @mmax int, @shema int, @reg int, @nb int, @wrk int

set	@m	= 13	-- параметр = 2..31
set	@mmax	= POWER(2, @m) - 1
set	@shema	= POWER(2, @m-1) + 1

while @shema <= @mmax
begin
	truncate table	#regValues
	set	@reg	= 1

	while 1 = 1
	begin
		set	@wrk	= @reg & @shema
		set	@nb	= 0

		while @wrk <> 0
		begin
			set	@nb	= @nb ^ (@wrk & 1) 
			set	@wrk	= @wrk / 2
		end

		set	@reg	= ((@reg * 2) | @nb) & @mmax

		if not exists (select 1 from #regValues where reg = @reg)
			insert	#regValues    values(@reg)
		else
			break
	end

	if (select count(*) from #regValues) = @mmax
	    insert mseqShemas values(@m, @shema)

	set	@shema	= @shema + 1
end


Про его назначение не пишу исключительно ради непредвзятости суждений. :)
Коротко: имеется некая целочисленная арифметика в процедурном стиле, результаты работы которой записываются в таблицу базы. Есть единственный параметр @m, для которого работает скрипт при конкретном запуске.
И всё.
Почему-то этот скрипт очень быстро захватывает память на машине клиента. Практически уже при @m = 13 он завершается exception'ом при объёме выделенной процессу ssms.exe памяти ~ 1.5 Гб, после чего Management Studio просто дохнет. При меньших @m скрипт отрабатывает, как должен, хотя память всё равно быстро течёт.
Оформление этого кода в виде ХП не изменило картины.
В чём причина утечки памяти? Ведь формально объявлено всего 6 переменных int, и вся работа ведётся только с ними.
12 апр 16, 11:02    [19045975]     Ответить | Цитировать Сообщить модератору
 Re: Management Studio MSSQL2008 R2 - утечка памяти при работе скрипта  [new]
Glory
Member

Откуда:
Сообщений: 104751
AR®
В чём причина утечки памяти?

Память ssms.exe не имеет никакого отношения к памяти сервера
Поставьте SET NOCOUNT ON в начало скрипта
12 апр 16, 11:06    [19046002]     Ответить | Цитировать Сообщить модератору
 Re: Management Studio MSSQL2008 R2 - утечка памяти при работе скрипта  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 337
Glory
Память ssms.exe не имеет никакого отношения к памяти сервера

Целиком согласен. :)
Это и удивляло (что дохла ssms.exe, а на сервере всё было хорошо).

Glory
Поставьте SET NOCOUNT ON в начало скрипта


Премного благодарю!
Получается, память отбирали сообщения. Их действительно было много.
12 апр 16, 11:30    [19046152]     Ответить | Цитировать Сообщить модератору
 Re: Management Studio MSSQL2008 R2 - утечка памяти при работе скрипта  [new]
Glory
Member

Откуда:
Сообщений: 104751
AR®
Получается, память отбирали сообщения. Их действительно было много.

Ну возвращаемые сервером результаты надо же где то хранить
12 апр 16, 11:36    [19046195]     Ответить | Цитировать Сообщить модератору
 Re: Management Studio MSSQL2008 R2 - утечка памяти при работе скрипта  [new]
AR®
Member

Откуда: Подмосковье
Сообщений: 337
Glory
возвращаемые сервером результаты надо же где то хранить

Видимо, и смутило то, что этот скрипт ничего не возвращает в виде rowset'ов, все результаты пишутся в постоянную таблицу базы.
12 апр 16, 11:47    [19046280]     Ответить | Цитировать Сообщить модератору
 Re: Management Studio MSSQL2008 R2 - утечка памяти при работе скрипта  [new]
Glory
Member

Откуда:
Сообщений: 104751
AR®
Видимо, и смутило то, что этот скрипт ничего не возвращает в виде rowset'ов, все результаты пишутся в постоянную таблицу базы.

Наборы данных - это не единственные результаты, возвращаемые сервером клиенту
12 апр 16, 11:48    [19046289]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить