八 IO優化(5)使用檔案組

2021-09-03 09:48:04 字數 2664 閱讀 1270

一、檔案與檔案組

在同乙個檔案組內部,多個資料檔案起到負載均衡的作用。因此,盡量使每個資料檔案的大小相同,這樣可以優化比例填充的效能。

例如:某檔案組有2個資料檔案,現在批量匯入10mb的資料,結果會使這2個資料檔案分別增加5mb的資料使用空間。

注意:請將同乙個檔案組的多個資料檔案分別放置在不同的物理磁碟上。如果都放在同乙個物理磁碟,由於資料需在多個檔案中訪問,導致磁頭頻繁尋道、定位,反而使效能降低。

二、表和索引分割槽

1.概念

表和索引分割槽是sql server 2008引入的一項新特性。在維護資料集合的完整性時,使用分割槽可以快速而有效地管理和訪問資料子集,從而使大型表或索引更易於管理。通過使用分割槽,將資料從 oltp 載入到 olap 系統之類的操作僅需幾秒鐘即可完成,不像在 sql server 的早期版本那樣需要幾分鐘或幾小時。對資料子集執行的維護操作只針對所需的資料而不是整個表,因此,這些操作的執行效果也會更為有效。

表和區分區的資料劃分為分布於乙個資料庫中多個檔案組的單元。資料是按水平方式分割槽的,因此多組行對映到單個的分割槽。對資料進行查詢或更新時,表或索引將被視為單個邏輯實體。單個索引或表的所有分割槽都必須位於同乙個資料庫中。

已分割槽表和已分割槽索引支援與設計和查詢標準表和索引相關的所有屬性和功能,包括約束、預設值、標識和時間戳值以及觸發器。因此,如果要實現位於伺服器本地的已分割槽檢視,則可能需要改為實現已分割槽表。

決定是否實現分割槽主要取決於表當前的大小或將來的大小、如何使用表以及對錶執行使用者查詢和維護操作的完善程度。

通常,如果某個大型表同時滿足下列兩個條件,則可能適於進行分割槽:

(1)該錶包含(或將包含)以多種不同方式使用的大量資料。

(2)不能按預期對錶執行查詢或更新,或維護開銷超過了預定義的維護期。

2. 分割槽的優勢

例如,如果對當前月份的資料主要執行 insert、update、delete 和 merge 操作,而對以前月份的資料主要執行 select 查詢,則按月份對錶進行分割槽可能會使表的管理工作更容易一些。如果對錶的常規維護操作只針對乙個資料子集,那麼此優點尤為明顯。如果該錶沒有分割槽,那麼就需要對整個資料集執行這些操作,這樣就會消耗大量資源。例如,通過分割槽,可以針對具有只寫資料的單個月份執行類似索引重新生成和碎片整理的維護操作,而唯讀資料仍可用於聯機訪問。

擴充套件一下此示例,假設要將該表中乙個月的唯讀資料移至資料倉儲表中以進行分析。分割槽後,可以快速將資料子集分散到臨時區域中以進行離線維護,然後將這些資料作為分割槽新增到現有的已分割槽表(假定這些表都位於同乙個資料庫例項中)中。類似這樣的操作通常只需幾秒鐘,而不是像未分割槽時那樣需要數分鐘或數小時。

如果根據頻繁執行的查詢的型別和硬體配置正確地設計分割槽,那麼對錶或索引進行分割槽可以提高查詢效能。

3. 實現表和索引分割槽

建立已分割槽表或索引通常包含四個操作:

(1)建立將持有分割槽方案所指定的分割槽的檔案組和相應的檔案。

(2)建立乙個分割槽函式,該函式根據指定列的值將表或索引的各行對映到分割槽。

(3)建立乙個將已分割槽表或已分割槽索引的分割槽對映到新檔案組的分割槽方案。

(4)建立或修改表或索引,並指定分割槽方案作為儲存位置。

三、隔離資料庫物件

在建立表和索引時注意到on引數,該引數指定將表或索引建立到某個檔案組,而該檔案組可以將檔案指定在特定的物理磁碟。例如:

create table [dbo].[emptable](

) on [primary]

create nonclustered index [ix_emptable] on [dbo].[emptable]

( [empid] asc ) on [primary]

在某些實際案例中,有一些表和索引被頻繁訪問,希望將這些表和索引隔離到另乙個物理磁碟以加速訪問的效能。

1. 移動表

如果要將表從乙個檔案組移動到另乙個檔案組,有以下3種方法:

(1) 使用分割槽

如果該錶已經分割槽或者臨時使用分割槽,可以切換分割槽到另乙個物理磁碟。

(2) 重新建立表或索引

在重新建立表或索引時,使用on引數將表或索引建立在指定的檔案組。

(3) 使用聚集索引搬移物理表

聚集索引實際上就是物理上的資料頁面,因此,修改聚集索引也能將物理表搬移到另乙個檔案組。

2. 移動索引

(1)使用表設計器(僅適用於非聚集索引)

(2)修改索引的屬性

(3)使用t-sql

create clustered index [ix_emptable] on [dbo].[emptable]

( [empid] asc )

with (drop_existing = on, online = off, allow_row_locks = on, allow_page_locks = on)

on [secondfg]

通過檔案組並將資料檔案分隔到多個物理磁碟,可以實現表和索引分割槽,或者隔離資料庫的表和索引物件,提公升效能。

八 IO優化(5)使用檔案組

一 檔案與檔案組 在同乙個檔案組內部,多個資料檔案起到負載均衡的作用。因此,盡量使每個資料檔案的大小相同,這樣可以優化比例填充的效能。例如 某檔案組有2個資料檔案,現在批量匯入10mb的資料,結果會使這2個資料檔案分別增加5mb的資料使用空間。注意 請將同乙個檔案組的多個資料檔案分別放置在不同的物理...

檔案IO程式設計八

這一節主要是講標準io 標準io的操作物件是檔案指標,file 而且標準io是有緩衝區的。stdout是行緩衝。這個檔案指標則是由fopen 函式獲取的。標頭檔案 include path 要開啟的檔案。mode r 以唯讀方式開啟檔案,要求檔案必須存在。r 以讀寫方式開啟檔案,要求檔案必須存在。w...

八 IO優化(3)稀疏列

一 nullable 在設計表時,有時會允許某列可以使用null值 預設 create table dbo emptable2 二 稀疏列 稀疏列是對 null 值採用優化的儲存方式的普通列。稀疏列減少了 null 值的空間需求,但代價是檢索非 null 值的開銷增加。當至少能夠節省 20 到 40...