powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Освободить свободное место в tempdb без перезапуска службы
16 сообщений из 16, страница 1 из 1
Освободить свободное место в tempdb без перезапуска службы
    #40120280
Piotr I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Из-за одного процесса сильно разросся tempdb (зарезервированное место).
Хотелось бы освободить без перезапуска червера(служб).

На запрос получаем следующую картину
Код: 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.
select db_name(sa.dbid) as DBname 
	, sa.name as LogicalName
	, case sa.groupid
		WHEN 0 then 'LOG'
		ELSE sfg.groupname
	  end as Filegroup
	, sa.filename as Filename
	, cast(sf.size*8/1024. as numeric(19,3))as sizeMB
	, cast(sf.spaceused*8/1024. as numeric(19,3)) as spaceusedMB
	, cast((sf.size-sf.spaceused)*8/1024. as numeric(19,3)) as freespaceMB
	, case sf.maxsize
		when -1 then 'Unlimited'
		else cast(cast(sf.maxsize*8/1024.  as numeric(19,3))as varchar(22))
	  end as maxsizeMB
	, cast(sf.growth*8/1024. as numeric(19,3)) as nextgrowthMB
from master..sysaltfiles sa 
left join (
	select   cast(size as bigint) as size
			,fileid
			,groupid
			,cast(fileproperty(name,'SpaceUsed')as bigint) as spaceused 
			,cast(maxsize as bigint) as maxsize
			,cast(case 
				when status & 0x100000 = 0 then growth
				else size*growth/100
			 end as bigint) as growth
	from sysfiles
	) sf on sf.fileid=sa.fileid 
		and sf.groupid = sa.groupid
left outer join sysfilegroups sfg on sfg.groupid = sf.groupid
where sa.dbid = db_id()
order by case when sa.groupid = 0 then 1 else 0 end, sa.groupid, sa.fileid



DBnameLogicalNameFilegroupFilenamesizeMBspaceusedMBfreespaceMBmaxsizeMBnextgrowthMBtempdbtempdevPRIMARYT:\TEMPDB\tempdb.mdf101123.4382111.81399011.625Unlimited10112.344tempdbtempdev1PRIMARYT:\TEMPDB\tempdb1.ndf12095.000265.31311829.688Unlimited1209.500tempdbtempdev2PRIMARYT:\TEMPDB\tempdb2.ndf1792.62539.1251753.500Unlimited179.258tempdbtempdev3PRIMARYT:\TEMPDB\tempdb3.ndf13039.750465.62512574.125Unlimited1303.969tempdbtempdev4PRIMARYT:\TEMPDB\tempdb4.ndf25048.188753.18824295.000Unlimited2504.813tempdbtempdev5PRIMARYT:\TEMPDB\tempdb5.ndf9815.750212.8139602.938Unlimited981.570tempdbtempdev6PRIMARYT:\TEMPDB\tempdb6.ndf227795.81341.625227754.188Unlimited22779.578tempdbtempdev7PRIMARYH:\ZAPAS_TEMPDB\tempdb7.ndf2528.00052.6882475.313Unlimited252.797tempdbtemplogLOGL:\TEMPDB_LOGS\templog.ldf6754.875355.3056399.570Unlimited675.484

Пыталься делать Shrink файлов, но не помогало. (через интерфейс MS заканчивался за 2 сек. и 0 результатов, через t-sql длился несколько часов с 0 результатами). Пытался в два способа (независмо)
Код: sql
1.
2.
DBCC SHRINKFILE (tempdev6, 220000); 
DBCC SHRINKFILE (tempdev5, 8000); 
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120285
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Piotr I,
иногда помогает сначала немножко добавить размера файлов, а уж потом шринковать.
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120294
Piotr I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел ещё такое сообщение, на такое надо сначала на девке попробывать.
Освобождение TempDB
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120408
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Piotr I,

без перезапуска никак, не страдайте.
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120418
Очень лысый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не исключено, что без перезапуска и никак, но во многих случаях у меня вполне получалось пошринкать tempdb без перезапуска следующим образом

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
USE [tempdb]
GO

DBCC FREEPROCCACHE;
GO

DBCC FREESYSTEMCACHE ('ALL');
GO

DBCC FREESESSIONCACHE;
GO

DBCC SHRINKFILE (N'tempdev' , 1024)



название файла и размер - up to you
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120519
Piotr I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень лысый,
Добрый день!
Как раз хотелось бы избежать потери планов и кеша, поэтому и искал способ освобождения места без перезапуска службы.
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120829
Очень лысый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Piotr I
Очень лысый,
Добрый день!
Как раз хотелось бы избежать потери планов и кеша, поэтому и искал способ освобождения места без перезапуска службы.


А, ну тогда выше уже написали.
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120855
Piotr I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень лысый
Piotr I
Очень лысый,
Добрый день!
Как раз хотелось бы избежать потери планов и кеша, поэтому и искал способ освобождения места без перезапуска службы.


