一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

SqlServer 性能優(yōu)化——Partition(創(chuàng)建分區(qū))

和壓縮(Compression)相比,數(shù)據(jù)庫分區(qū)(Partition)的操作更為復(fù)雜繁瑣。而且與Compression一次操作,終身保持不同,分區(qū)是一項需要長期維護(hù)周期變更的操作。

分區(qū)的意義在于將大數(shù)據(jù)從物理上切割為幾個相互獨立的小部分,從而在查詢時只取出其中一個或幾個分區(qū),減少影響的數(shù)據(jù);另外對于置于不同文件組的分區(qū),并行查詢的性能也要高于對整個表的查詢性能。

事實上,在SQL Server 2005中就已經(jīng)包含了分區(qū)功能,甚至在2005之前,還存在一個叫做“Partitioned Views”的功能,能通過將同樣結(jié)構(gòu)的表Union在一個View中,實現(xiàn)類似現(xiàn)在分區(qū)表的效果。而在SQL Server 2008中,分區(qū)功能得到了顯著加強,使得我們不僅能夠?qū)Ρ砗退饕龇謪^(qū),而且允許對分區(qū)上鎖,而不是之前的全表上鎖。

指定分區(qū)列

和Compression一樣,在SQL Server 2008中也提供了分區(qū)的向?qū)Ы缑妗T谄髽I(yè)管理器中,需要分區(qū)的表上右鍵選擇Storage-》Create Partition:

SqlServer性能優(yōu)化——Partition(創(chuàng)建分區(qū))

 

這里會列出該表所有的字段,包括字段類型、長度、精度及小數(shù)位數(shù)的信息,可以選擇其中的任意一一列作為分區(qū)列(Patitioning Column),不僅僅是數(shù)字或者日期類型,即使是字符串類型的列,也可以按照字母順序進(jìn)行分區(qū)。而以下類型的列不可用于分區(qū):text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、別名、hierarchyid、空間索引或 CLR 用戶定義的數(shù)據(jù)類型。此外,如果使用計算列作為分區(qū)列,則必須將該列設(shè)為持久化列(Persisit)。

在列表下方,提供了兩個選項:

  1. 分配到可用分區(qū)表
    這要求在同一數(shù)據(jù)庫下有另一張已分好區(qū)的表,同時該表的分區(qū)列和當(dāng)前選中的列的類型完全一致。
    這樣的好處是當(dāng)兩張表在查詢中有關(guān)聯(lián)時,并且其關(guān)聯(lián)列就是分區(qū)列時,使用同樣的分區(qū)策略會更有效率。
  2. 將非唯一索引和唯一索引的存儲空間調(diào)整為與索引分區(qū)列一致
    這樣會將表中的所有索引也一同分區(qū),實現(xiàn)“對齊”。這是一個重要而麻煩的選項,具體需求請參閱MSDN(已分區(qū)索引的特殊指導(dǎo)原則)。
    這樣的好處是表和索引的分區(qū)一致,一方面查詢時利用索引更為高效,而且在下文提到的移入移出分區(qū)也會更為高效。

注意:這里建議使用聚集索引列作為分區(qū)列。一方面索引結(jié)構(gòu)本身就應(yīng)與查詢相關(guān),那么分區(qū)列與索引一致會保證查詢的最大效率;另一方面,保證索引對齊而且是聚集索引對齊是保證分區(qū)的移入移出操作順暢的前提,否則可能會出現(xiàn)無法移入移出的情況,而分區(qū)的移入移出又是管理大數(shù)據(jù)的重要策略——滑動窗口(SlideWindow)策略的基礎(chǔ)操作。

分區(qū)函數(shù)與分區(qū)方案

選好分區(qū)列后,如果沒有應(yīng)用“分配到可用分區(qū)表”選項,接下來則會進(jìn)入選擇/創(chuàng)建分區(qū)函數(shù)以及分區(qū)方案的界面。其中分區(qū)函數(shù)會指定分區(qū)邊界,而分區(qū)方案則規(guī)劃了每個分區(qū)所存儲的文件組。

向?qū)Р僮鹘缑嫒缦拢?/p>

SqlServer性能優(yōu)化——Partition(創(chuàng)建分區(qū))

其中Left boundary說明每個分區(qū)的邊界值被包含在邊界值左側(cè)的分區(qū)中,也就是每個分區(qū)內(nèi)的數(shù)據(jù)約束是<=指定的邊界值,相應(yīng)的,Right boundary則說明每個分區(qū)的邊界值被包含在邊界值右側(cè)的分區(qū)中,每個分區(qū)內(nèi)的數(shù)據(jù)約束是<指定的邊界值

在下方的列表中,列出了當(dāng)前分區(qū)方案下現(xiàn)有的分區(qū)。其中文件組(Filegroup)指定了每個分區(qū)存放的位置,如果將分區(qū)放置于位于不同磁盤中的不同文件組中,由于不同磁盤的讀寫互不干擾,這將提高分區(qū)表并行處理的效率。一般情況下,將所有分區(qū)放置在同一個文件組是比較穩(wěn)妥的做法。關(guān)于文件組的展開閱讀可以參閱:SQL Server Filegroups。

注意,在這里最后一個分區(qū)是沒有指定邊界的,用于保存所有>(Left Boundary)或>=(Right boundary)最后一個分區(qū)邊界的數(shù)據(jù)。

如果選擇時間類型的字段作為分區(qū)列,可以通過Set按鈕實現(xiàn)按條件分組:

SqlServer性能優(yōu)化——Partition(創(chuàng)建分區(qū))

這樣可以很方便得通過設(shè)置起止時間將表按照指定時間段自動分區(qū),但之后依然需要手動指定每個分區(qū)的文件組。

