Share via


Sharepoint dev machine - не даем базам SQL разрастись

Пора вернуться к написанию блога.

У меня был данный пост в старом блоге на gotdotnet, (RIP) и я с тех пор сожалею что никак не мог найти в интернете подходящий скрипт. Пришлось восстановить заново.

 

Я периодически создаю себе одноверверные фермы для разработки. Свеже установленный SharePoint конфигурирует кучу баз, и каждая со временем разрастается.Хуже того, я сейчас использую  SSD в Azure (а там места совсем мало если брать за разумные деньги).

 

То есть, если машина исползуется для РАЗРАБОТКИ, то можно переключить модель восстановления в режим simple (recovery mode = simple).До 2012 SQL была специальная опция "truncate log on checkpoint", но начиная с SQL 2012 ее больше нет (см. https://technet.microsoft.com/en-us/library/ms187310(v=sql.105).aspx ).

 

Я нашел хороший блог пост тут https://microtechpoint.com/index.php?route=blog/article&article_id=10 с хорошим наборои команд (реально радует заголовок "Shrinking Ginormous SharePoint Database Transaction Log Files" :)), , но эти команды работают только с одной базой.

 

Я также нашел недокументированную хранимую процедуру sp_MSForEachDB (см. https://www.c-sharpcorner.com/UploadFile/63f5c2/sp_msforeachtable-stored-procedure-in-sql-server-2012/ или  https://weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx ), данная процедура может запустить некоторую команду для каждой базы.

 

Итого я использовал следующую команду.(Можно обсуждать, нужен ли тут shrinkdataase или нужно ли добавить autoshrink).

EXEC sp_MSforeachdb 'USE [?]; print ''?'';  ALTER DATABASE [?] SET RECOVERY SIMPLE; CHECKPOINT; DBCC SHRINKDATABASE ([?],10); '

 

Disclaimer: Я нигде не сказал, что я рекомендую модель simple  в production.