MSSQL優化之 1 1 儲存架構之檔案和檔案組

2022-02-18 13:28:25 字數 1276 閱讀 5381

本篇文章將由粗到細,講解資料庫的物理組成結構。有些東西可能是廢話或是摘抄自bol,等權威文章,但是作為乙個知識體系結構,還是需要囉嗦一下。

資料庫是由一系列的檔案組成,檔案組是檔案的管理單元,類似於命名空間,但很不幸的是微軟沒有在檔案組這個管理單元上賦予更多的權力,比如許可權管理。而資料庫的許可權管理是通過資料庫的架構,賬戶,角色,證書等來控制的。檔案組的最大的好處在於多磁碟環境,或者raid環境下,可以輕鬆來組織管理檔案。比如你可以將幾個檔案建立在幾個不同的磁碟上,而且將幾個檔案分配到相同的檔案組內,然後新建乙個表,指定的儲存是這個檔案組。這樣有什麼好處呢?很明顯的提高io吞吐。因為磁碟多了,多磁碟可以並行取資料,至於磁碟的結構,大家可以參考李戰老師寫的乙個關於磁碟的文章,位址我忘了,大家去可以去看看。(廢話一下,最近公司磁碟壞了一塊,諮詢了一下dell的,他們說現在1w轉的和1w5的價錢差不太多,大家可以考慮考慮)

大家對檔案大小也許會不屑一顧,但是這個是dba人員非常看重的乙個地方。檔案大小的增長方式有按照比例自動增長和按照固定大小自動增長,因此有很多人在生產環境下對於建立資料庫的時候這一選項都不在乎,實際上非常重要。如果開始指定的檔案大小只有100m,那麼當資料庫達到100m的時候,資料庫會向作業系統請求更多的空間,那麼作業系統會怎辦???大家都知道.net裡面的垃圾**器整理堆區,重排堆區以提高程式訪問託管堆的效能,那麼在資料庫也存在同樣的問題。重新向作業系統申請的空間,應該說不大可能跟以前的資料庫檔案空間是連續的,所以導致檔案之間的裂縫。關於裂縫,mssql有很多對付裂縫的方法,將在以後文章會陸續提到。還有就是如果檔案已經很大,再次頻繁增長的時候,因為閂鎖會導致系統響應變慢,甚至響應超時。而更重要的一點是,tempdb檔案的存放問題。tempdb,大家都知道是不會持久化資料的,但是讀寫時非常頻繁的,而且他並不是不使用磁碟空間,全使用記憶體。大家熟悉的排序(配備 sort in tempdb 選項),臨時表,假離線表,連表的中間結果集,等都是存放在tempdb內的,保證磁碟的讀寫速度也是很重要的。(tempdb的效能2005比2000要好很多)所以一般的dba都會將tempdb單獨不與一般的資料檔案存放在乙個磁碟下(道理同上面提到的檔案組管理)。tempdb的大小到底指定多少合適呢???沒有乙個絕對的資料,只有各種環境下的模擬測試。我看過頂尖dba對tempdb大小的限制,一般是使用乙個模擬的高峰期環境,檢視tempdb所能達到的最大大小,然後乘以20%,來決定tempdb大小,當然這個是極端的做法,更多的不太可能這樣做,一般乙個指導性原則就是,如果你的表少,可以小點,如果你的臨時表和排序,游標操作不多,可以少點,如果你不使用快照技術,可以少點。有關tempdb的更多優化細節,可以參看微軟的知識庫文章,tempdb最佳實踐,

我在這裡就不詳述多了。

MSSQL優化之 1 3 儲存架構之 頁

sql server中的頁是最基本的資料單位組成,他有8kb,也就是8192個位元組 mssql7.0以前是乙個頁面2kb 而sql server的乙個頁面,由頁頭,資料行,和slot table組成 行偏移的位置的記錄陣列。頁頭是乙個固定的96位元組的大小,他是乙個頁面的元資料,記載與本頁相關的許...

MSSQL優化之索引優化

1。用count 統計比用count 字段 快。用count 主鍵 速度最快!2。select cid,title,cnt from table where cid 9999999 or riqi 2004 9 16 select cid,title,cnt from table where cid...

mysql之優化 儲存引擎

1.2 myisam 與 innodb 主要區別 1.3 如何選擇mysql的儲存引擎 目前廣泛使用的是myisam和innodb兩種引擎 1.1.1 myisam myisam引擎是mysql 5.1及之前版本的預設引擎,它的特點是 1.1.2 innodb innodb在mysql 5.5後成為...