SQLServer數(shù)據(jù)庫(kù)文件組相關(guān)知識(shí)筆記
1、數(shù)據(jù)庫(kù)文件組概念
數(shù)據(jù)庫(kù)文件被組織在稱為“文件組”的邏輯組中。文件組是所創(chuàng)建對(duì)象(如表或索引)的目標(biāo)容器,對(duì)象數(shù)據(jù)將分散在其所在目標(biāo)文件組的文件中,文件組可以按你要求的方式來(lái)控制對(duì)象的物理位置。
每個(gè)數(shù)據(jù)庫(kù)有一個(gè)主文件組。主文件組包含主要數(shù)據(jù)文件和未放入其他文件組的所有次要文件。用戶可以創(chuàng)建自定義的文件組,用于將數(shù)據(jù)文件集合起來(lái),這樣以便于后續(xù)管理、數(shù)據(jù)分配和放置。
2、文件組的工作機(jī)制
文件組對(duì)組內(nèi)的所有文件都使用按比例填充策略。將數(shù)據(jù)寫入文件組時(shí),數(shù)據(jù)庫(kù)引擎會(huì)根據(jù)文件中的可用空間量將一定比例的數(shù)據(jù)寫入文件組中的每個(gè)文件,而不是將所有數(shù)據(jù)先寫滿第一個(gè)文件,然后再寫入下一個(gè)文件。例如,如果文件file1有100MB可用空間,文件file2有200 MB可用空間,則從文件f1中分配一個(gè)區(qū),從文件f2中分配兩個(gè)區(qū),依次類推。這樣,兩個(gè)文件幾乎同時(shí)填滿。
如果數(shù)據(jù)庫(kù)設(shè)置為自動(dòng)增長(zhǎng),文件組中的所有文件一滿,數(shù)據(jù)庫(kù)引擎就自動(dòng)按照循環(huán)方式一次擴(kuò)展一個(gè)文件,以容納更多數(shù)據(jù)。
3、數(shù)據(jù)庫(kù)文件組的作用
改善數(shù)據(jù)庫(kù)的性能:允許跨多個(gè)磁盤、多個(gè)磁盤控制器或RAID (獨(dú)立磁盤冗余陣列)系統(tǒng)創(chuàng)建數(shù)據(jù)庫(kù)。當(dāng)對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)時(shí),多個(gè)讀/寫磁頭可以同時(shí)并行地訪問(wèn)數(shù)據(jù)。從而加快數(shù)據(jù)庫(kù)操作的速度。
可以在特定的文件組中創(chuàng)建表:根據(jù)業(yè)務(wù)的需要,可以將特定表的所有I/O都定向到一個(gè)特定的磁盤。從而提高數(shù)據(jù)庫(kù)的性能。
4、數(shù)據(jù)庫(kù)文件組的設(shè)計(jì)原則
- 一個(gè)數(shù)據(jù)庫(kù)文件或文件組不能由多個(gè)數(shù)據(jù)庫(kù)使用。
- 一個(gè)數(shù)據(jù)庫(kù)文件只能屬于一個(gè)文件組。
- 數(shù)據(jù)和事務(wù)日志信息不能放在同一個(gè)文件或文件組。
- 事務(wù)日志文件不能屬于任何文件組。
5、數(shù)據(jù)庫(kù)文件組的使用建議
- 一般情況下數(shù)據(jù)庫(kù)在只有單個(gè)數(shù)據(jù)文件和單個(gè)事務(wù)日志文件的情況下性能良好。
- 如果使用多個(gè)數(shù)據(jù)庫(kù)文件的話,應(yīng)該為附加的數(shù)據(jù)庫(kù)文件創(chuàng)建第二個(gè)文件組,并將其設(shè)置為默認(rèn)文件組。這樣,主文件將只包含系統(tǒng)表和對(duì)象。
- 要使性能最大化,需要盡可能多的不同的可用本地物理磁盤上創(chuàng)建文件或文件組。將爭(zhēng)奪磁盤空間最激烈的對(duì)象放在不同的文件組中
- 使用文件組將對(duì)象放置在特定的物理磁盤上。
- 將在同一鏈接查詢中使用的不同表置于不同的文件組中。由于采用并行磁盤I/O對(duì)連接數(shù)據(jù)進(jìn)行搜索,可以改善數(shù)據(jù)庫(kù)性能。
- 將最常訪問(wèn)的表和屬于這些表的非聚集索引置于不同的文件組中。如果文件位于不同的物理磁盤上,由于采用并行I/O,可以改善數(shù)據(jù)庫(kù)性能。
- 不要將事務(wù)日志文件置于其中已有其他文件和文件組的物理磁盤上。