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

Откуда:
Сообщений: 124
Добрый день!
Вопрос по поводу базы TempDВ и модели Simple.

Согласно модели восстановления Simple, файл журнала транзакий содержит информацию о транзакции только в момент ее выполнения, после завершения транзакции, информация с файла журнала транзакций удаляется.

Выполняю запрос следующего рода:

BEGIN TRAN 

	SELECT *
	INTO #R
	FROM Table1

	DELETE FROM #R

COMMIT 

Размер таблицы около 600 Мб.
Размер файлов базы TempDB остался прежним, но вот журнал транзакций увеличился на 1.3 Гб.

Для отслеживания изменения размера базы TempDB использую скрипт ниже:
select
	[FileSizeMB]	=
		convert(numeric(10,2),sum(round(a.size/128.,2))),
        [UsedSpaceMB]	=
		convert(numeric(10,2),sum(round(fileproperty( a.name,'SpaceUsed')/128.,2))) ,
        [UnusedSpaceMB]	=
		convert(numeric(10,2),sum(round((a.size-fileproperty( a.name,'SpaceUsed'))/128.,2))) ,
	[Type] =
		case when a.groupid is null then '' when a.groupid = 0 then 'Log' else 'Data' end,
	[DBFileName]	= isnull(a.name,'*** Total for all files ***')
from
	sysfiles a
group by
	groupid,
	a.name
	with rollup
having
	a.groupid is null or
	a.name is not null
order by
	case when a.groupid is null then 99 when a.groupid = 0 then 0 else 1 end,
	a.groupid,
	case when a.name is null then 99 else 0 end,
	a.name


Вопрос, почему журнал транзакций так сильно вырос?

Microsoft SQL Server 2005 - 9.00.4207.00 (X64) Dec 17 2008 14:30:05 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
19 дек 12, 13:04    [13653530]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3041
Meriguan
Добрый день!
Вопрос по поводу базы TempDВ и модели Simple.

Согласно модели восстановления Simple, файл журнала транзакий содержит информацию о транзакции только в момент ее выполнения, после завершения транзакции, информация с файла журнала транзакций удаляется.

Выполняю запрос следующего рода:

BEGIN TRAN 

	SELECT *
	INTO #R
	FROM Table1

	DELETE FROM #R

COMMIT 

Размер таблицы около 600 Мб
Размер файлов базы TempDB остался прежним, но вот журнал транзакций увеличился на 1.3 Гб.

Вопрос, почему журнал транзакций так сильно вырос?

Microsoft SQL Server 2005 - 9.00.4207.00 (X64) Dec 17 2008 14:30:05 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)


600 метров на инсерт и 600 метров на делит, а так как все в одной транзакции, то сложилось
19 дек 12, 13:28    [13653797]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
aleks2
Guest
А чо? Два раза по 600Кб = 1.2Гб.
Ну 0.1Гб - накладные расходы.
19 дек 12, 13:29    [13653806]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
Meriguan
Member

Откуда:
Сообщений: 124
HandKot,

База находится в модели Simple.
Почему после фиксирования транзакции, информация о ней осталась в журнале?
Если бы база находилась в модели Full, то и вопроса бы не было.
19 дек 12, 13:34    [13653872]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Meriguan
информация с файла журнала транзакций удаляется

Я так понял, для вас это утверждение равносильно "размер файла журнала транзакций уменьшается"? Это не так, просто пространство внутри файла помечается как неиспользуемое.
19 дек 12, 13:47    [13653982]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
Meriguan,

то, что файл стал 1,3 gb не говорит о том, что там осталось что-то. Файл транзакций скорее всего пуст на 99,999%
19 дек 12, 13:47    [13653987]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Гость333,

Я не говорю о том что файл журнал файла транзакции уменьшается, я говорю об использовании места журналом транзакции.
Я ориентировался на значение UsedSpace в скрипте который я привел в первом посте.
19 дек 12, 13:50    [13654019]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
bacalavr
Member

