1、文件和文件組的含義與關(guān)系
每個(gè)數(shù)據(jù)庫(kù)有一個(gè)主數(shù)據(jù)文件.和若干個(gè)從文件。文件是數(shù)據(jù)庫(kù)的物理體現(xiàn)。 文件組可以包括分布在多個(gè)邏輯分區(qū)的文件,實(shí)現(xiàn)負(fù)載平衡。文件組允許對(duì)文件進(jìn)行分組,以便于管理和數(shù)據(jù)的分配/放置。例如,可以分別在三個(gè)硬盤驅(qū)動(dòng)器上創(chuàng)建三個(gè)文件(Data1.ndf、Data2.ndf 和 Data3.ndf),并將這三個(gè)文件指派到文件組 fgroup1 中。然后,可以明確地在文件組 fgroup1 上創(chuàng)建一個(gè)表。對(duì)表中數(shù)據(jù)的查詢將分散到三個(gè)磁盤上,因而性能得以提高。在 RAID(磁盤冗余陣列)條帶集上創(chuàng)建單個(gè)文件也可以獲得相同的性能改善。然而,文件和文件組使您得以在新磁盤上輕易地添加新文件。另外,如果數(shù)據(jù)庫(kù)超過(guò)單個(gè) Microsoft Windows 文件的最大大小,則可以使用次要數(shù)據(jù)文件允許數(shù)據(jù)庫(kù)繼續(xù)增長(zhǎng)。
2、文件、文件組在實(shí)踐應(yīng)用中常見(jiàn)的問(wèn)題
通常情況下我們構(gòu)造的數(shù)據(jù)庫(kù)都只有兩個(gè)文件,mdf文件和ldf文件.但是這樣有兩個(gè)缺點(diǎn):
(一)容易導(dǎo)致文件過(guò)大
我們知道,mdf文件是數(shù)據(jù)庫(kù)文件,這樣的話也就意味著隨著數(shù)據(jù)庫(kù)的增大mdf就會(huì)相應(yīng)的增大,顯然在現(xiàn)在的應(yīng)用中數(shù)據(jù)膨脹是太常見(jiàn)的事情了,當(dāng)你的應(yīng)用變大后,mdf文件也會(huì)變大,然而windows對(duì)文件的大小是有要求的,這樣的話很容易導(dǎo)致mdf文件達(dá)到windows所允許的文件大小的界限(于是數(shù)據(jù)庫(kù)就崩潰了)。
(二)沒(méi)有利用到磁盤陣列
大型的服務(wù)器好多都有磁盤陣列,你可以把磁盤陣列簡(jiǎn)單的假象成n個(gè)一塊轉(zhuǎn)動(dòng)的磁盤,磁盤陣列的設(shè)計(jì)是希望通過(guò)多個(gè)磁盤的串聯(lián)來(lái)得到更大的讀寫(xiě)效率.但是如果你的數(shù)據(jù)庫(kù)只有一個(gè)mdf文件(ldf文件暫時(shí)不考慮),那么你總是只能夠利用這個(gè)磁盤陣列里面的一個(gè)磁盤而已.那樣的話昂貴的磁盤陣列的效率就由并聯(lián)變成串聯(lián)了.試想如果我們能夠讓mdf分散成多個(gè)文件,比如說(shuō)磁盤陣列上的每個(gè)磁盤中都分配一個(gè)文件,然后把mdf中的數(shù)據(jù)分散到各個(gè)文件中,我在讀取的時(shí)候就是串聯(lián)的讀取了,這樣就充分的利用了磁盤陣的存取效能.
這兩個(gè)問(wèn)題平常我們沒(méi)有遇到過(guò)(條件不具備),但是做大型的服務(wù)開(kāi)發(fā)的時(shí)候這幾乎是致命的.
3、查詢文件組和文件語(yǔ)句
這在2005下,運(yùn)行
SELECT df.[name], df.physical_name, df.[size], df.growth, f.[name][filegroup], f.is_default FROM sys.database_files df JOIN sys.filegroups f ON df.data_space_id = f.data_space_id
4、MSDN官方解釋
了解文件和文件組每個(gè) SQL Server 數(shù)據(jù)庫(kù)至少具有兩個(gè)操作系統(tǒng)文件:一個(gè)數(shù)據(jù)文件和一個(gè)日志文件。數(shù)據(jù)文件包含數(shù)據(jù)和對(duì)象,例如表、索引、存儲(chǔ)過(guò)程和視圖。日志文件包含恢復(fù)數(shù)據(jù)庫(kù)中的所有事務(wù)所需的信息。為了便于分配和管理,可以將數(shù)據(jù)文件集合起來(lái),放到文件組中。
SQL Server 數(shù)據(jù)庫(kù)具有三種類型的文件,如下表所示:
文件 | 說(shuō)明 |
---|---|
主要 |
主要數(shù)據(jù)文件包含數(shù)據(jù)庫(kù)的啟動(dòng)信息,并指向數(shù)據(jù)庫(kù)中的其他文件。用戶數(shù)據(jù)和對(duì)象可存儲(chǔ)在此文件中,也可以存儲(chǔ)在次要數(shù)據(jù)文件中。每個(gè)數(shù)據(jù)庫(kù)有一個(gè)主要數(shù)據(jù)文件。主要數(shù)據(jù)文件的建議文件擴(kuò)展名是 .mdf。 |
次要 |
次要數(shù)據(jù)文件是可選的,由用戶定義并存儲(chǔ)用戶數(shù)據(jù)。通過(guò)將每個(gè)文件放在不同的磁盤驅(qū)動(dòng)器上,次要文件可用于將數(shù)據(jù)分散到多個(gè)磁盤上。另外,如果數(shù)據(jù)庫(kù)超過(guò)了單個(gè) Windows 文件的最大大小,可以使用次要數(shù)據(jù)文件,這樣數(shù)據(jù)庫(kù)就能繼續(xù)增長(zhǎng)。 次要數(shù)據(jù)文件的建議文件擴(kuò)展名是 .ndf。 |
事務(wù)日志 |
事務(wù)日志文件保存用于恢復(fù)數(shù)據(jù)庫(kù)的日志信息。每個(gè)數(shù)據(jù)庫(kù)必須至少有一個(gè)日志文件。事務(wù)日志的建議文件擴(kuò)展名是 .ldf。 |
例如,可以創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù) Sales,其中包括一個(gè)包含所有數(shù)據(jù)和對(duì)象的主要文件和一個(gè)包含事務(wù)日志信息的日志文件。也可以創(chuàng)建一個(gè)更復(fù)雜的數(shù)據(jù)庫(kù) Orders,其中包括一個(gè)主要文件和五個(gè)次要文件。數(shù)據(jù)庫(kù)中的數(shù)據(jù)和對(duì)象分散在所有六個(gè)文件中,而四個(gè)日志文件包含事務(wù)日志信息。
默認(rèn)情況下,數(shù)據(jù)和事務(wù)日志被放在同一個(gè)驅(qū)動(dòng)器上的同一個(gè)路徑下。這是為處理單磁盤系統(tǒng)而采用的方法。但是,在生產(chǎn)環(huán)境中,這可能不是最佳的方法。建議將數(shù)據(jù)和日志文件放在不同的磁盤上。
每個(gè)數(shù)據(jù)庫(kù)有一個(gè)主要文件組。此文件組包含主要數(shù)據(jù)文件和未放入其他文件組的所有次要文件??梢詣?chuàng)建用戶定義的文件組,用于將數(shù)據(jù)文件集合起來(lái),以便于管理、數(shù)據(jù)分配和放置。
例如,可以分別在三個(gè)磁盤驅(qū)動(dòng)器上創(chuàng)建三個(gè)文件 Data1.ndf、Data2.ndf 和 Data3.ndf,然后將它們分配給文件組 fgroup1。然后,可以明確地在文件組 fgroup1 上創(chuàng)建一個(gè)表。對(duì)表中數(shù)據(jù)的查詢將分散到三個(gè)磁盤上,從而提高了性能。通過(guò)使用在 RAID(獨(dú)立磁盤冗余陣列)條帶集上創(chuàng)建的單個(gè)文件也能獲得同樣的性能提高。但是,文件和文件組使您能夠輕松地在新磁盤上添加新文件。
下表列出了存儲(chǔ)在文件組中的所有數(shù)據(jù)文件。
文件組 | 說(shuō)明 |
---|---|
主要 |
包含主要文件的文件組。所有系統(tǒng)表都被分配到主要文件組中。 |
用戶定義 |
用戶首次創(chuàng)建數(shù)據(jù)庫(kù)或以后修改數(shù)據(jù)庫(kù)時(shí)明確創(chuàng)建的任何文件組。 |
如果在數(shù)據(jù)庫(kù)中創(chuàng)建對(duì)象時(shí)沒(méi)有指定對(duì)象所屬的文件組,對(duì)象將被分配給默認(rèn)文件組。不管何時(shí),只能將一個(gè)文件組指定為默認(rèn)文件組。默認(rèn)文件組中的文件必須足夠大,能夠容納未分配給其他文件組的所有新對(duì)象。
PRIMARY 文件組是默認(rèn)文件組,除非使用 ALTER DATABASE 語(yǔ)句進(jìn)行了更改。但系統(tǒng)對(duì)象和表仍然分配給 PRIMARY 文件組,而不是新的默認(rèn)文件組。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com