Как уменьшить размер базы данных TFS
У нас есть среда TFS2010. Размер растет каждую неделю в течение длительного времени.
Мы удалили много старых веток и командных проектов. Мы также использовали очиститель тестового приложения для нескольких проектов, как сказал Брайан Гарри в своем посте. http://blogs.msdn.com/b/bharry/archive/2011/10/31/tfs-databases-growing-out-of-control.aspx
База данных не становится меньше. Я также несколько раз пытался использовать команду уничтожения, но ничего не помогало.
Я проверил все записи, которые мог придумать, но не нашел ошибок.
Есть предложения?
Спасибо
Редактировать с результатом запроса, который задается в комментариях:
TableName SchemaName RowCounts TotalSpaceKB UsedSpaceKB UnusedSpaceKB FieldsDataArchive dbo 0 0 0 0 tbl_AuditLog dbo 41710 5168 3800 1368 tbl_AuthorizationUpdateLock dbo 1 16 16 0 tbl_BuildOutput dbo 0 0 0 0 tbl_BuildServerProperties dbo 1 16 16 0 tbl_BuildSqlNotification dbo 124445 8432 6544 1888 tbl_Counter dbo 3 16 16 0 tbl_LastChangeId dbo 1 16 16 0 tbl_Replication dbo 1 16 16 0 tbl_Repository dbo 1 16 16 0 TempADObjectMemberships dbo 0 0 0 0 TempADObjects dbo 0 0 0 0 Шаблоны dbo 7 41328 41280 48
3 ответа
Большая часть дискового пространства в вашем случае будет использоваться файлом журнала транзакций, а не файлом данных.
Приведенный выше запрос показывает только дисковое пространство, используемое файлом данных.
Вы можете посмотреть на сокращение журнала транзакций, если у него есть свободное место.
После просмотра необоснованного увеличения журнала транзакций базы данных TFS я не смог найти точную причину роста и не смог также контролировать автоматическое сжатие журнала.
Аналогичное решение без полного резервного копирования базы данных
Я пробовал этот сценарий несколько дней на непроизводственном сервере и только после того, как я переключился на производственный сервер.
Разорение на SQL Server 2012 и TFS 2015
следующий скрипт автоматически сжимает журнал транзакций.
Запустите этот скрипт после полного резервного копирования с использованием задания SQL
Скрипты частей:
1) Отключить все подключения к конкретной базе данных
2) Переключить резервную модель на простую
3) Установите размер журнала базы данных неограниченным
4) Сократите файл журнала до 200 МБ (или любой другой размер, который вы хотите)
5) Установите максимальный размер до 50000 (или любой другой размер, который вы хотите)
6) Установите резервную модель на полную
Запуск сценария занимает около 3 -5 секунд на 140 ГБ БД
USE [master]
GO
ALTER DATABASE [Tfs] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [Tfs] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [Tfs] MODIFY FILE ( NAME = N'Tfs_log', MAXSIZE = UNLIMITED)
GO
USE [Tfs]
GO
DBCC SHRINKFILE (N'Tfs_log' , 200)
GO
ALTER DATABASE [Tfs] MODIFY FILE ( NAME = N'Tfs_log', MAXSIZE = 50000)
USE [master]
GO
ALTER DATABASE [Tfs] SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE [Tfs] SET MULTI_USER
GO
Еще один совет, который я нашел, столкнувшись с подобной проблемой, заключается в том, чтобы предотвратить восстановление файла LDF, изменив режим восстановления таблицы на "простой".
Прежде всего, сожмите файл LDF. Я сделал это с помощью студии управления SQL.
После сжатия БД и проверки того, что TFS все еще работает, следуйте инструкциям здесь: stop-sql-server -action-log-ldf-files-from-Growing-неопределенный.
Это приведет к тому, что сервер SQL сократит объем данных восстановления, сохраняемых в журнале транзакций, чтобы вам не приходилось повторять операцию сжатия каждый X месяц.