Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Освободить свободное место в tempdb без перезапуска службы / 16 сообщений из 16, страница 1 из 1
15.12.2021, 15:51
    #40120280
Piotr I
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Добрый день!
Из-за одного процесса сильно разросся 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
15.12.2021, 15:59
    #40120285
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Piotr I,
иногда помогает сначала немножко добавить размера файлов, а уж потом шринковать.
...
Рейтинг: 0 / 0
15.12.2021, 16:13
    #40120294
Piotr I
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Нашел ещё такое сообщение, на такое надо сначала на девке попробывать.
Освобождение TempDB
...
Рейтинг: 0 / 0
15.12.2021, 20:45
    #40120408
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Piotr I,

без перезапуска никак, не страдайте.
...
Рейтинг: 0 / 0
15.12.2021, 21:56
    #40120418
Очень лысый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Не исключено, что без перезапуска и никак, но во многих случаях у меня вполне получалось пошринкать 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
16.12.2021, 10:39
    #40120519
Piotr I
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Очень лысый,
Добрый день!
Как раз хотелось бы избежать потери планов и кеша, поэтому и искал способ освобождения места без перезапуска службы.
...
Рейтинг: 0 / 0
16.12.2021, 22:21
    #40120829
Очень лысый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Piotr I
Очень лысый,
Добрый день!
Как раз хотелось бы избежать потери планов и кеша, поэтому и искал способ освобождения места без перезапуска службы.


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


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


Добрый день!
Не совсем понимаю, что выше уже написали?
Нет возможности или что?
...
Рейтинг: 0 / 0
17.12.2021, 00:29
    #40120862
Piotr I
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
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
17.12.2021, 10:19
    #40120930
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Мне удавалось шринковать постепенно снижая размер БД в DBCC SHRINKFILE (N'tempdev' , ХХХХХ).
Причем начальное значение было более 80% от размера файла.
Каждый раз результат был разным: иногда шринк происходил сразу. Иногда после 10 попытки. Были и случаи, когда помогал только ребут.

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


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

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


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


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


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


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

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


Добрый день,
вот оно как, оказывается...
...
Рейтинг: 0 / 0
21.12.2021, 18:07
    #40121993
Piotr I
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Пока не нашел ничего адекватного. В выходные (когда сервер пустой) смог освободить немного места следующим скриптом (на одном сервере получилось, на другом вообще по 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
21.12.2021, 18:51
    #40121999
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Освободить свободное место в tempdb без перезапуска службы
Piotr I,

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

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

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


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