国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server 2005對海量數據處理

2024-08-31 00:49:55
字體:
來源:轉載
供稿:網友
|||

  水平分區常用的方法是根據時期和使用對數據進行水平分區。例如本文例子,一個短信發送記錄表包含最近一年的數據,但是只定期訪問本季度的數據。在這種情況下,可考慮將數據分成四個區,每個區只包含一個季度的數據。

  2.1 創建文件組

  建立分區表先要創建文件組,而創建多個文件組主要是為了獲得好的 i/o 平衡。一般情況下,文件組數最好與分區數相同,并且這些文件組通常位于不同的磁盤上。每個文件組可以由一個或多個文件構成,而每個分區必須映射到一個文件組。一個文件組可以由多個分區使用。為了更好地管理數據(例如,為了獲得更精確的備份控制),對分區表應進行設計,以便只有相關數據或邏輯分組的數據位于同一個文件組中。使用 alter database,添加邏輯文件組名:

  alter database [deandb] add filegroup [fg1]

  deandb為數據庫名稱,fg1文件組名。創建文件組后,再使用 alter database 將文件添加到該文件組中:

  alter database [deandb] add file ( name = n'fg1', filename = n'c:deandatafg1.ndf' , size = 3072kb , filegrowth = 1024kb ) to filegroup [fg1]

  類似的建立四個文件和文件組,并把每一個存儲數據的文件放在不同的磁盤驅動器里。

  2.2 創建分區函數

  創建分區表必須先確定分區的功能機制,表進行分區的標準是通過分區函數來決定的。創建數據分區函數有range “left | / right”兩種選擇。代表每個邊界值在局部的哪一邊。例如存在四個分區,則定義三個邊界點值,并指定每個值是第一個分區的上邊界 (left) 還是第二個分區的下邊界 (right)[1]。代碼如下:

  create partition function [sendsmspf](datetime) as range right for values ('20070401', '20070701', '20071001')

|||

收集最實用的網頁特效代碼!

  2.3 創建分區方案

  創建分區函數后,必須將其與分區方案相關聯,以便將分區指向至特定的文件組。就是定義實際存放數據的媒體與各數據塊的對應關系。多個數據表可以共用相同的數據分區函數,一般不共用相同的數據分區方案。可以通過不同的分區方案,使用相同的分區函數,使不同的數據表有相同的分區條件,但存放在不同的媒介上。創建分區方案的代碼如下:

  create partition scheme [sendsmsps] as partition [sendsmspf] to ([fg1], [fg2], [fg3], [fg4])

  2.4 創建分區表

  建立好分區函數和分區方案后,就可以創建分區表了。分區表是通過定義分區鍵值和分區方案相聯系的。插入記錄時,sql server會根據分區鍵值的不同,通過分區函數的定義將數據放到相應的分區。從而把分區函數、分區方案和分區表三者有機的結合起來。創建分區表的代碼如下:

  create table sendsmslog

  ([id] [int] identity(1,1) not null,

  [idnum] [nvarchar](50) null,

  [sendcontent] [text] null

  [senddate] [datetime] not null,

  ) on sendsmsps(senddate)

  2.5 查看分區表信息

  系統運行一段時間或者把以前的數據導入分區表后,我們需要查看數據的具體存儲情況,即每個分區存取的記錄數,那些記錄存取在那個分區等。我們可以通過$partition.sendsmspf來查看,代碼如下:

  select $partition.sendsmspf(o.senddate)

  as [partition number]

  , min(o.senddate) as [min senddate]

  , max(o.senddate) as [max senddate]

  , count(*) as [rows in partition]

  from dbo.sendsmslog as o

  group by $partition.sendsmspf(o.senddate)

|||

  order by [partition number]

  在查詢分析器里執行以上腳本,結果如圖1所示:

  圖1 分區表信息

  

  2.6 維護分區

  分區的維護主要設計分區的添加、減少、合并和在分區間轉換。可以通過alter partition function的選項split,merge和alter table的選項switch來實現。split會多增加一個分區,而megre會合并或者減少分區,switch則是邏輯地在組間轉換分區。

  3 性能對比

  我們對2650萬數據,存儲空間占用約4g的單表進行性能對比,測試環境為ibm365,cpu 至強2.7g*2、內存 16g、硬盤 136g*2,系統平臺為windows 2003 sp1+sql server 2005 sp1。測試結果如表1:

  表1:分區和未分區性能對比表(單位:毫秒)

  測試項目 分區 未分區

  1 16546 61466

  2 13 33

  3 20140 61546

  4 17140 61000

  說明:

  1:根據時間檢索某一天記錄所耗時間

  2:單條記錄插入所耗時間

  3:根據時間刪除某一天記錄所耗時間

  4:統計每月的記錄數所需時間

  從表1可以看出,對分區表進行操作比未分區的表要快,這是因為對分區表的操作采用了cpu和i/o的并行操作,檢索數據的數據量也變小了,定位數據所耗時間變短。

  4 結束語

  對海量數據的處理一直是一個令人頭痛的問題。分離的技術是所有設計者們首先考慮的問題,不管是分離應用程序功能還是分離數據訪問,如果加以了合理規劃,都能十分有效的解決大數據表的運行效率低和維護成本高等問題。sql server 2005新增的表分區功能,可以對數據進行合理分區,當用戶在訪問部分數據時,sql server最佳化引擎可以根據數據的實體存放,找出最佳的執行方案,而不至于大海撈針。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪雅县| 武宣县| 江油市| 始兴县| 清涧县| 工布江达县| 桦川县| 沾益县| 乌海市| 托克逊县| 阿克| 龙井市| 偃师市| 兴仁县| 瓦房店市| 柳林县| 宜良县| 电白县| 三河市| 永和县| 滦平县| 华亭县| 民县| 中超| 扎囊县| 林西县| 五常市| 启东市| 济阳县| 天祝| 依安县| 保定市| 视频| 琼中| 乡宁县| 济源市| 达拉特旗| 西青区| 长沙县| 连城县| 呼图壁县|