前言
在已經運行了2年多的SharePoint服務器上,發現SharePoint_Config的數據庫文件越來越大,已經達到90幾個GB,收縮可以減小20幾個GB,但是一周以后又會恢復到90幾個GB大小,甚是奇怪。
因為磁盤空間不足,一共只有200GB大小,還有大大小小網站若干,用來存放照片、視頻、文檔等,所以決定好好研究一下這個問題。
經過不懈的谷歌,發現了問題症結所在,現在分享給大家,希望對遇到類似的問題的人,有個參考。
對了,注意。。這里是指數據庫文件,不是數據庫的日志文件,如果是日志文件的話,在數據庫管理工具中,修改備份模式為簡單,直接收縮就好了!
1、在數據庫服務器中打開Microsoft SQL Server Management Studio,找到SharePoint_Config數據庫,然后執行下面的語句:
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"
2、看到執行的結果,就是每個數據庫表的大小,然后看到TimerJobHistory這個表的行數非常多,大小也非常的大。
3、谷歌有類似的解決方案,說是因為job-delete-job-history這個Job運行失敗,造成了Job運行的歷史記錄不能被及時清理,造成了配置數據庫越來越大。所以運行下面的腳本,會清理一年以來的積累,而這個Job默認每周運行一次,清理上周積累下來的歷史記錄。
$history = get-sptimerjob | where-object {$_.name -eq “job-delete-job-history”}
$history.daystokeephistory = 365
$history.update()
$history.runnow()
4、運行完畢以后,還要將daystokeephistory數值改回7天,如下圖:
5、可以看到運行以后,確實有個Job再運行,不過我這里可能由於已經超過365天了,所以也沒有起作用,Job依舊運行Failed。所以只能繼續谷歌,尋找解決方案。
6、經過不懈的查找,發現了一個ps腳本,把下面腳本,存成一個ps1文件,執行一下,會起作用(至少我這里已經起作用了,會刪掉多余的歷史記錄);
Add-PSSnapin Microsoft.SharePoint.PowerShell Write-Host "Clearing Down Timer Job History" $daysToKeep = 300 $daysToPurgeInOneLoop = 5 while ($daysToKeep -gt 0) { $history = get-sptimerjob | where-object {$_.name -eq “job-delete-job-history”} Write-Host " " Write-Host -NoNewLine "Setting Days to Keep:" Write-Host -ForegroundColor Green $daysToKeep $history.DaysToKeepHistory = $daysToKeep $history.update() Write-Host -ForegroundColor Green "Starting Purge Job" $lastTimeJobRan = $history.LastRunTime $history.runnow() Write-Host -NoNewLine -ForegroundColor Green "Waiting For Purge Job to Complete" $jobFinished = $false while ($jobFinished -eq $false) { Start-Sleep -Seconds 2 $runningJob = Get-SPTimerJob $history.Name Write-Host -NoNewLine -ForegroundColor Yellow "." if ($lastTimeJobRan -ne $runningJob.LastRunTime) { $jobFinished = $true } } Write-Host " " Write-Host -ForegroundColor Green "Ending Purge Job" $daysToKeep = $daysToKeep - $daysToPurgeInOneLoop } Write-Host -ForegroundColor Green "Setting Final Job History Retention to 3 days, and schedule to run daily @ 5am" $history.DaysToKeepHistory = 3 $history.update() $history.runnow() Set-SPTimerJob -Identity $history -Schedule "Daily at 05:00" Write-Host -ForegroundColor Yellow "Please check row counts on dbo.TimerJobHistory Table in Config DB to ensure run complete"
結束語
當然,執行PowerShell的命令需要很長時間,我這里用了大概1天時間,將90多個GB的SharePoint_Config收縮到了15個GB,效果還是很明顯的,整理出來很大一部分空間,不用經常做磁盤空間維護了。
附后
PowerShell命令的參考地址:http://sharepoint.it-professional.co.uk/?p=228



