1.數據和日誌文件分開存放在不一樣磁盤上服務器
數據文件和日誌文件的操做會產生大量的I/O。在可能的條件下,日誌文件應該存放在一個與數據和索引所在的數據文件不一樣的硬盤上以分散I/O,同時還有利於數據庫的災難恢復。併發
2.tempdb數據庫單獨存放在不一樣磁盤上post
tempdb數據庫是其餘全部數據庫都有可能使用的臨時數據庫。當使用select into、在沒創建索引的列上執行Orderby時就會在tempdb數據庫中產生臨時表來存儲中間數據。因爲創建和填充臨時表會嚴重下降系統性能,因此在儘量的狀況下應該爲要排序的列創建索引。同時,tempdb數據庫是爲全部的用戶和應用程序共享,因此若是一個用戶佔據了tempdb數據庫的全部空間,則其餘數據庫將不能再使用。在可能的狀況下,tempdb數據庫應該單獨放置在一個速度更快的硬盤或者RAID陣列上。分離tempdb數據庫的I/O操做以加快性能。tempdb數據庫應該有適當的容量,以知足用戶的須要。應該容許tempdb數據庫的空間自動增加。若是設置爲不容許自動增加,當查詢操做創建了超過tempdb數據庫容量的臨時表時,操做將沒法完成。性能
適當設置tempdb數據庫的增加幅度,太小的增加幅度會產生更多的外部碎片,會佔用更多的資源。優化
3.避免熱點數據的發生設計
在SQLServer7.0以前,對於沒有彙集索引的表(堆集表),新插入的數據行老是放置在磁盤中表的物理結尾處。若是併發的用戶不少,同時在對錶執行插入或者更新數據的操做,這將使得十分繁忙的表的末尾有可能產生數據熱點。併發的I/O操做集中對少數頁面進行操做,將致使數據庫性能的降低。指針
在SQLServer中,新的數據行的物理存儲空間的分配是經過PFS頁面來進行的。PFS頁面的管理算法將插入操做進行分散來儘可能避免產生數據熱點。日誌
在設計應用系統和數據庫時,要避免在天然增加的列上創建主鍵,這樣有可能致使熱點數據的發生。
4.數據類型要少
在設計表時,儘量少用數據類型。這樣一個數據頁面上能夠保存最多的信息。數據頁面就少,檢索數據頁面的I/O操做就少,因此效率會高。
5.監控和整理空間碎片
文件空間的自動增加提升了自動管理性,但可能致使空間碎片。物理空間與數據的邏輯空間再也不連續。按期的監控和空間碎片整理有利於提升I/O性能。
6.使用主數據文件和次要數據文件
每一個數據庫的一個主數據文件屬於主文件組。對於1GB左右規模的數據庫,一個數據文件就夠了,若是有次要數據文件,主數據文件中有管理次要數據文件的指針。
採用多個數據文件時,主數據文件用於存儲系統對象和表,次要數據文件用於存儲用戶數據和索引。在可能的狀況下,主數據文件和次要數據文件能夠單獨存放在不一樣的磁盤上以分散I/O。
若是採用多個數據文件,推薦主數據文件存儲系統數據,次要數據文件存放用戶數據和索引,這樣會有助於提升I/O性能。
7.利用文件組改善性能
在大型數據庫系統中,能夠考慮創建文件組來管理數據文件。將表和索引經過存放在不一樣的物理磁盤上進行性能監控比較,最後得出優化的存儲方案。
8.重視自動增加和自動收縮可能致使的性能問題
數據庫文件的自動增加和自動收縮功能對於小型數據庫的管理十分有用。但可能致使大型數據庫的性能問題。由於文件的天然增加的同時會致使存儲碎片的發生。當文件空間變大時,新分配的空間不必定和原來的空間連續。當文件空間收縮時,釋放了部分空間。然而當文件又須要增加存儲空間卻不能利用原先釋放的空間,也會致使碎片的發生。
9.分離系統數據和用戶數據
將系統數據庫和用戶數據庫分開存放在不一樣的物理磁盤上有助於改善I/O性能,有助於數據庫備份和恢復。
10.優化索引設計
索引的設計對數據庫的性能十分重要。具體再也不闡述,可參見本博相關文章。
11.按期更新統計信息
SQLServer默認使用基於代價的優化,因此統計信息的及時更新對於查詢優化十分重要。
12.按期的一致性檢查
按期對數據庫進行一致性檢查,確保數據庫的完整性。