Откуда:
Сообщений: 311
dbcc sqlperf(logspace)
+
checkpoint , если смущает, что какое то время после завершения транзакции журнал все равно заполнен
19 дек 12, 13:52    [13654037]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
Meriguan
Согласно модели восстановления Simple, файл журнала транзакий содержит информацию о транзакции только в момент ее выполнения, после завершения транзакции, информация с файла журнала транзакций удаляется.
В корне неверное утверждение.
19 дек 12, 13:58    [13654098]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
Meriguan
Member

Откуда:
Сообщений: 124
bacalavr
dbcc sqlperf(logspace)
+
checkpoint , если смущает, что какое то время после завершения транзакции журнал все равно заполнен


Не выполнять же данную контрукцию в каждой процедуре где используються временные таблицы, для очистки ипользуемого места.
19 дек 12, 13:59    [13654102]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
Meriguan
Member

Откуда:
Сообщений: 124
invm
Meriguan
Согласно модели восстановления Simple, файл журнала транзакий содержит информацию о транзакции только в момент ее выполнения, после завершения транзакции, информация с файла журнала транзакций удаляется.
В корне неверное утверждение.


Спасибо, реально помог...
19 дек 12, 14:04    [13654132]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
aleks2
Guest
Meriguan
bacalavr
dbcc sqlperf(logspace)
+
checkpoint , если смущает, что какое то время после завершения транзакции журнал все равно заполнен


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

А зачем вам ЭТО?
19 дек 12, 14:05    [13654140]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
bacalavr
Member

Откуда:
Сообщений: 311
Meriguan
bacalavr
dbcc sqlperf(logspace)
+
checkpoint , если смущает, что какое то время после завершения транзакции журнал все равно заполнен


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


да нет, конечно
первое - чтобы понять, насколько действительно забит журнал транзакций
второе чтобы отпустить грехи записям, которые там есть, но фактически уже не требуются для обеспечения целостности
19 дек 12, 14:09    [13654175]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Meriguan
Я ориентировался на значение UsedSpace в скрипте который я привел в первом посте.

Только само значение UsedSpace привести забыли, поэтому осталось догадываться, что там на самом деле :-)
19 дек 12, 14:21    [13654274]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
Meriguan
Member

Откуда:
Сообщений: 124
aleks2
Meriguan
пропущено...


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

А зачем вам ЭТО?


Я сделал оптимизацию пары процедур, работать они стали быстро, но с использованием временных таблиц.
После выката на продакшен, возникла проблема с переполнением журнала транзакций TempDB.
Все решили, что проблема с этими процедурами.

В процедурах используються временные таблицы с размером менее 100 Мб, в каждой процедуре по одной таблице.
Максимально допустимый размер для журнала TempDB 50 Гб

Если эти процедуры будут вызваны около 1000 раз за час, то в принципе проблемы быть не должно, но когда начал проверять освобождение используемого места в журнале транзаций, то замел, что место сразу не освобождается.
По этому возник вопрос, как же тогда освобождается используемое место журналом транзакций.
19 дек 12, 14:23    [13654289]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
Meriguan
invm
пропущено...
В корне неверное утверждение.


Спасибо, реально помог...
Специально для ленивых -- http://msdn.microsoft.com/ru-ru/library/ms189085%28v=sql.105%29.aspx, Раздел "Как работает усечение журнала".
19 дек 12, 14:30    [13654352]     Ответить | Цитировать Сообщить модератору
 Re: Simple  [new]
Meriguan
Member

Откуда:
Сообщений: 124
invm
Meriguan
пропущено...


Спасибо, реально помог...
Специально для ленивых -- http://msdn.microsoft.com/ru-ru/library/ms189085%28v=sql.105%29.aspx, Раздел "Как работает усечение журнала".


Спасибо я уже нашел: http://msdn.microsoft.com/ru-ru/library/ms189573(v=sql.90).aspx


* Если используется простая модель восстановления базы данных, автоматическая контрольная точка создается каждый раз, когда число записей в журнале достигает меньшего из двух предельных условий:

- журнал заполняется на 70 процентов;

- число записей в журнале достигает значения, определенного компонентом Database Engine в качестве количества записей, которое он может обработать за время, заданное параметром recovery interval.
19 дек 12, 14:37    [13654400]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить