一個小故事 某天,小王正在和HR妹妹閑聊,正HAPPY時,,突然收到系統告警消息,資料庫磁碟被剩餘空間500M,OMG,不行,磁碟快滿了,要是業務要停了,,那就小王只能刪庫到跑路了,,, 先檢查下,有沒有可以刪除的不用的文件,結果都是重要的或者拿不准的。先收縮下資料庫吧,點擊運行。等收縮完成就可以繼 ...
一個小故事
某天,小王正在和HR妹妹閑聊,正HAPPY時,,突然收到系統告警消息,資料庫磁碟被剩餘空間500M,OMG,不行,磁碟快滿了,要是業務要停了,,那就小王只能刪庫到跑路了,,,
先檢查下,有沒有可以刪除的不用的文件,結果都是重要的或者拿不准的。先收縮下資料庫吧,點擊運行。等收縮完成就可以繼續去根HR妹妹聊天了。突然電話座機和手機齊鳴,小王心裡一種不祥的預感呢?好像這個場景在哪裡見過。。不會是資料庫阻塞了吧?? 手忙腳亂的先接起手機,因為來電顯示是某業務部門主管 “小王啊,,現在系統卡死了,全部不動了,是怎麼回事啊,你趕緊處理下”,,“恩,好的,我馬上檢查下”,然後又接起座機,是另外一個部門的主管說報表看不了。慌忙應付完了,趕緊檢查資料庫執行中的語句。 果然資料庫產生大量的阻塞,,連帶資料庫伺服器的操作都變得好慢(是我的心理作用嗎?)。正準備先把收縮操作取消了,,電話有同時響起了,,,唉,不管了,先處理問題。然後點擊取消。經過漫長的等待,,終於完成了,然後打電話跟各個部門解釋,,寫事故報告,,悲劇,,今天的午飯都不想吃了。
這個場景是不是很熟悉啊,關於資料庫收縮的問題,是我在群里,論壇里,看到新人問過最頻繁的問題之一。今天這篇文章對資料庫收縮進行有個框架性說明,希望小伙伴在以後遇到相關的
問題時,做到心中有數。
關於收縮的建議
不到萬不得已,千萬不要收縮資料庫。收縮資料庫影響極大:
1.收縮資料庫對資料庫的影響極大,產生大量日誌和碎片,而且會鎖表。如果你的庫當前正在被使用,收縮不下去非常正常。
2.收縮資料庫一定要手工來做的,而且是在維護視窗期做的事。
3.儘量使用語句來執行,可以提示錯誤
下麵的文章詳細介紹:
http://www.sqlskills.com/blogs/paul/why-you-should-not-shrink-your-data-files/.
收縮的正確姿勢
在不得不收縮的時候,參考下麵的步驟
1.找到資料庫中最大的幾個表,重建所有索引。首先嘗試指定Truncate Only收縮方式.它只是移除文件尾部的空閑空間,並不重新組織已經使用的數據頁。
DBCC SHRINKDATABASE (AdventureWorks2012, TRUNCATEONLY);
2 最後才考慮,不帶選項的收縮。收縮不要一次性全部收縮。 可以每次收縮2G左右。不要把空間可用空間全部收縮了,可以剩餘一部分比如4G。
3.可在進程中的任一點停止 DBCC SHRINKDATABASE 操作,任何已完成的工作都將保留。
4. 不能在備份資料庫時收縮資料庫
總結
那我們處理磁碟空間不足的最好的辦法是什麼呢?最好的辦法是在最初規劃時,預估好未來一年或者二年的數據增長。給磁碟劃分足夠的空間。設置好資料庫的初始大小,並且將自動增長使用固定量增長。