SQL Server 服務(wù)器優(yōu)化技巧淺談
數(shù)據(jù)文件和日志文件的操作會產(chǎn)生大量的I/O。在可能的條件下,日志文件應(yīng)該存放在一個與數(shù)據(jù)和索引所在的數(shù)據(jù)文件不同的硬盤上以分散I/O,同時還有利于數(shù)據(jù)庫的災(zāi)難恢復(fù)。
2.tempdb數(shù)據(jù)庫單獨存放在不同磁盤上
tempdb數(shù)據(jù)庫是其他所有數(shù)據(jù)庫都有可能使用的臨時數(shù)據(jù)庫。當(dāng)使用select into、在沒建立索引的列上執(zhí)行Orderby時就會在tempdb數(shù)據(jù)庫中產(chǎn)生臨時表來存儲中間數(shù)據(jù)。由于建立和填充臨時表會嚴(yán)重降低系統(tǒng)性能,所以在盡可能的情況下應(yīng)該為要排序的列建立索引。同時,tempdb數(shù)據(jù)庫是為所有的用戶和應(yīng)用程序共享,所以如果一個用戶占據(jù)了tempdb數(shù)據(jù)庫的所有空間,則其他數(shù)據(jù)庫將不能再使用。在可能的情況下,tempdb數(shù)據(jù)庫應(yīng)該單獨放置在一個速度更快的硬盤或者RAID陣列上。分離tempdb數(shù)據(jù)庫的I/O操作以加快性能。tempdb數(shù)據(jù)庫應(yīng)該有適當(dāng)?shù)娜萘?,以滿足用戶的需要。應(yīng)該允許tempdb數(shù)據(jù)庫的空間自動增長。如果設(shè)置為不允許自動增長,當(dāng)查詢操作建立了超過tempdb數(shù)據(jù)庫容量的臨時表時,操作將無法完成。
適當(dāng)設(shè)置tempdb數(shù)據(jù)庫的增長幅度,過小的增長幅度會產(chǎn)生更多的外部碎片,會占用更多的資源。
3.避免熱點數(shù)據(jù)的發(fā)生
在SQLServer7.0之前,對于沒有聚集索引的表(堆集表),新插入的數(shù)據(jù)行總是放置在磁盤中表的物理結(jié)尾處。如果并發(fā)的用戶很多,同時在對表執(zhí)行插入或者更新數(shù)據(jù)的操作,這將使得十分繁忙的表的末尾有可能產(chǎn)生數(shù)據(jù)熱點。并發(fā)的I/O操作集中對少數(shù)頁面進(jìn)行操作,將導(dǎo)致數(shù)據(jù)庫性能的下降。
在SQLServer中,新的數(shù)據(jù)行的物理存儲空間的分配是通過PFS頁面來進(jìn)行的。PFS頁面的管理算法將插入操作進(jìn)行分散來盡量避免產(chǎn)生數(shù)據(jù)熱點。
在設(shè)計應(yīng)用系統(tǒng)和數(shù)據(jù)庫時,要避免在自然增長的列上建立主鍵,這樣有可能導(dǎo)致熱點數(shù)據(jù)的發(fā)生。
4.數(shù)據(jù)類型要少
在設(shè)計表時,盡可能少用數(shù)據(jù)類型。這樣一個數(shù)據(jù)頁面上可以保存最多的信息。數(shù)據(jù)頁面就少,檢索數(shù)據(jù)頁面的I/O操作就少,所以效率會高。
5.監(jiān)控和整理空間碎片
文件空間的自動增長提高了自動管理性,但可能導(dǎo)致空間碎片。物理空間與數(shù)據(jù)的邏輯空間不再連續(xù)。定期的監(jiān)控和空間碎片整理有利于提高I/O性能。
6.使用主數(shù)據(jù)文件和次要數(shù)據(jù)文件
每個數(shù)據(jù)庫的一個主數(shù)據(jù)文件屬于主文件組。對于1GB左右規(guī)模的數(shù)據(jù)庫,一個數(shù)據(jù)文件就夠了,如果有次要數(shù)據(jù)文件,主數(shù)據(jù)文件中有管理次要數(shù)據(jù)文件的指針。
采用多個數(shù)據(jù)文件時,主數(shù)據(jù)文件用于存儲系統(tǒng)對象和表,次要數(shù)據(jù)文件用于存儲用戶數(shù)據(jù)和索引。在可能的情況下,主數(shù)據(jù)文件和次要數(shù)據(jù)文件可以單獨存放在不同的磁盤上以分散I/O。
如果采用多個數(shù)據(jù)文件,推薦主數(shù)據(jù)文件存儲系統(tǒng)數(shù)據(jù),次要數(shù)據(jù)文件存放用戶數(shù)據(jù)和索引,這樣會有助于提高I/O性能。
相關(guān)文章
sql 去零函數(shù) datagridview中數(shù)字類型常出現(xiàn)后面的零不能去掉
sql 去零函數(shù) datagridview中數(shù)字類型常出現(xiàn)后面的零不能去掉,此函數(shù)在sql中使用即可2009-06-06SQL Server數(shù)據(jù)庫中批量導(dǎo)入數(shù)據(jù)的四種方法總結(jié)
數(shù)據(jù)導(dǎo)入一直是項目人員比較頭疼的問題。其實,在SQL Server中集成了很多成批導(dǎo)入數(shù)據(jù)的方法,接下來為大家介紹下常用的四種批量導(dǎo)入數(shù)據(jù)的方法,感興趣的各位可以參考下哈2013-03-03sqlserver 2000 遠(yuǎn)程連接 服務(wù)器的解決方案
在連接本地服務(wù)器時,通常使用的是命名管道協(xié)議(在服務(wù)器網(wǎng)絡(luò)實用工具里可以看到啟用的協(xié)議有這個2009-06-06SQLServer創(chuàng)建索引的5種方法小結(jié)
本文主要介紹了SQLServer創(chuàng)建索引的5種方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04SQL實現(xiàn)遞歸及存儲過程中In()參數(shù)傳遞解決方案詳解
這篇文章詳細(xì)介紹了SQL實現(xiàn)遞歸及存儲過程中In()參數(shù)傳遞解決方案,有需要的朋友可以參考一下2013-09-09使用sqlserver存儲過程sp_send_dbmail發(fā)送郵件配置方法(圖文)
這篇文章用圖文的方式介紹了使用sqlserver存儲過程sp_send_dbmail發(fā)送郵件的方法,大家參考使用吧2014-01-01