程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2005中的文件和文件組

SQL Server 2005中的文件和文件組

編輯:關於SqlServer


1、文件和文件組的含義與關系

每個數據庫有一個主數據文件.和若干個從文件。文件是數據庫的物理體現。 文件組可以包括分布在多個邏輯分區的文件,實現負載平衡。文件組允許對文件進行分組,以便於管理和數據的分配/放置。例如,可以分別在三個硬盤驅動器上創建三個文件(Data1.ndf、Data2.ndf   和   Data3.ndf),並將這三個文件指派到文件組   fgroup1   中。然後,可以明確地在文件組   fgroup1   上創建一個表。對表中數據的查詢將分散到三個磁盤上,因而性能得以提高。在   RAID(磁盤冗余陣列)條帶集上創建單個文件也可以獲得相同的性能改善。然而,文件和文件組使您得以在新磁盤上輕易地添加新文件。另外,如果數據庫超過單個   Microsoft   Windows 文件的最大大小,則可以使用次要數據文件允許數據庫繼續增長。

2、文件、文件組在實踐應用中常見的問題

通常情況下我們構造的數據庫都只有兩個文件,mdf文件和ldf文件.但是這樣有兩個缺點:

(一)容易導致文件過大

我們知道,mdf文件是數據庫文件,這樣的話也就意味著隨著數據庫的增大mdf就會相應的增大,顯然在現在的應用中數據膨脹是太常見的事情了,當你的應用變大後,mdf文件也會變大,然而windows對文件的大小是有要求的,這樣的話很容易導致mdf文件達到Windows所允許的文件大小的界限(於是數據庫就崩潰了)。

(二)沒有利用到磁盤陣列

大型的服務器好多都有磁盤陣列,你可以把磁盤陣列簡單的假象成n個一塊轉動的磁盤,磁盤陣列的設計是希望通過多個磁盤的串聯來得到更大的讀寫效率.但是如果你的數據庫只有一個mdf文件(ldf文件暫時不考慮),那麼你總是只能夠利用這個磁盤陣列裡面的一個磁盤而已.那樣的話昂貴的磁盤陣列的效率就由並聯變成串聯了.試想如果我們能夠讓mdf分散成多個文件,比如說磁盤陣列上的每個磁盤中都分配一個文件,然後把mdf中的數據分散到各個文件中,我在讀取的時候就是串聯的讀取了,這樣就充分的利用了磁盤陣的存取效能.

這兩個問題平常我們沒有遇到過(條件不具備),但是做大型的服務開發的時候這幾乎是致命的.

3、查詢文件組和文件語句

這在2005下,運行

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官方解釋

了解文件和文件組

每個 SQL Server 數據庫至少具有兩個操作系統文件:一個數據文件和一個日志文件。數據文件包含數據和對象,例如表、索引、存儲過程和視圖。日志文件包含恢復數據庫中的所有事務所需的信息。為了便於分配和管理,可以將數據文件集合起來,放到文件組中。

數據庫文件

SQL Server 數據庫具有三種類型的文件,如下表所示:

文件  說明 

主要  主要數據文件包含數據庫的啟動信息,並指向數據庫中的其他文件。用戶數據和對象可存儲在此文件中,也可以存儲在次要數據文件中。每個數據庫有一個主要數據文件。主要數據文件的建議文件擴展名是 .mdf。
 
次要   次要數據文件是可選的,由用戶定義並存儲用戶數據。通過將每個文件放在不同的磁盤驅動器上,次要文件可用於將數據分散到多個磁盤上。另外,如果數據庫超過了單個 Windows 文件的最大大小,可以使用次要數據文件,這樣數據庫就能繼續增長。

次要數據文件的建議文件擴展名是 .ndf。
 
事務日志

事務日志文件保存用於恢復數據庫的日志信息。每個數據庫必須至少有一個日志文件。事務日志的建議文件擴展名是 .ldf。 

例如,可以創建一個簡單的數據庫 Sales,其中包括一個包含所有數據和對象的主要文件和一個包含事務日志信息的日志文件。也可以創建一個更復雜的數據庫 Orders,其中包括一個主要文件和五個次要文件。數據庫中的數據和對象分散在所有六個文件中,而四個日志文件包含事務日志信息。

默認情況下,數據和事務日志被放在同一個驅動器上的同一個路徑下。這是為處理單磁盤系統而采用的方法。但是,在生產環境中,這可能不是最佳的方法。建議將數據和日志文件放在不同的磁盤上。

文件組

每個數據庫有一個主要文件組。此文件組包含主要數據文件和未放入其他文件組的所有次要文件。可以創建用戶定義的文件組,用於將數據文件集合起來,以便於管理、數據分配和放置。

例如,可以分別在三個磁盤驅動器上創建三個文件 Data1.ndf、Data2.ndf 和 Data3.ndf,然後將它們分配給文件組 fgroup1。然後,可以明確地在文件組 fgroup1 上創建一個表。對表中數據的查詢將分散到三個磁盤上,從而提高了性能。通過使用在 RAID(獨立磁盤冗余陣列)條帶集上創建的單個文件也能獲得同樣的性能提高。但是,文件和文件組使您能夠輕松地在新磁盤上添加新文件。

下表列出了存儲在文件組中的所有數據文件。

文件組     說明 

主要        包含主要文件的文件組。所有系統表都被分配到主要文件組中。

用戶定義  用戶首次創建數據庫或以後修改數據庫時明確創建的任何文件組。

默認文件組

如果在數據庫中創建對象時沒有指定對象所屬的文件組,對象將被分配給默認文件組。不管何時,只能將一個文件組指定為默認文件組。默認文件組中的文件必須足夠大,能夠容納未分配給其他文件組的所有新對象。

PRIMARY 文件組是默認文件組,除非使用 ALTER DATABASE 語句進行了更改。但系統對象和表仍然分配給 PRIMARY 文件組,而不是新的默認文件組。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved