Как сжать файл журнала, где 89,5% не используется - PullRequest
0 голосов
/ 10 января 2020

В настоящее время у меня есть файл журнала на 27,6 ГБ, где 89,5 не используется. 10,5% используется. То, что я не знаю, это то, что значение использовать после примера DataFile1 ниже. Любая помощь или рекомендации приветствуется.

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO

Ответы [ 2 ]

1 голос
/ 10 января 2020

Используйте имя файла журнала, который вы хотите сжать, который вы можете найти следующим образом:

select file_id, type_desc, name, physical_name
from sys.database_files

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

file_id     type_desc                                                    name
----------- ------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------
1           ROWS                                                         AdventureWorksDW2017
2           LOG                                                          AdventureWorksDW2017_log

(2 rows affected)

Затем

DBCC SHRINKFILE (N'AdventureWorksDW2017_log' , 0, TRUNCATEONLY)

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

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

0 голосов
/ 11 января 2020

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

IF OBJECT_ID('tempdb..#tmplogspace') IS NOT NULL DROP TABLE #tmplogspace

CREATE table #TmpLOGSPACE  
(
DatabaseName varchar(100),
LOGSIZE_MB decimal(18, 9),
LOGSPACE_USED decimal(18, 9),
LOGSTATUS decimal(18, 9)
) 

INSERT INTO #TmpLOGSPACE(DatabaseName, LOGSIZE_MB, LOGSPACE_USED, LOGSTATUS) 
EXEC('DBCC SQLPERF(LOGSPACE);')

SELECT * FROM #TmpLOGSPACE
ORDER BY LOGSIZE_MB DESC

Посмотрите на размер и процент для рассматриваемой БД. Затем запустите это:

USE My_Database
GO

DBCC SHRINKFILE (2,20000)  -- 2 is for log file, last number is 20G, which should be a safe start.  Change as desired MB size
...