Sql-Server
管理包含超過 1 TB 數據的 SQL Server 數據庫
最近我們有一個超過 1 TB 的審計數據庫,由於我們存在儲存問題,管理層正在尋找選擇。
我的建議是在每年年底我們進行備份並截斷所有表,以保持數據庫的可管理性。
擁有存檔數據庫將沒有好處,因為它將再次佔用相同的空間。
我想就我可以向管理層提出的選項提出專家意見,即每年分配更多空間或截斷整個數據庫。
- 獲得更多空間。如果您有保留這麼多數據的業務需求,他們必須拿出錢來。
- 為最大的表(和索引)打開頁面壓縮(測試測試測試!),日誌數據壓縮得非常好,但壓縮這麼多數據需要一些時間。
- 見第 1 點
我在上面添加了Trubs 的 答案,你應該贊成,因為他在正確的軌道上,但我在這裡也添加了更多選項:
- 添加更多空間(如上所述)
- 如果您在任何索引上每頁的平均可用空間量很大,則應該執行¹ 語句(如果您有足夠的可用空間,我建議您進行操作,但是由於我們正在談論空間不足,因此操作可能無法在較大的表上完成)。要找到每頁的平均可用空間量,您需要使用or模式執行 dmv,這需要一段時間。
ALTER INDEX
REORG
REBUILD
sys.dm_db_index_physical_stats
SAMPLED``DETAILED
- 清除一些數據。您可以批量刪除以幫助減少過多的日誌記錄和鎖定,或者更好的長期解決方案是利用表和索引分區²並切換/截斷最後一個分區以更快地清除數據。
- 啟用頁面或行壓縮²(如上所述)。
sp_estimate_data_compression_savings
您可以使用儲存過程查看估計的空間節省。- 升級到 SQL 2016 或更高版本後,您可以將表轉換為使用聚集列儲存索引²。這些可能會為您提供可用的最佳壓縮比,並且可能還會改善對這些表的查詢執行時間。值得注意的是,我不建議您使用 SQL 2014(或 SQL 2012)執行此操作,因為我認為此功能在 SQL 2016 之前處於 Beta 版,最終以適當的功能發布。
- 利用 Azure Stretch Database,這是一種混合解決方案,可讓您儲存在雲中不經常訪問的數據。這將花費金錢並且至少需要使用 SQL 2016,但由於我們正在討論未來版本中的功能,我認為它也應該被列出。
¹ - 僅在企業版中可用
² - 從 SQL Server 2016 SP1 開始的所有 SQL Server 版本中都可用。這是此 Service Pack 之前的企業專用功能。