數據和日志文件分開存放在不同磁盤上
數據文件和日志文件的操作會產生大量的I/O在可能的條件下日志文件應該存放在一個與數據和索引所在的數據文件不同的硬盤上以分散I/O同時還有利於數據庫的災難恢復
tempdb數據庫單獨存放在不同磁盤上
tempdb數據庫是其他所有數據庫都有可能使用的臨時數據庫當使用select into在沒建立索引的列上執行Orderby時就會在tempdb數據庫中產生臨時表來存儲中間數據由於建立和填充臨時表會嚴重降低系統性能所以在盡可能的情況下應該為要排序的列建立索引同時tempdb數據庫是為所有的用戶和應用程序共享所以如果一個用戶占據了tempdb數據庫的所有空間則其他數據庫將不能再使用在可能的情況下tempdb數據庫應該單獨放置在一個速度更快的硬盤或者RAID陣列上分離tempdb數據庫的I/O操作以加快性能tempdb數據庫應該有適當的容量以滿足用戶的需要應該允許tempdb數據庫的空間自動增長如果設置為不允許自動增長當查詢操作建立了超過tempdb數據庫容量的臨時表時操作將無法完成
適當設置tempdb數據庫的增長幅度過小的增長幅度會產生更多的外部碎片會占用更多的資源
避免熱點數據的發生
在SQLServer之前對於沒有聚集索引的表(堆集表)新插入的數據行總是放置在磁盤中表的物理結尾處如果並發的用戶很多同時在對表執行插入或者更新數據的操作這將使得十分繁忙的表的末尾有可能產生數據熱點並發的I/O操作集中對少數頁面進行操作將導致數據庫性能的下降
在SQLServer中新的數據行的物理存儲空間的分配是通過PFS頁面來進行的PFS頁面的管理算法將插入操作進行分散來盡量避免產生數據熱點
在設計應用系統和數據庫時要避免在自然增長的列上建立主鍵這樣有可能導致熱點數據的發生
數據類型要少
在設計表時盡可能少用數據類型這樣一個數據頁面上可以保存最多的信息數據頁面就少檢索數據頁面的I/O操作就少所以效率會高
監控和整理空間碎片
文件空間的自動增長提高了自動管理性但可能導致空間碎片物理空間與數據的邏輯空間不再連續定期的監控和空間碎片整理有利於提高I/O性能
使用主數據文件和次要數據文件
每個數據庫的一個主數據文件屬於主文件組對於GB左右規模的數據庫一個數據文件就夠了如果有次要數據文件主數據文件中有管理次要數據文件的指針
采用多個數據文件時主數據文件用於存儲系統對象和表次要數據文件用於存儲用戶數據和索引在可能的情況下主數據文件和次要數據文件可以單獨存放在不同的磁盤上以分散I/O
如果采用多個數據文件推薦主數據文件存儲系統數據次要數據文件存放用戶數據和索引這樣會有助於提高I/O性能
利用文件組改善性能
在大型數據庫系統中可以考慮建立文件組來管理數據文件將表和索引通過存放在不同的物理磁盤上進行性能監控比較最後得出優化的存儲方案
重視自動增長和自動收縮可能導致的性能問題
數據庫文件的自動增長和自動收縮功能對於小型數據庫的管理十分有用但可能導致大型數據庫的性能問題因為文件的自然增長的同時會導致存儲碎片的發生當文件空間變大時新分配的空間不一定和原來的空間連續當文件空間收縮時釋放了部分空間然而當文件又需要增長存儲空間卻不能利用原先釋放的空間也會導致碎片的發生
分離系統數據和用戶數據
將系統數據庫和用戶數據庫分開存放在不同的物理磁盤上有助於改善I/O性能有助於數據庫備份和恢復
優化索引設計
索引的設計對數據庫的性能十分重要具體不再闡述可參見本博相關文章
定期更新統計信息
SQLServer默認使用基於代價的優化所以統計信息的及時更新對於查詢優化十分重要
定期的一致性檢查
定期對數據庫進行一致性檢查確保數據庫的完整性
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22434.html