SQLServer中數(shù)據(jù)庫文件的存放方式,文件和文件組
簡介
在SQL SERVER中,數(shù)據(jù)庫在硬盤上的存儲方式和普通文件在Windows中的存儲方式?jīng)]有什么不同,僅僅是幾個(gè)文件而已.SQL SERVER通過管理邏輯上的文件組的方式來管理文件.理解文件和文件組的概念對于更好的配置數(shù)據(jù)庫來說是最基本的知識。
理解文件和文件組
在SQL SERVER中,通過文件組這個(gè)邏輯對象對存放數(shù)據(jù)的文件進(jìn)行管理.
先來看一張圖:
我們看到的邏輯數(shù)據(jù)庫由一個(gè)或者多個(gè)文件組構(gòu)成
而文件組管理著磁盤上的文件.而文件中存放著SQL SERVER的實(shí)際數(shù)據(jù).
為什么通過文件組來管理文件
對于用戶角度來說,需對創(chuàng)建的對象指定存儲的文件組只有三種數(shù)據(jù)對象:表,索引和大對象(LOB)
使用文件組可以隔離用戶和文件,使得用戶針對文件組來建立表和索引,而不是實(shí)際磁盤中的文件。當(dāng)文件移動(dòng)或修改時(shí),由于用戶建立的表和索引是建立在文件組上的,并不依賴具體文件,這大大加強(qiáng)了可管理性.
還有一點(diǎn)是,使用文件組來管理文件可以使得同一文件組內(nèi)的不同文件分布在不同的硬盤中,極大的提高了IO性能.
SQL SERVER會根據(jù)每個(gè)文件設(shè)置的初始大小和增長量會自動(dòng)分配新加入的空間,假設(shè)在同一文件組中的文件A設(shè)置的大小為文件B的兩倍,新增一個(gè)數(shù)據(jù)占用三頁(Page),則按比例將2頁分配到文件A中,1頁分配到文件B中.
文件的分類
- 首要文件:這個(gè)文件是必須有的,而且只能有一個(gè)。這個(gè)文件額外存放了其他文件的位置等信息.擴(kuò)展名為.mdf
- 次要文件:可以建任意多個(gè),用于不同目的存放.擴(kuò)展名為.ndf
- 日志文件:存放日志,擴(kuò)展名為.ldf
在SQL SERVER 2008之后,還新增了文件流數(shù)據(jù)文件和全文索引文件.
上述幾種文件名擴(kuò)展名可以隨意修改,但是我推薦使用默認(rèn)的擴(kuò)展名。
我們可以通過如下語句查看數(shù)據(jù)庫中的文件情況:
還有一點(diǎn)要注意的是,如果一個(gè)表是存在物理上的多個(gè)文件中時(shí),則表的數(shù)據(jù)頁的組織為N(N為具體的幾個(gè)文件)個(gè)B樹.而不是一個(gè)對象為一個(gè)B樹.
創(chuàng)建和使用文件組
創(chuàng)建文件或是文件組可以通過在SSMS中或者使用T-SQL語句進(jìn)行。對于一個(gè)數(shù)據(jù)庫來說,既可以在創(chuàng)建時(shí)增加文件和文件組,也可以向現(xiàn)有的數(shù)據(jù)庫添加文件和文件組.這幾種方式大同小異.下面來看一下通過SSMS向現(xiàn)有數(shù)據(jù)庫添加文件和文件組.
首先創(chuàng)建文件組:
文件組創(chuàng)建好后就可以向現(xiàn)有文件組中添加文件了:
下面我們就可以通過語句將創(chuàng)建的表或者索引加入到新的文件組中了:
使用多個(gè)文件的優(yōu)點(diǎn)與缺點(diǎn)
通常情況下,小型的數(shù)據(jù)庫并不需要?jiǎng)?chuàng)建多個(gè)文件來分布數(shù)據(jù)。但是隨著數(shù)據(jù)的增長,使用單個(gè)文件的弊端就開始顯現(xiàn)。
首先:使用多個(gè)文件分布數(shù)據(jù)到多個(gè)硬盤中可以極大的提高IO性能.
其次:多個(gè)文件對于數(shù)據(jù)略多的數(shù)據(jù)庫來說,備份和恢復(fù)都會輕松很多.我碰見過遇到一個(gè)150G的數(shù)據(jù)庫,手頭卻沒有這么大的存儲設(shè)備…
但是,在數(shù)據(jù)庫的世界中,每一項(xiàng)好處往往伴隨著一個(gè)壞處:
顯而易見,使用多文件需要占用更多的磁盤空間。這是因?yàn)槊總€(gè)文件中都有自己的一套B樹組織方式,和自己的增長空間。當(dāng)然了,還有一套自己的碎片-.-但是在大多數(shù)情況下,多占點(diǎn)磁盤空間帶來的弊端要遠(yuǎn)遠(yuǎn)小于多文件帶來的好處.
總結(jié)
本文對SQL SERVER中文件和文件組的概念進(jìn)行了簡單闡述,并在文中講述了文件和文件組的配置方式。按照業(yè)務(wù)組織好不同的文件組來分布不同的文件,使得性能的提升,對于你半夜少接幾個(gè)電話的幫助是灰常大滴:-)
相關(guān)文章
獲取SQL Server數(shù)據(jù)庫元數(shù)據(jù)的幾種方法
這篇文章主要介紹了獲取SQL Server數(shù)據(jù)庫元數(shù)據(jù)的幾種方法 ,需要的朋友可以參考下2015-08-08
order by newid() 各種數(shù)據(jù)庫隨機(jī)查詢的方法
order by newid() 各種數(shù)據(jù)庫隨機(jī)查詢的方法,需要的朋友可以參考一下2013-04-04
新手SqlServer數(shù)據(jù)庫dba需要注意的一些小細(xì)節(jié)
這篇文章主要介紹了新手SqlServer數(shù)據(jù)庫dba需要注意的一些小細(xì)節(jié),本文講解了15個(gè)小細(xì)節(jié)、小技巧及需要注意的地方,需要的朋友可以參考下2015-02-02
sqlserver 日志恢復(fù)方法(搞定drop和truncate)
這是一次數(shù)據(jù)恢復(fù)中,我們老大在Sql中敲的,我這里最想記錄的是他優(yōu)良的代碼風(fēng)格.2009-10-10
修改SQL-SERVER數(shù)據(jù)庫表結(jié)構(gòu)的SQL命令附sql命令行修改數(shù)據(jù)庫
本教程給大家介紹修改SQL-SERVER數(shù)據(jù)庫表結(jié)構(gòu)的SQL命令附sql命令行修改數(shù)據(jù)庫,涉及到sqlserver數(shù)據(jù)庫命令的相關(guān)知識,對sqlserver數(shù)據(jù)庫命令感興趣的朋友可以參考下本篇文章2015-10-10
jdbc連接sql server數(shù)據(jù)庫問題分析
SQL Server連接中問題還真多。不進(jìn)行設(shè)置還真連接不上,這里總結(jié)一下,需要的朋友可以參考2012-12-12
SQL Server自動(dòng)生成日期加數(shù)字的序列號
需要生成下面的序列號,前半部分是yyyymmdd格式的年月日時(shí)間數(shù)字,后半部分則是每天都從1順序增長的數(shù)字,位數(shù)要固定,中間不足的補(bǔ)0。2009-08-08