А, ну тогда выше уже написали.


Добрый день!
Не совсем понимаю, что выше уже написали?
Нет возможности или что?
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120862
Piotr I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Piotr I,
при shrink получил следующую ошибку:
DBCC SHRINKFILE: Page 8:20149032 could not be moved because it is a work table page

Нашел такой скрипт:
Код: sql
1.
2.
SELECT * FROM sys.dm_tran_active_transactions
  WHERE name = N'worktable'



Получил такие результаты:
transaction_idnametransaction_begin_timetransaction_typetransaction_uowtransaction_statetransaction_statustransaction_status2dtc_statedtc_statusdtc_isolation_levelfilestream_transaction_id510worktable2021-11-26 17:39:39.5072NULL200000NULL

Из того что нашел:
https://dba.stackexchange.com/questions/76965/removing-secondary-data-files-dbcc-shrinkfile-page-could-not-be-moved-because

Там автор зашел на одну из баз в однопользовательский режим
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40120930
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне удавалось шринковать постепенно снижая размер БД в DBCC SHRINKFILE (N'tempdev' , ХХХХХ).
Причем начальное значение было более 80% от размера файла.
Каждый раз результат был разным: иногда шринк происходил сразу. Иногда после 10 попытки. Были и случаи, когда помогал только ребут.

Эпично разростался из-за некорректно написанного 1С-отчета. :)
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40121022
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Piotr I
Нашел ещё такое сообщение, на такое надо сначала на девке попробывать.
Освобождение TempDB


авторДобрый день!
Из-за одного процесса сильно разросся tempdb (зарезервированное место).
Хотелось бы освободить без перезапуска червера(служб).

Добрый день!
а тот один процесс активен еще ?
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40121050
Piotr I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
Piotr I
Нашел ещё такое сообщение, на такое надо сначала на девке попробывать.
Освобождение TempDB


авторДобрый день!
Из-за одного процесса сильно разросся tempdb (зарезервированное место).
Хотелось бы освободить без перезапуска червера(служб).


Добрый день!
а тот один процесс активен еще ?
Добрый день!
Нет тот процесс уже давно убили. В таблице видно, что память зарегестирована, но практически не используется
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40121087
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Piotr I
Ролг Хупин
пропущено...


пропущено...


Добрый день!
а тот один процесс активен еще ?

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


Добрый день,
вот оно как, оказывается...
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40121993
Piotr I
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока не нашел ничего адекватного. В выходные (когда сервер пустой) смог освободить немного места следующим скриптом (на одном сервере получилось, на другом вообще по 0)
Не знаю, насколько тут всё написано, но на мой взгляд (для нашей фирмы) проще перезапускать службу.
Может ещё кто-то посоветует, или я ещё найду, тогда тут это обозначу.

Код: 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.
USE [tempdb]
GO
declare @currentSizeMB bigint
		, @newSizeMB bigint
		, @step int = 0
		, @max_steps int = 300
		, @base nvarchar(20) = 'tempdev3'

select @currentSizeMB = sf.size*8/1024
from master..sysaltfiles sa 
left join (
	select   cast(size as bigint) as size
			,fileid
			,groupid
	from sysfiles
	) sf on sf.fileid=sa.fileid 
		and sf.groupid = sa.groupid
left outer join sysfilegroups sfg on sfg.groupid = sf.groupid
where sa.dbid = db_id() and sa.name = @base
 
while @currentSizeMB > 10000  /*feature size*/ AND @max_steps > 0
begin
	SET @max_steps = @max_steps - 1

	DBCC SHRINKFILE (@base , @currentSizeMB)
	
	select @newSizeMB = sf.size*8/1024
	from master..sysaltfiles sa 
	left join (
		select   cast(size as bigint) as size
				,fileid
				,groupid
		from sysfiles
		) sf on sf.fileid=sa.fileid 
			and sf.groupid = sa.groupid
	left outer join sysfilegroups sfg on sfg.groupid = sf.groupid
	where sa.dbid = db_id() and sa.name = @base
	
	if @newSizeMB >= @currentSizeMB and @step = 0
	begin
		SET @currentSizeMB = @newSizeMB -- получалось, что когда сжимаю до текущего размера, то иногда получалось следующим шагом освободить место
		SET @step = 1
	end
	else
	begin
		set @currentSizeMB = @currentSizeMB - 1000
		set @step = 0
	end
end
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40121999
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Piotr I,

в группе доступности проблема вообще легко решается - выполняете файловер и база tempdb пересоздается.
...
Рейтинг: 0 / 0
Освободить свободное место в tempdb без перезапуска службы
    #40122002
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Piotr I,

в группе доступности проблема вообще легко решается - выполняете файловер и база tempdb пересоздается .

наверное имеется ввиду failover cluster, а не AG?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Освободить свободное место в tempdb без перезапуска службы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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