分割槽表介紹

2022-01-10 09:09:24 字數 4156 閱讀 3991

通常情況下,我們建立的表都是未分割槽的表,或者說,只有乙個分割槽的表,資料只能儲存在乙個檔案組(file group)中,預設情況下,表資料儲存在primary檔案組。對錶進行分割槽後,每乙個分割槽都獨立儲存在檔案組(file group)中。把錶分割槽,實際上是把邏輯上完整的表,按照特定的字段拆分成多個分割槽,每個分割槽分配到(相同或不同的)filegroup中,每乙個分割槽在檔案組中都是獨立儲存,即使多個分割槽分配到相同的檔案組中。

為什麼要對資料表(table)分割槽?這是因為分割槽(partition)之間是物理上獨立儲存的,對單個分割槽進行操作,不會影響其他分割槽,這能提高查詢效能,避免死鎖;而分割槽切換甚至能夠不移動資料,而刪除海量資料。

一,建立分割槽表

在建立表時,使用on 子句指定儲存的邏輯位置:

create table  [schema_name . ]table_name 

( >)

[on ]

分割槽是表的邏輯儲存空間,而分割槽的物理儲存空間是由filegroup指定的,filegroup是file的集合,每乙個file都屬於唯一的filegroup。把錶的儲存空間分割到不同的filegroup中,邏輯上是將table的儲存管理體系增加了一層 partition,介於table和filegroup中間,table的資料儲存在partition,partition儲存在filegroup中,filegroup管理著file,file是實際儲存data的物理檔案。

二:建立分割槽表的步驟

step1, 建立分割槽函式

分割槽函式的作用是提供分割槽欄位的型別和分割槽的邊界值

create partition function

[pf_int

](int

) as range left

forvalues (10, 20)

pf_int 的含義是按照int型別分割槽,分割槽的邊界值是10,20,left表示邊界值屬於左邊界。兩個邊界值能夠分成三個分割槽,別是(-infinite,10],(10,20],(20,+infinite)。

step2,建立分割槽scheme

分割槽scheme的作用是為parition分配filegroup,partition scheme和filegroup在邏輯上等價,都是資料儲存的邏輯空間,只不過partition scheme指定的是多個filegroup。

create partition scheme [

ps_int

]as partition [

pf_int

]to ([

primary

], [

db_fg1

], [

db_fg1

])

不管是在不同的filegroup中,還是在相同的filegroup中,分割槽都是獨立儲存的。

step3,建立分割槽表

建立分割槽表,實際上是使用on子句指定table儲存的邏輯位置。

create

table

dbo.dt_test

( id

int,

code

int)on[

ps_int

] (id)

二,檢視分割槽表的元資料分割槽表的元資料是指分割槽函式,分割槽scheme,分割槽邊界值,分割槽對應的檔案組,這些元資料都能從sql server提供的系統檢視中檢視。

1,檢視分割槽函式

使用系統檢視:sys.partition_functions 檢視當前資料庫中建立的分割槽函式,使用sys.partition_range_values 檢視每個分割槽的邊界值,使用sys.partition_parameters檢視分割槽函式的引數,分割槽函式的引數是分割槽表的分割槽列,分割槽列是什麼不重要,重要的是分割槽列的資料型別,如下圖,分割槽函式的id是65536,引數的系統型別system_type_id是56:

從sys.types檢視對應的資料型別,型別名稱是int,這說明分割槽列的資料型別必須是int:

2,檢視分割槽架構(scheme)

使用系統檢視:sys.partition_schemes 檢視分割槽函式對應的分割槽schema,

分割槽架構和檔案組統稱為資料空間(data space),data_space_id 是資料空間的id,每乙個parition scheme都有乙個唯一的id,每乙個檔案組都有乙個唯一的資料空間id。

從sys.filegroups中檢視檔案組的資料空間id:

從系統檢視:sys.data_spaces 檢視資料庫中的資料空間,可以看到 sys.data_spaces 是sys.filegroups 和 sys.partition_schemes 結果的並集,這說明,partition scheme和filegroup都是資料儲存的邏輯空間。

3,用於儲存分割槽的檔案組

乙個partition scheme能夠使用多個filegroup儲存資料,同時乙個filegroup可以被多個partition scheme使用,partition scheme和filegroup 之間的關係是many-to-many,sql server使用 sys.destination_data_spaces 顯示partition scheme和filegroup 之間的關係。

該檢視只有三列,顯示分割槽,檔案組和分割槽架構之間的對映:

4,檢視分割槽的資訊

通過sys.partitions 檢視每個索引的分割槽資訊,如果 index=0,表示資料表是乙個堆表;如果index=1,表示資料表上建立了聚集索引。rows:分割槽包含的資料行數目。data_compression和data_compression_desc 用於表示分割槽使用的資料壓縮型別。

5,檢視分割槽的統計資訊

使用 sys.dm_db_partition_stats 檢視分割槽的統計資料

三,檢視資料表使用的資料空間

系統檢視:sys.indexes 包含乙個字段 data_space_id,用於指定村粗索引資料的資料空間(data space),資料空間是乙個檔案組或分割槽架構(partition scheme)。兩個特殊的index_id,如果index_id=0,表明資料表是乙個堆表;如果index_id=1,表明資料表上已經建立聚集索引。資料表上的index_id要麼存在1,要麼是0,不可能同時存在,實際上,index_id=0 或1, 是資料表本身,而資料表本身要麼沒有建立聚集索引(堆表結構),要麼建立聚集索引(b-tree結構)。

select object_schema_name(t.object_id) +'.

'+ t.name as

table_name

,ds.name

asdata_space

,ds.data_space_id

,ds.type_desc

asdata_space_type

,ds.type

from

sys.indexes i

inner

join

sys.tables t

on i.object_id

=t.object_id

and t.type='u

'inner

join

sys.data_spaces ds

on i.data_space_id=

ds.data_space_id

where i.index_id<=

1

sys.data_spaces (transact-sql)

Greenplum 分割槽表介紹

greenplum 分割槽表 greenplum分割槽表的原理和postgresql的原理相同,都是把一張大表進行按照適合的維度進行分割,通過表的繼承,規則,約束實現的。在greenplum中,乙個表是否分割槽表儲存在pg partition中.gp在建表的時候會有乙個distributed by選...

把非分割槽表改為分割槽表

把非分割槽表改為分割槽表 說明 把非分割槽表改為分割槽表適用於歷史表 1 建立分割槽表 結構和非分割槽表tbl stock balance log相同 createtabletbl stock balance log part1 account id varchar2 20 byte occur d...

Mysql分割槽表 介紹和使用

你有一張表,儲存引擎為innodb,裡面儲存的資料量達到了上億級別。此時,因為資料量巨大,肯定不能在每次查詢的時候都掃瞄全表。就算是使用索引 b tree 除非使用索引覆蓋查詢,否則資料庫伺服器需要根據查詢的結果回表,查詢所有符合條件的資料,如果資料量巨大,會產生大量的隨機io,最終使得應用程式僵死...