制定好分區(qū)方案之后可以通過Estimate sotrage預(yù)估每個分區(qū)的行數(shù)、空間占用情況,不過除非需要以占用空間或行數(shù)來規(guī)劃你的分區(qū)策略,一般不建議在這里進(jìn)行預(yù)估,因為如果對空表來說,預(yù)估的結(jié)果當(dāng)然都是0,而如果表中已經(jīng)包含大量數(shù)據(jù),預(yù)估則會花費比較長的時間。

創(chuàng)建分區(qū)

通過以上設(shè)置,分區(qū)已經(jīng)基本完畢,在向?qū)У淖詈螅梢赃x擇是創(chuàng)建腳本還是立即執(zhí)行分區(qū)操作。

我們可以查看在不同情況下創(chuàng)建分區(qū)的腳本的情況:

1.在表沒有索引的情況下:

BEGIN TRANSACTIONCREATE PARTITION FUNCTION [TestFunction](datetime) AS RANGE LEFT FOR VALUES (N'2010-01-01T00:00:00', N'2010-02-01T00:00:00', 
N'2010-03-01T00:00:00', N'2010-04-01T00:00:00', N'2010-05-01T00:00:00', N'2010-06-01T00:00:00')CREATE PARTITION SCHEME [TestScheme] AS PARTITION [TestFunction] TO ([PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])CREATE CLUSTERED INDEX [ClusteredIndex_on_TestScheme_634025264502439124] ON [dbo].[Account] ( [birthday])WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [TestScheme]([birthday])DROP INDEX [ClusteredIndex_on_TestScheme_634025264502439124] ON [dbo].[Account] WITH ( ONLINE = OFF )COMMIT TRANSACTION

這里先創(chuàng)建Partition Function以及Partition Scheme,之后在分區(qū)列上創(chuàng)建聚集索引并按照分區(qū)方案分區(qū),最后刪除了這一索引。

2.在表有索引的情況下:

如果原先沒有聚集索引:

CREATE CLUSTERED INDEX [ClusteredIndex_on_TestScheme_634025229911990663] ON [dbo].[Account] (    [birthday])WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [TestScheme]([birthday])DROP INDEX [ClusteredIndex_on_TestScheme_634025229911990663] ON [dbo].[Account] WITH ( ONLINE = OFF )

這和沒有索引的情況一樣,如果表原先存在聚集索引,則腳本變?yōu)椋?/p>

CREATE CLUSTERED INDEX [IX_id] ON [dbo].[Account] (    [id] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, 
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [TestScheme]([birthday])

可以看到原有的聚集索引(IX_id)在分區(qū)方案上被重建了。

如果選擇了“對齊索引”選項,則會對所有索引都應(yīng)用分區(qū):

CREATE CLUSTERED INDEX [IX_id] ON [dbo].[Account] (    [id] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, 
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [TestScheme]([birthday])CREATE NONCLUSTERED INDEX [UIX_birthday] ON [dbo].[Account] ( [birthday] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [TestScheme]([birthday])CREATE NONCLUSTERED INDEX [UIX_name] ON [dbo].[Account] ( [name] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)

這里不僅對聚集索引IX_id進(jìn)行了分區(qū),也對非聚集索引UIX_name和UIX_birthday進(jìn)行了分區(qū)。

注意事項

  1. 對一張表分好區(qū)后不可以進(jìn)行再次分區(qū),同時也沒有直接取消表分區(qū)的方法。
  2. 如果要查看已分區(qū)表的分區(qū)狀態(tài)以及每個分區(qū)中的行數(shù)和占用空間,可以通過Storage-》Management Compression查看。同時可以在這里為每個分區(qū)指定壓縮方式。
  3. 如果分區(qū)表索引沒有對齊,則不可以對該表進(jìn)行切入切出(Switch in/out)操作,同樣也不能執(zhí)行滑動窗口操作
  4. 分區(qū)實際上是在每個分區(qū)表都添加了約束,相應(yīng)的插入操作的性能也會受到影響。
  5. 即使進(jìn)行了分區(qū),如果查詢的條件字段和分區(qū)列并沒有關(guān)聯(lián),性能也未必會得到提升。

it知識庫SqlServer 性能優(yōu)化——Partition(創(chuàng)建分區(qū)),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 激情婷婷六月 | 一区二区三区网站在线免费线观看 | 91久久精品都在这里 | 国产人成亚洲第一网站在线播放 | 精品国产91久久久久久久 | 日本www色高清视频 日本www色视频 | 在线观看国产一区二区三区 | 91精品国产品国语在线不卡 | 天天综合五月天 | 亚洲国产成人精彩精品 | 国产香蕉久久精品综合网 | 久久夜色精品国产噜噜小说 | 91麻豆精品国产自产在线 | 日本综合欧美一区二区三区 | 夜夜夜夜夜夜夜猛噜噜噜噜噜噜 | 精品精品| 97超级碰久久久久香蕉人人 | 真实国产乱弄免费视频 | 国产高跟黑色丝袜老师 | 国色天香一区三区四区小说 | 色久在线 | 香蕉521av成人网 | 久在线观看视频 | 国产91播放 | 国产精品高清全国免费观看 | 色资源在线观看 | 午夜视频黄色 | 97午夜精品 | 在线播放亚洲精品富二代91 | 91精品视频免费在线观看 | 国产成人综合91精品 | 91精品免费高清在线 | 女的毛片毛片毛毛片毛毛毛毛片 | 加比勒精品视频在线观看 | 久久久久久91香蕉国产 | 国产中文字幕视频在线观看 | 欧亚激情偷乱人伦小说视频 | 日产精品一区二区 | 婷婷激情亚洲 | 一区二区视频在线观看免费的 | 国产成人香蕉在线视频网站 |