我正在使用SQL Server 2005.存在包含超過1,000,000,000行的審計跟蹤表。我打算將這張表格歸檔。當我用nolock
做一個簡單的選擇時,我仍然可以發現阻塞(可能是IO阻塞與其他進程?)。那麼對於這種情況有沒有最佳做法?存檔超過1,000,000,000行的巨大表格的最佳做法
回答
對於一個表大,你會想找到一些有效的分片/分區策略。在這種意義上歸檔往往是一種分區形式,但不是一種好的分區形式,因爲無論如何您通常都要查詢當前和歸檔。在最糟糕的情況下,您最終會在歸檔和當前表的UNION上產生SELECT,這比根本沒有分割它們更糟糕。
通過尋找其他方式來分割數據,比如記錄類型或其他東西,你通常會做得更好。但是,如果您打算按日期進行分割,請確保您不會查詢歸檔+當前數據集。
此外,SQL Server 2005+不默認啓用MVCC。但是,如果啓用MS稱爲快照隔離的功能,則可以執行此操作。見Serializable vs. Snapshot Isolation Level。
而不是啓用此功能的原因是未提交的INSERT或UPDATE將在另一個事務中阻塞SELECT,直到第一個事務提交或回滾爲止。這可能會導致不必要的鎖定並限制您的可伸縮性。
創建數據庫的備份並將其恢復到存檔位置。
這是迄今爲止最簡單+最安全的解決方案,尤其是如果您不經常這樣做......或者實際上,尤其是如果您經常這樣做的話。除非你需要像分區那樣更流暢的東西(這需要一點點教育才能正確執行),這是一個很好的選擇。 – 2010-03-02 04:08:21
不管你怎麼做,一次選擇10億行都會給服務器帶來壓力。
而不是一次批1000行。 bcp工具自動執行此操作。或者使用SSIS將數據複製到另一個數據庫 - 它幾乎完成了同樣的事情。
- 1. 用巨大的表格存檔問題
- 2. 在電子表格中存檔數據的最佳做法
- 3. JAVA - 解析巨大(超大)JSON文件的最佳方法
- 4. 將表格中的行添加到表格的最佳做法
- 5. 在巨大的表格中存儲速度的「標籤」的最佳方式
- 6. 自制超時的最佳做法
- 7. 最佳做法與MySQL innodb重命名巨大的表,當同名表已存在
- 8. 中斷超過閾值的線程的最佳做法
- 9. 處理超大型數組的最佳做法? D B?
- 10. 處理已刪除表格行的最佳做法?
- 11. 超過最大文檔大小
- 12. 處理Android地圖上的巨大覆蓋物品的最佳做法
- 13. 命名存檔對象的最佳做法是什麼?
- 14. 大JavaScript對象的最佳做法
- 15. SharePoint列表最佳做法
- 16. 存儲程序集的最佳做法?
- 17. 存儲密鑰的最佳做法
- 18. 保存設置的最佳做法?
- 19. 存儲設置的最佳做法
- 20. Django中的巨大表格?
- 21. 存儲最終列表數據的最佳做法
- 22. 存儲大量插座的最佳做法是什麼?
- 23. 什麼是存儲大數據的最佳做法
- 24. 在大型項目中緩存值的最佳做法
- 25. 以最佳性能存儲超大整數的正確方法?
- 26. 通過WCF處理大型進口產品的最佳做法?
- 27. 單元格內容刪除後保存DataGridView的最佳做法
- 28. 進行Magento更新的最佳做法?
- 29. 命令行構建的最佳做法
- 30. 響應Google圖表的最佳做法
快照存儲層並將快照中的數據庫作爲獨立實例安裝? – 2010-03-02 04:04:20