寫在前面:上次我關於索引的文章有幾個園友發站內信問我如何將索引和表格儲存體在不同的硬碟上。我覺的需要專門寫一篇文章來講述一下檔案和檔案組應該更容易理解.
簡介
在SQL SERVER中,資料庫在硬碟上的儲存方式和普通檔案在Windows中的儲存方式沒有什麼不同,僅僅是幾個檔案而已.SQL SERVER通過管理邏輯上的檔案組的方式來管理檔案.理解檔案和檔案組的概念對於更好的設定資料庫來說是最基本的知識。
理解檔案和檔案組
在SQL SERVER中,通過檔案組這個邏輯對象對存放資料的檔案進行管理.
先來看一張圖:
我們看到的邏輯資料庫由一個或者多個檔案組構成
而檔案組管理著磁碟上的檔案.而檔案中存放著SQL SERVER的實際資料.
為什麼通過檔案組來管理檔案
對於使用者角度來說,需對建立的對象指定儲存的檔案組只有三種資料對象:表,索引和大對象(LOB)
使用檔案組可以隔離使用者和檔案,使得使用者針對檔案組來建立表和索引,而不是實際磁碟中的檔案。當檔案移動或修改時,由於使用者建立的表和索引是建立在檔案組上的,並不依賴具體檔案,這大大加強了可管理性.
還有一點是,使用檔案組來管理檔案可以使得同一檔案組內的不同檔案分布在不同的硬碟中,極大的提高了IO效能.
SQL SERVER會根據每個檔案設定的初始大小和增長量會自動分配新加入的空間,假設在同一檔案組中的檔案A設定的大小為檔案B的兩倍,新增一個資料佔用三頁(Page),則按比例將2頁分配到檔案A中,1頁分配到檔案B中.
檔案的分類
- 首要檔案:這個檔案是必須有的,而且只能有一個。這個檔案額外存放了其他檔案的位置等資訊.副檔名為.mdf
- 次要檔案:可以建任意多個,用於不同目的存放.副檔名為.ndf
- 記錄檔:存放日誌,副檔名為.ldf
在SQL SERVER 2008之後,還新增了檔案流資料檔案和全文索引檔案.
上述幾種檔案名稱副檔名可以隨意修改,但是我推薦使用預設的副檔名。
我們可以通過如下語句查看資料庫中的檔案情況:
還有一點要注意的是,如果一個表是存在物理上的多個檔案中時,則表的資料頁的組織為N(N為具體的幾個檔案)個B樹.而不是一個對象為一個B樹.
建立和使用檔案組
建立檔案或是檔案組可以通過在SSMS中或者使用T-SQL語句進行。對於一個資料庫來說,既可以在建立時增加檔案和檔案組,也可以向現有的資料庫添加檔案和檔案組.這幾種方式大同小異.下面來看一下通過SSMS向現有資料庫添加檔案和檔案組.
首先建立檔案組:
檔案組建立好後就可以向現有檔案組中添加檔案了:
下面我們就可以通過語句將建立的表或者索引加入到新的檔案組中了:
使用多個檔案的優點與缺點
通常情況下,小型的資料庫並不需要建立多個檔案來分布資料。但是隨著資料的增長,使用單個檔案的弊端就開始顯現。
首先:使用多個檔案分布資料到多個硬碟中可以極大的提高IO效能.
其次:多個檔案對於資料略多的資料庫來說,備份和恢複都會輕鬆很多.我碰見過遇到一個150G的資料庫,手頭卻沒有這麼大的存放裝置…
但是,在資料庫的世界中,每一項好處往往伴隨著一個壞處:
顯而易見,使用多檔案需要佔用更多的磁碟空間。這是因為每個檔案中都有自己的一套B樹組織方式,和自己的增長空間。當然了,還有一套自己的片段-.-但是在大多數情況下,多佔點磁碟空間帶來的弊端要遠遠小於多檔案帶來的好處.
總結
本文對SQL SERVER中檔案和檔案組的概念進行了簡單闡述,並在文中講述了檔案和檔案組的配置方式。按照業務組織好不同的檔案組來分布不同的檔案,使得效能的提升,對於你半夜少接幾個電話的協助是灰常大滴:-)