資料庫是資料的倉庫,用於儲存資料,而儲存資料需要媒介,現在的儲存媒介,最常用的是硬碟,土豪一點的伺服器使用固態硬碟(ssd),特殊用途的伺服器使用記憶體。資料庫最常用的儲存檔案是資料檔案和日誌檔案,資料檔案用於儲存資料,由乙個主資料檔案(.mdf)和若干個輔助資料檔案(.ndf)構成;日誌檔案用於儲存事物日誌,由.ldf檔案構成。不同的檔案可以存分布到不同的物理硬碟上,這樣便於分散硬碟io,提高資料的讀取速度。
資料檔案的組合,稱作檔案組(file group),資料庫不能直接設定儲存資料的資料檔案,而是通過檔案組來指定。
sql server的資料儲存在檔案中,檔案是實際儲存資料的物理實體,檔案組是邏輯物件,sql server通過檔案組來管理檔案。
乙個資料庫有乙個或多個檔案組,主檔案組(primary file group)是系統自動建立的,使用者可以根據需要新增檔案組。每乙個檔案組管理乙個或多個檔案,其中主檔案組中包含主資料檔案(master data file),副檔名是.mdf,這個檔案是系統預設生成的,並且在資料庫中是唯一的;輔助檔案的副檔名是.ndf,是使用者根據需要新增的。主檔案組中也可以包含輔助檔案,除了主檔案組之外,其他檔案組只能包含輔助檔案。
例如,檢視示例資料庫的檔案組,primary 是住檔案組,勾選default表示住檔案組是預設的檔案組,這意味著,如果在create table和create index中沒有指定filegroup選項,那麼sql server將使用預設的檔案組來儲存資料。
檔案組是乙個邏輯實體,實際上,資料儲存在檔案中(.mdf和.ndf)中,每乙個檔案組中都包含檔案,因此,在create table和create index命令中指定檔案組,那麼資料就會儲存到檔案組包含的檔案中。
從上圖中可以看到,資料庫檔案的元資料:
使用者也可以使用sys.database_files和sys.filegroups檢視資料的檔案和檔案組的元資料。
在實際開發資料庫的過程中,通常情況下,使用者需要關注檔案組,而不用關心檔案的物理儲存,即使dba改變檔案的物理儲存,使用者也不會察覺到,也不會影響資料庫去執行查詢。除了邏輯檔案和物理檔案的分離之外,sql server使用檔案組還有乙個優勢,那就是分散io負載,其實現的原理是:
這兩種方式,其本質上,都是使每個硬碟均攤系統負載,提高io效能。
建立分割槽表時,不同的分割槽可以使用相同的檔案組,也可以使用不同的檔案組。因此,在設計檔案組時,應盡量把包含的檔案包含在不同的硬碟上,以實現物理io的最大分散化。
在建立檔案時,伺服器cpu核的數量,決定最大的併發io度,應該根據cpu 核的數量建立多個檔案。通常情況下,檔案的數量和cpu核的數量一致,是最優化的設計。
還有,應該根據硬碟的效能來建立檔案組,日誌檔案儲存到效能最好的硬碟上,而查詢延遲要求高的資料,也需要儲存到效能最好的硬碟上。
不是所有的資料都是同等重要的,應該根據業務需求和查詢延遲,對資料分級,因此,在設計檔案組時,應該把級別高的資料分散,而把那些基本用不到的資料儲存到效能差的,用於儲存歸檔資料的硬碟上,以實現伺服器效能的合理配置。
在建立表時,在on子句中指定檔案組,那麼資料將儲存在該檔案組包含的檔案中:
create在建立索引時,在on子句指定檔案組選項,那麼該錶的索引結構將儲存在檔案組包含的檔案中:table
[dbo
].[student](
...) on[
primary
]
create在建立分割槽時,在to自居中指定檔案組,每乙個分割槽將儲存到檔案組中:nonclustered
index
[idx_student_stuname]on
[dbo
].[student
]( [
stuname
]asc
) on
[primary
]
reate partition scheme scheme_name當資料檔案爆滿,沒有空間儲存資料時,此時執行insert命令,這會導致資料檔案的增長。如果filegrowth選項設定的過大,會導致sql server耗費較長時間來實現檔案的增長,在資料檔案增長時,該檔案是不能訪問的,因此,即使使用者僅插入一條資料,也要等待很長時間才能完成查詢,對使用者來說,體驗不友好。aspartition function_name
to ([
fg_name1
], <....>, [
fp_namen
])
資料檔案增長是非常耗費系統資源和影響效能,如果設定sql server 自動增長,可能會導致系統效能不夠穩定,所以,應該**可能的空間使用需求,並提前做好規劃。盡量避免空間用盡而使得sql server不得不自動增長的現象發生。同時也要確保每一次自動增長都能夠在可接受的時間內完成,及時滿足客戶端應用的需求。
在測試伺服器上,有乙個db無法訪問,原因是伺服器上安裝的是sql server的評估版本,在試用期過期之後,sql server例項無法開啟,導致db無法訪問。該資料,只有mdf和ldf檔案,沒有做資料庫的還原和分離操作,要還原資料庫必須使用特殊的方法:重建乙個名字相同db,然後替換資料庫的檔案。
檔案自動增長和自動收縮sql server
SQL Server 檔案和檔案組
在sql server中,資料庫在硬碟上的儲存方式和普通檔案在windows中的儲存方式沒有什麼不同,僅僅是幾個檔案而已。sql server通過管理邏輯上的檔案組的方式來管理檔案。sql server通過檔案組對資料檔案進行管理。我們看到的邏輯資料庫由乙個或者多個檔案組構成。結構圖如下 檔案組管理...
SQL Server 檔案和檔案組
當資料庫資料過大查詢變慢 空間不夠的時候,我們就需要使用檔案組來擴大資料庫儲存空間,提高查詢效率了。1 檔案和檔案組的含義與關係 每個資料庫有乙個主資料檔案.和若干個從檔案。檔案是資料庫的物理體現。檔案組可以包括分布在多個邏輯分割槽的檔案,實現負載平衡。檔案組允許對檔案進行分組,以便於管理和資料的分...
SQL Server裡的檔案和檔案組
原文 sql server裡的檔案和檔案組 在今天的文章裡,我想談下sql server裡非常重要的話題 sql server如何處理檔案的檔案組。當你用create database命令建立乙個簡單的資料庫時,sql server為你建立2個檔案 資料檔案本身在有且只有乙個主檔案組裡建立。預設情況...