国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
DB2 最佳實踐: 數(shù)據(jù)生命周期管理最佳實踐
本文描述了最佳 DB2 設(shè)計實踐,簡化 DB2 數(shù)據(jù)生命周期管理。生命周期管理是有效增加(即轉(zhuǎn)入)新數(shù)據(jù),并將主數(shù)據(jù)庫中不再需要的數(shù)據(jù)進行歸檔(即轉(zhuǎn)出),DB2 系統(tǒng)提供的功能可以簡化生命周期管理。

內(nèi)容提要

現(xiàn)在的數(shù)據(jù)庫應(yīng)用程序通常需要伸縮性、快速轉(zhuǎn)入及轉(zhuǎn)出數(shù)據(jù)——在盡量不影響應(yīng)用程序訪問數(shù)據(jù)的情況下。轉(zhuǎn)入轉(zhuǎn)出數(shù)據(jù)涉及添加新數(shù)據(jù)和移除(通常歸檔)歷史數(shù)據(jù)。今天的很多應(yīng)用程序是 24X7 訪問的,因此消除了以前提供的批處理窗口的數(shù)據(jù)更新。同樣,很多應(yīng)用程序需要在并行訪問數(shù)據(jù)的情況下才能連續(xù)進行數(shù)據(jù)更新。

DB2數(shù)據(jù)庫系統(tǒng)提供了多種工具來實現(xiàn)伸縮性和在最低限度影響數(shù)據(jù)訪問的情況下,方便連續(xù)填充或轉(zhuǎn)入轉(zhuǎn)出數(shù)據(jù)。本文建議的最佳實踐可用來設(shè)計并實施這些 DB2 工具,以達(dá)到這些目的。





回頁首


介紹

本文描述了最佳 DB2 設(shè)計實踐,簡化 DB2 數(shù)據(jù)生命周期管理。生命周期管理是有效增加(即轉(zhuǎn)入)新數(shù)據(jù),并將主數(shù)據(jù)庫中不再需要的數(shù)據(jù)進行歸檔(即轉(zhuǎn)出)。 DB2 系統(tǒng)提供了下列功能,這些功能你可以組合使用,可以簡化生命周期管理:

  • 數(shù)據(jù)庫分區(qū)
  • 表分區(qū)
  • 多維集群
  • UNION ALL 視圖

除了這些 DB2 功能,IBM Optim Data Growth 解決方案還簡化了數(shù)據(jù)歸檔生命周期的管理。

DB2數(shù)據(jù)庫系統(tǒng)分區(qū)工具的一個最重要的好處是,可以部署和更改這些工具而不影響現(xiàn)有應(yīng)用程序的代碼。

本文是最佳實踐文章家族的一員,你也能通過閱讀其它最佳實踐從中受益。

本文的目標(biāo)讀者是負(fù)責(zé)為 DB2 應(yīng)用程序設(shè)計數(shù)據(jù)庫的人員(如果要達(dá)到伸縮性和有效的數(shù)據(jù)生命周期管理,數(shù)據(jù)庫人員同樣會發(fā)現(xiàn)本文的價值)。本文認(rèn)為你需要有一定的 DB2 數(shù)據(jù)庫設(shè)計的經(jīng)驗。

這篇文章的內(nèi)容是基于 DB2 版本 9.5 提供的工具。 DB2 數(shù)據(jù)庫系統(tǒng)的后續(xù)版本可能會有所提高,這將對本文的最佳實踐建議帶來變化。





回頁首


分區(qū)技術(shù)

什么是數(shù)據(jù)庫分區(qū)?

數(shù)據(jù)庫分區(qū)(之前稱為 DPF)是通過使用哈希鍵值算法把數(shù)據(jù)分布在數(shù)據(jù)庫中的各個邏輯節(jié)點上。數(shù)據(jù)庫分區(qū)的目標(biāo)是通過在計算機集群之間均勻的分布數(shù)據(jù)來最大化可擴展性。數(shù)據(jù)庫分區(qū)通過減少 DB2 實用工具操作粒度來增強擴展性。它并行的在數(shù)據(jù)庫上進行查詢和更新操作。

下面的例子演示了如何指定數(shù)據(jù)庫分區(qū):

CREATE TABLE Test                        (Account_Number INTEGER,                        Trade_date DATE )                        DISTRIBUTE BY(Account Number)USING HASHING                        

注意:在 DB2 版本 9 中,PARTITION KEY 子句被重命名為 DISTRIBUTE BY 。

數(shù)據(jù)庫分區(qū)是完全透明的,因此并不影響現(xiàn)有應(yīng)用程序代碼。同樣,你可以使用 redistribution 實用工具來在線更改,而不會影響應(yīng)用程序代碼。

在設(shè)計你的數(shù)據(jù)庫分區(qū)策略時,使用一個有較高基數(shù)性的分區(qū)鍵列,來確保數(shù)據(jù)在各個邏輯節(jié)點間均勻分布。一個有較高基數(shù)的列有大量唯一值(而非大部分值相同)。同樣,唯一索引必須是分區(qū)鍵的超集。

對那些要進行連接的表,嘗試使用相同的分區(qū)鍵。這增加了連接并置。

什么是表分區(qū)?

表分區(qū)(通常叫做范圍分區(qū))是在一個邏輯數(shù)據(jù)庫分區(qū)中的一個或多個物理對象上,通過制定鍵值范圍來分割數(shù)據(jù)。表分區(qū)的目的是組織數(shù)據(jù)以便于優(yōu)化數(shù)據(jù)訪問和數(shù)據(jù)轉(zhuǎn)出。對于特定的應(yīng)用程序,表分區(qū)也有助于轉(zhuǎn)入數(shù)據(jù),然而,多維集群(在下面“ Multi-Dimensional Clustering ”章節(jié)討論)往往是增強轉(zhuǎn)入的更好選擇。數(shù)據(jù)庫分區(qū)是減少實用工具操作粒度以及超大型數(shù)據(jù)庫的可擴展性的最佳實踐。

表分區(qū)的好處是:

  • 通過消除不恰當(dāng)分區(qū)來提高查詢性能。優(yōu)化器可以把 SQL 查詢,限制到僅在和 WHERE 子句相關(guān)的分區(qū)里。
  • 優(yōu)化表分區(qū)的轉(zhuǎn)入和轉(zhuǎn)出處理。表分區(qū)可以很容易的添加或刪除表的分區(qū),而不發(fā)生數(shù)據(jù)移動。應(yīng)用程序可以在添加分區(qū)時,對原來的數(shù)據(jù)執(zhí)行讀寫操作 ( 查詢被安排在一段很短的時間內(nèi) ) 。
  • 以前提供的維護方法壓縮率會隨著時間推移發(fā)生變化。由于每個表分區(qū)都有它自己的壓縮字典。因此,以前分區(qū)上的壓縮數(shù)據(jù)并不會隨新數(shù)據(jù)的插入而發(fā)生改變。
  • 優(yōu)化對超大型表的管理。表分區(qū)可以擁有幾乎無限的大小,因為限制只存在于各個分區(qū)中(而不是整個表)。你可以把范圍數(shù)據(jù)存放到多個表空間中,以便于備份和恢復(fù)數(shù)據(jù)。
  • 使 SMS 表空間的索引有更大的靈活性。你可以將索引存儲到不同的 SMS 大型表空間中(僅支持分區(qū)表)。所有表都可以把索單獨存放到 DMS 表空間中。

下面例子演示了指定表分區(qū):

CREATE TABLE Test                        (Account_Number INTEGER,                        Trade_date DATE)                        IN ts1, ts2, ts3PARTITIONED BY RANGE(Trade_date)                        (STARTING'1/1/2000'                        ENDING'3/31/2000',STARTING'4/1/2000'                        ENDING'6/30/2000',STARTING'7/1/2000'                        ENDING'9/30/2000)                        

在你的 DB2 文檔中有很多其他技術(shù)可以用來指定表如何進行分區(qū)。





回頁首


多維集群

多維集群(MDC)是一個 DB2 數(shù)據(jù)庫系統(tǒng)具有的獨特能力。 MDC 在表中通過多維鍵值(單元)來組織數(shù)據(jù)。 MDC 的目的就是通過多個維度方便的存取數(shù)據(jù),以保持?jǐn)?shù)據(jù)訪問只選擇那些相關(guān)的單元。 MDC 通過維度確保數(shù)據(jù)隨時處于集群狀態(tài),從而避免了重組數(shù)據(jù)的需求(數(shù)據(jù)永遠(yuǎn)不會變得無序)。

MDC也利用在每個維度上的塊索引(并結(jié)合維度)對比行 ID(RID)索引。這樣做的結(jié)果就是極大的減少了索引大小和索引級別。例如,如果在一個 DB2 單元中能裝入 100 行,塊索引將只指向單元而不是這 100 行數(shù)據(jù)的每一條。這樣減少了讀取和更新數(shù)據(jù)的 I/O( 索引值在塊滿了的時候進行更新 ) 。

MDC使轉(zhuǎn)入和轉(zhuǎn)出數(shù)據(jù)變得很方便,而且是對應(yīng)用程序完全透明的。

下面的例子演示了如何指定多維集群:

CREATE TABLE order                        (Account_Number INTEGER,                        Trade_Date DATE,                        Region CHAR(10,                        order_month INTEGER generated always as month(order_dt))                        IN ts1                        ORGANIZED BY DIMENSIONS (region, order_month)                        

在設(shè)計你的 MDC 策略時,指定有較低基數(shù)的列,以避免稀疏填充單元。稀疏填充的單元會顯著的增加磁盤空間的使用量。一個有較低基數(shù)的列,會有很多相同的值(而不是很多唯一值)。你也可以使用一個生成列來產(chǎn)生一個高度集群的維度。例如,一個生成列或內(nèi)部函數(shù)可以把日期轉(zhuǎn)換成月份。這樣就顯著的減少了基數(shù)(對于一年的數(shù)據(jù),基數(shù)從 365 減少到了 12)。

MDC 功能有助于轉(zhuǎn)入和轉(zhuǎn)出數(shù)據(jù)

MDC保證了在所有維度上的集群維護避免了重組數(shù)據(jù)的需求。這在轉(zhuǎn)入過程中極大的減少了 I/O(而使用連續(xù)的大塊 I/O)。同樣,由于 MDC 維度上的索引是塊索引,這也使得 MDC 在轉(zhuǎn)入過程中避免了過多的索引 I/O 。塊索引比普通基于 RID 的索引要更小也更淺,這是因為索引條目指向的是一個數(shù)據(jù)塊而非一行。

同樣,在轉(zhuǎn)入過程中,MDC 減少了索引維護,因為塊索引只在塊滿了的時候更新一次(不是像其他索引那樣每插入一行就更新一次)。這也有助于減少 I/O 。

INSERT語句在你使用 MDC 時運行的更快,因為 MDC 從用現(xiàn)有空的數(shù)據(jù)塊不需要進行分頁。插入鎖定同樣得到了減少,因為鎖發(fā)生在塊級別而不是行級別。

MDC提高了轉(zhuǎn)出數(shù)據(jù)的效率,因為刪除的是整個頁面而不是每一條記錄。在 MDC 刪除過程中日志同樣會減少(每個頁面只會有幾個字節(jié))。

使用只有一列的 MDC 設(shè)計,以便于轉(zhuǎn)入和轉(zhuǎn)出數(shù)據(jù),而不會增加磁盤使用量。

見“連續(xù)更新情況下轉(zhuǎn)入和轉(zhuǎn)出數(shù)據(jù)的最佳實踐”章節(jié)中,一個假設(shè)從使用 MDC 轉(zhuǎn)入數(shù)據(jù)中獲益的應(yīng)用程序。

在一個數(shù)據(jù)庫設(shè)計中同時使用數(shù)據(jù)庫分區(qū)、表分區(qū)和多維集群

開發(fā)大型應(yīng)用程序方法的最佳實踐是在一個數(shù)據(jù)庫設(shè)計中同時實現(xiàn)數(shù)據(jù)庫分區(qū)、表分區(qū)和 MDC 。數(shù)據(jù)庫分區(qū)提供了可擴展性并且確保了在邏輯分區(qū)上均勻分布數(shù)據(jù);表分區(qū)方便了查詢分區(qū)刪除和轉(zhuǎn)出數(shù)據(jù); MDC 提高了查詢性能并使數(shù)據(jù)轉(zhuǎn)入更加方便。

例如:

CREATE TABLE Test                        (A INT, B INT, C INT, D INT … )                        IN Tablespace A, Tablespace B, Tablespace C …                        INDEX IN Tablespace B                        DISTRIBUTE BY HASH (A)                        PARTITION BY RANGE (B) (STARTING FROM (100) ENDING (300) EVERY (100))                        ORGANIZE BY DIMENSIONS (C,D)                        

表分區(qū)不能完全解決在 DB2 版本 9.5 中的擴展問題。需要繼續(xù)使用數(shù)據(jù)庫分區(qū)來解決大型數(shù)據(jù)倉庫的擴展問題。 DB2 數(shù)據(jù)庫分區(qū)不共享架構(gòu)是對你的應(yīng)用程序提供線性擴展而沒有軟件瓶頸的最好方法。





回頁首


支持生命周期管理的其他技術(shù)

大型表空間

使用大型表空間(在 DB2 版本 9 中默認(rèn)使用)能更好的調(diào)節(jié)大型的表或索引。在 DB2 服務(wù)器上這也使每頁能存更多的行。

對深度壓縮的表(一頁中有很多行)和表分區(qū)全局索引(預(yù)計會超過 4K 頁 64G 容量)使用大型表空間。如果你不受這些問題的影響,就不要使用大型表空間。同樣你可以通過把每個表分區(qū)的全局索引拆分到不同的表空間(強烈建議)來避免大型表空間的需求。

下面的圖比較了可用空間在不同頁面大小的情況下能存儲的記錄數(shù)目,包括普通表空間和大型表空間。

Page Size REG TBSP Max Size RID – 4 Bytes REG TBSP Max Records/Min Record Length LARGE TBSP Max Size RID – 6 Bytes LARGE TBSP Max Records/Min Record Length
4 KB 64 GB 251 / 14 2 TB 287 / 12
8 KB 128 GB 253 / 30 4 TB 580 / 12
16 KB 256 GB 254 / 62 8 TB 1165 / 12
32 KB 512 GB 253 / 127 16 TB 2335 / 12

注意:如果你把一個表空間改成大型表空間,在與所有表相關(guān)的索引重組完成之前,它不會立即生效。

SET INTEGRITY 操作

當(dāng)附加了一個新的分區(qū)到表中,或者當(dāng)你分離了一個表分區(qū)和物化查詢表(MQT)時,就需要運行 SET INTEGRITY(注意,這些數(shù)據(jù)在新的分區(qū)中 SET INTEGRITY 處理完成之前是不可見的)。 SET INTEGRITY 可能是一個要運行很長時間的操作,它驗證數(shù)據(jù)并維護全局索引。這個維護操作需要記錄日志并可能產(chǎn)生大量的日志輸入。

SET INTEGRITY的關(guān)鍵好處是,操作期間現(xiàn)有數(shù)據(jù)可以被讀寫訪問。你可以把對大數(shù)據(jù)量運行 SET INTEGRITY 的影響通過使用 MDC 來減到最小,而且也可以最小化對全局索引和 MQTs 的使用。另外一個選擇是你可以指定用戶維護 MQT 來加速 SET INTEGRITY

“設(shè)計并實現(xiàn)你的表分區(qū)策略”這一章節(jié)有使用 SET INTEGRITY 的建議。

異步索引清除

異步索引清除(AIC)是 DB2 的一個新功能,它在表分區(qū)分離后釋放索引空間(清除程序作為較低優(yōu)先級的后臺進程運行)。由于有 AIC 功能,分離表分區(qū)幾乎是一瞬間的。分離操作不需要等待索引清除完成。 AIC 是一個后臺進程,它是 DB2 數(shù)據(jù)庫系統(tǒng)自動調(diào)用的。





回頁首


設(shè)計并實現(xiàn)你的表分區(qū)策略

從表分區(qū)獲益的應(yīng)用程序使用了下列類型的表:

  • 超大型表
  • 有查詢訪問表的范圍子集的表
  • 有轉(zhuǎn)出需求的表
  • 有轉(zhuǎn)入需求的表。另外可以考慮使用 MDC 來轉(zhuǎn)入數(shù)據(jù)。

設(shè)計最佳實踐:

表分區(qū)設(shè)計,你需要考慮的內(nèi)容包括:

  • 在日期上的分區(qū)列(以方便轉(zhuǎn)出)
  • 協(xié)助分區(qū)刪除的分區(qū)列,這會在后面討論
  • 匹配轉(zhuǎn)入和轉(zhuǎn)出標(biāo)準(zhǔn)粒度。這避免了在你運行 DETACH 時需要重組來釋放空間。
  • 考慮把不同的范圍分別存放到單獨的表空間中以便于備份和恢復(fù)。 DB2 數(shù)據(jù)庫系統(tǒng)可以備份和恢復(fù)整個范圍分區(qū)——如果他們存放在單獨的表空間中的話。
  • 考慮把活動數(shù)據(jù)和歷史數(shù)據(jù)分開。
  • 為了在以后的 DB2 數(shù)據(jù)庫系統(tǒng)版本進一步提高,可以考慮對表分區(qū)鍵建立唯一索引。非唯一索引可以建在任何其他列上。
  • 把你的全局索引指定存放在它們各自的表空間中(如有需要,就使用大型表空間)。為了縮短備份時間,這是最小化存放全局索引所需表空間的最佳實踐。同樣的,使用數(shù)據(jù)庫分區(qū)來減少全局索引的粒度。
  • 把全局索引拆分到多個表空間中,以確保一個單獨的表空間不會變得過大。
  • 考慮最小化 SET INTEGRITY 的策略??紤]日志的影響以及當(dāng)涉及較大范圍時的 SET INTEGRITY 花費的時間。如果失敗了 SET INTEGRITY 也會影響重啟時間。在環(huán)境中建立原型以查看花費的時間是否可以接受。另外,考慮其他設(shè)計策略,這在“轉(zhuǎn)入數(shù)據(jù):用什么方法”和“轉(zhuǎn)入壓縮表分區(qū)的最佳實踐”中進行了討論。
  • DB2 版本 9.5 強力建議進行深度壓縮,因為它可以在 LOAD、IMPORT 或 INSERT 操作時自動建立壓縮字典。如果沒有壓縮字典的話,DB2 版本 9.1 需要進行表重組來壓縮一個表分區(qū)中的數(shù)據(jù)。

從分區(qū)刪除中獲得最大的好處:

表分區(qū)提供了一個強大的功能,以限制到分區(qū)的數(shù)據(jù)訪問必須滿足 SQL WHERE 子句。為了從分區(qū)刪除中獲益,需做好以下工作:

  • 把集群鍵和分區(qū)鍵放在前面
  • 確保范圍分區(qū)列在 WHERE 子句中經(jīng)常使用
  • 確保組合分區(qū)鍵的引導(dǎo)列在 WHERE 子句中
  • 如果你在使用生成列,那么,正確的使用它們可以協(xié)助分區(qū)刪除。
  • 把生成列用作 MDC 的維度,這能適當(dāng)減少維度的基數(shù)。
  • 如果有可能使用多個不同的范圍來消除不必要的搜索。例如,分區(qū)刪除可以只訪問 1 月和 12 月,而不是全年。
  • 如果你使用了連接,那么分區(qū)刪除就僅僅被用做嵌套循環(huán)的內(nèi)部訪問。
  • 分區(qū)刪除參數(shù)標(biāo)記被推送到運行時,然后值在運行時被綁定。

操作方面的考慮

使用下列最佳實踐來增強表分區(qū)的操作性特征:

  • 在每次轉(zhuǎn)入或轉(zhuǎn)出操作后,運行一個 COMMIT 語句來釋放鎖(例如,在 ATTACH、DETACH、SET INTEGRITY,等等)。
  • 為每個表分區(qū)取一個明確的名字。這些名字管理起來比系統(tǒng)生成的名字要容易得多。
  • 一定要終止一個運行失敗的 LOAD 。在 LOAD 被終止之前,不能執(zhí)行后續(xù)操作(例如,DROP TABLE)。
  • 如果你正在附加數(shù)據(jù)到一個分區(qū)中,指定 LOAD INSERT 。在一個分區(qū)上執(zhí)行 LOAD REPLACE 將會覆蓋整個表(所有分區(qū))。
  • 避免附加一個與被分離的分區(qū)有相同名字的分區(qū)。在異步索引清除(AIC)完成之前,這會導(dǎo)致重名。




回頁首


轉(zhuǎn)入數(shù)據(jù):用什么方法?

有很多因素會影響你在安裝中如何選擇最佳轉(zhuǎn)入的解決方案:

  • 盡量減少新數(shù)據(jù)轉(zhuǎn)入系統(tǒng)并減少使它可用的時間
  • 最小化在轉(zhuǎn)入過程中作為 SET INTEGRITY 操作一部分日志活動總量。
  • 你是否需要連續(xù)更新而不是每天進行批量操作。
  • 最大限度的壓縮新的范圍,以有效的管理數(shù)據(jù)傾斜。

下面是兩個把數(shù)據(jù)以分區(qū)形式轉(zhuǎn)入的不同技術(shù):

1.ALTER/ATTACH

你使用 ALTER/ATTACH 方法首先離線填充表,然后附加這個分區(qū)。你必須運行 SET INTEGRITY(對于大數(shù)據(jù)量來說,這個操作可能會運行很長時間)。

優(yōu)點:

  • 并發(fā)訪問:
  • 所有之前的分區(qū)都可以進行更新
  • 沒有部分?jǐn)?shù)據(jù)視圖(在 SET INTEGRITY 完成之前,新數(shù)據(jù)不可見)

缺點:

  • 需要額外的日志空間
  • 花費較長時間
  • 肯定會流失查詢

2.ALTER/Add

使用 ALTER/Add 方法,你可以附加一個空的表分區(qū),然后使用 LOAD 實用工具或 INSERT 語句來填充它。

你不需要運行 SET INTEGRITY

優(yōu)點:

  • 花費更少的時間
  • 不再需要一致性檢查
  • 全局索引維護需要更少的空間

缺點:

  • 當(dāng)你使用 INSERT 語句(而不是 LOAD 實用工具)插入的時候會發(fā)生部分?jǐn)?shù)據(jù)視圖
  • LOAD 實用工具允許對原來分區(qū)進行只讀訪問

建議:

對于更大的數(shù)據(jù)量,利用 ALTER/Add 方法來轉(zhuǎn)入一個表分區(qū)或利用 MDC 來轉(zhuǎn)入。





回頁首


轉(zhuǎn)入壓縮表分區(qū)的最佳實踐

這些最佳實踐使用 ALTER/Attach 附加一個表分區(qū),這在前面的章節(jié)中已經(jīng)介紹過了。

在版本 9.1 上,快速附加一個有壓縮數(shù)據(jù)的表分區(qū)的技術(shù)是:

  1. 裝載數(shù)據(jù)子集(一個真正的隨機抽樣)到另外一個 DB2 表
  2. 更改獨立的表啟用壓縮
  3. 重組數(shù)據(jù)子集以建立一個壓縮字典
  4. 清空表或保留最少數(shù)據(jù)(因此字典得到了保留)
  5. ALTER/ATTACH表作為一個新的表分區(qū)(保留字典)
  6. 執(zhí)行 SET INTEGRITY(因為數(shù)據(jù)很少,所以這很快)
  7. 使用 LOAD 實用工具或 INSERT 語句(會發(fā)生壓縮)。對于有連續(xù)更新、裝載數(shù)據(jù)到中間過渡表的應(yīng)用程序,使用 LOAD 實用工具。然后用一個有對中間過渡表的查詢的插入或者運行一個 ETL(抽取,轉(zhuǎn)換和裝載)任務(wù)來更新主表(會發(fā)生壓縮)。如果你在表分區(qū)中利用 MDC 的優(yōu)勢轉(zhuǎn)入數(shù)據(jù)性能可以得到進一步提高。

對版本 9.5,自動創(chuàng)建壓縮字典簡化了這個快速附加一個表分區(qū)的技術(shù)。

  1. ALTER/Add空表
  2. 通過使用 LOAD 實用工具或一個 INSERT/SELECT 語句,用數(shù)據(jù)填充這個表(數(shù)據(jù)被自動創(chuàng)建的壓縮字典壓縮)

注意,在一個完全裝載的分區(qū)上進行離線重組,可以得到比只有這個月歸檔的分區(qū)更好的壓縮。





回頁首


連續(xù)更新情況下轉(zhuǎn)入和轉(zhuǎn)出數(shù)據(jù)的最佳實踐

這個數(shù)據(jù)庫設(shè)計包含了多個 DB2 數(shù)據(jù)庫系統(tǒng)功能,以方便在連續(xù)更新的請求下的數(shù)據(jù)轉(zhuǎn)入和轉(zhuǎn)出。

這些應(yīng)用程序的設(shè)計有以下特點:

  • 全天的連續(xù)更新(這妨礙了執(zhí)行 ALTER/Add 來添加一個分區(qū))
  • 數(shù)據(jù)是按天增加的
  • 查詢經(jīng)常訪問某天
  • 基于 day 的表分區(qū)會產(chǎn)生過多的分區(qū)(例如,有 3 年,每年 365 天)
  • 每周或者每月進行轉(zhuǎn)出(通常在一個報告邊界)

關(guān)于數(shù)據(jù)庫設(shè)計的建議:

為了方便轉(zhuǎn)入數(shù)據(jù),指定只有一個在 day 上的維度的 MDC(見“ MDC 功能有助于轉(zhuǎn)入和轉(zhuǎn)出數(shù)據(jù)”部分)

為了方便轉(zhuǎn)出數(shù)據(jù),對每周或每個月指定一個表分區(qū)范圍。對 MDC 提供相同的時間維度不過是更粗的粒度。

有很長運行報告的程序?qū)?DB2 LOAD 實用工具通常不能排除查詢。在這種情況下的最佳實踐是使用 LOAD 實用工具來快速裝載數(shù)據(jù)到中間過渡表,然后使用一個有子查詢的插入來填充主表。





回頁首


在轉(zhuǎn)出以后:如何管理數(shù)據(jù)增長和數(shù)據(jù)保持?

為了符合公司政策、管理章程、或?qū)徲嬓枨?,你可能需要保留你的?shù)據(jù)并保持它們在很長時間內(nèi)可用。例如,Health Insurance Portability and Accountability Act (HIPAA) 法案,要求健康護理組織保留至少 5 年的原始醫(yī)療記錄。另外,一些企業(yè)也發(fā)現(xiàn)了對歷史數(shù)據(jù)進行分析的價值,并因此保留更長時期的數(shù)據(jù)。

因此,為了實施一個恰當(dāng)?shù)霓D(zhuǎn)入轉(zhuǎn)入策略和適當(dāng)?shù)臄?shù)據(jù)庫設(shè)計,你需要考慮數(shù)據(jù)的壽命,包括數(shù)據(jù)保留和獲取政策。出于保留數(shù)據(jù)的目的,你可以什么都不做并不停的增加硬件能力和資源,來保持這些附加的數(shù)據(jù)增長,然而本文介紹的是數(shù)據(jù)保留的最佳實踐。

使用 UNION All 視圖

一個實踐就是在數(shù)據(jù)庫中保留所有數(shù)據(jù),把某些范圍轉(zhuǎn)出作為數(shù)據(jù)保留,并對這些范圍創(chuàng)建 UNION ALL 視圖以便于訪問。

下面的例子演示了如何創(chuàng)建一個 UNION ALL 視圖:

CREATE VIEW all_sales AS                        (                        SELECT * FROM sales_0105                        WHERE sales_date BETWEEN '01-01-2005' AND '01-31-2005'                        UNION ALL                        SELECT * FROM sales_0205                        WHERE sales_date BETWEEN '02-01-2005' AND '02-28-2005'                        UNION ALL                        ...                        UNION ALL                        SELECT * FROM sales_1207                        WHERE sales_date BETWEEN '12-01-2007' AND '12-31-2007'                        );                        

在數(shù)據(jù)庫使用主存儲把所有數(shù)據(jù)保持在線時,使用 UNION ALL 視圖定位數(shù)據(jù)保留和實時訪問。這個方法帶來的一個問題是你可能不需要再維護和備份鏡像相關(guān)的數(shù)據(jù)。同樣,歷史數(shù)據(jù)一般不需要高性能,所以不需要進行索引或使用在你主數(shù)據(jù)上的高成本的因素。

有很多使用 UNION ALL 視圖的方法:

  • 使用 UNION ALL 視圖訪問活動數(shù)據(jù),并把你的歷史數(shù)據(jù)保持在分區(qū)表中。
  • 在范圍分區(qū)中保持活動數(shù)據(jù) , 使用 UNION ALL 視圖來訪問在其他范圍分區(qū)中的歷史數(shù)據(jù)。

對使用 UNION ALL 視圖有一些限制。當(dāng)你有很多范圍時,最好使用范圍分區(qū)表。這是因為某些復(fù)雜謂詞不能用在 UNION ALL 視圖上。

然而,在某些情況下 UNION ALL 視圖又很有優(yōu)勢。例如,一個 UNION ALL 視圖可以在聯(lián)邦數(shù)據(jù)庫中使用,相反,范圍分區(qū)表不能。

使用 IBM Optim Data Growth

根據(jù)你的歷史數(shù)據(jù)的服務(wù)級別協(xié)議(SLA),通常同時討論數(shù)據(jù)增長和保存的最佳實踐是用 IBM Optim Data Growth 實施數(shù)據(jù)歸檔。

IBM Optim Data Growth是在處理增長、遵守和管理上領(lǐng)先的解決方案。它通過歸檔已完成的業(yè)務(wù)對象,來保持應(yīng)用程序的完整性,而非單個表。例如它在歸檔中保持外鍵并保留原數(shù)據(jù)。這些功能使你能夠:

  • 靈活的訪問數(shù)據(jù)
  • 可以有選擇的或完整的恢復(fù)歸檔數(shù)據(jù)到原始數(shù)據(jù)庫表或一個新表中,甚至恢復(fù)到另外一個數(shù)據(jù)庫中。

完成下列步驟指南來判斷如何最好的實施你的歸檔策略:

1步:對你的應(yīng)用程序進行分類

首先,你需要根據(jù)它們的歸檔需求來對你的應(yīng)用程序進行分類。通過了解需要從你的應(yīng)用程序數(shù)據(jù)中保留什么事務(wù),你可以根據(jù)相似數(shù)據(jù)需求來對應(yīng)用程序進行分組,來提高可訪問性和性能。一些應(yīng)用程序只需要保留當(dāng)前事務(wù);一些只需要訪問歷史事務(wù);其他的需要混合訪問現(xiàn)在的和歷史的事務(wù)(以不同的比例)。

你也需要客觀的對歸檔數(shù)據(jù)考慮服務(wù)層協(xié)議(SLA)。 SLA 是一個各個組織間著名的協(xié)議,它定義了它們之間的期望,包括客觀的條目,比如服務(wù)、優(yōu)先級和職責(zé)。 SLA 的目的通常被定義為使用響應(yīng)時間的目標(biāo)。例如,可能需要在五分鐘內(nèi)運行一個特定的人力資源報告。

2步:評估你的數(shù)據(jù)溫度

數(shù)據(jù)溫度來自于:

  • 數(shù)據(jù)訪問有多頻繁
  • 花費多長時間
  • 數(shù)據(jù)變化(揮發(fā)性)有多快
  • 用戶和應(yīng)用程序需求

在不同的企業(yè),數(shù)據(jù)溫度也有所不同,不過通常來說,數(shù)據(jù)溫度是根據(jù)產(chǎn)業(yè)間的區(qū)別進行的一般分類。下表提供了數(shù)據(jù)溫度的指南:

數(shù)據(jù)溫度 描述
Hot 策略數(shù)據(jù) – 對當(dāng)前數(shù)據(jù)查詢的體積、頻繁訪問的和需要提升快速反應(yīng)時間。
Warm 傳統(tǒng)決策支持?jǐn)?shù)據(jù) – 查詢對這類數(shù)據(jù)的訪問不那么頻繁而且數(shù)據(jù)獲取也不需要緊急提升響應(yīng)時間。
Cold 深度歷史數(shù)據(jù) – 查詢很少訪問這類數(shù)據(jù)不過它們必須可以周期性的訪問。
Dormant 監(jiān)控數(shù)據(jù)它們需要能夠在某些例外情況下訪問。

有很多方法可以訪問數(shù)據(jù)溫度,例如,使用你的轉(zhuǎn)出策略和系統(tǒng)跟蹤。你需要訪問的溫度信息:

  • 什么對象有(或沒有)被訪問。
  • 每個對象訪問的平率
  • 某個對象被訪問的通常的時間間隔

    例如 THIS_WEEK, LAST_WEEK, THIS_QUARTER, LAST_QUARTER 。

  • 在一個對象中的那些數(shù)據(jù)被訪問了。

你可以使用 DB2 版本 9.5 負(fù)載管理器(WLM)來幫助發(fā)現(xiàn)數(shù)據(jù)的溫度。 WLM 歷史分析工具提供了關(guān)于那些表、索引和列被訪問了,那些沒有以及有多頻繁的信息。

WLM歷史分析工具有兩個腳本組成:

  • wlmhist.pl:產(chǎn)生歷史數(shù)據(jù)
  • wlmhisrep.pl:從歷史數(shù)據(jù)中產(chǎn)生報告

要發(fā)現(xiàn)對象中的那些數(shù)據(jù)被訪問過,你需要分析 SQL 語句。要這么做,使用一個 ACTIVITIES 事件監(jiān)視器來搜集運行的活動數(shù)據(jù)(包括 SQL 語句文本)。你可能想搜集關(guān)于工作負(fù)載管理對象比如工作負(fù)載、服務(wù)類型和工作類型(通過工作活動)。要啟用活動搜集,在這些市哦那個 COLLECT ACTIVITY DATA WITH DETAILS 子句的對象上執(zhí)行 CREATE 或 ALTER 語句,如下所示

ALTER SERVICE CLASS sysdefaultsubclass                        UNDER sysdefaultuserclass                        COLLECT ACTIVITY DATAON ALLWITH DETAILS                        

WITH DETAILS選項啟用對靜態(tài)語句和動態(tài) SQL 語句的語句文本搜集。

如果應(yīng)用程序在語句文本中使用了參數(shù)標(biāo)記,也應(yīng)該包括 AND VALUES 選項,(指定 COLLECT ACTIVITY DATA WITH DETAILS 和 AND VALUES)。 AND VALUES 選項搜集和參數(shù)變量相關(guān)的數(shù)據(jù)值以獲得詳細(xì)語句信息。

第3步:發(fā)現(xiàn)并對你的業(yè)務(wù)對象進行分類

業(yè)務(wù)對象,比如一個保單、一個發(fā)票、或購物清單、代表了一個事務(wù)交易。通過指定你的業(yè)務(wù)對象,你可以開始定義規(guī)則和相關(guān)業(yè)務(wù)驅(qū)動以在數(shù)據(jù)生命周期的不同階段管理這些對象。

從數(shù)據(jù)庫透視圖來看,一個業(yè)務(wù)對象表示了一組相關(guān)表中相關(guān)的行

業(yè)務(wù)對象的簡單例子

給出了下面 3 個表:



業(yè)務(wù)對象是:

出于保持和歸檔的目的,你希望表現(xiàn)整個業(yè)務(wù)對象,比如你有一個事務(wù)交易的歷史“時間點”快照。創(chuàng)建一個歷史快照需要交易細(xì)節(jié)和相關(guān)主要數(shù)據(jù),這包含數(shù)據(jù)庫中的多個表??梢酝暾_的對整個業(yè)務(wù)對象進行歸檔,并提供單獨的交易歷史存儲庫。為了響應(yīng)質(zhì)詢或發(fā)現(xiàn)需求,你可以查詢這個存儲庫而不需要訪問 HOT 數(shù)據(jù)。

在這個例子中,為了確保所有對象可用,歸檔業(yè)務(wù)對象必須由來自 DEPARTMENT 和 EMPLOYEE 表中的相關(guān)數(shù)據(jù)組成。在歸檔后,你會只想刪除生產(chǎn) PROJECT 表中的數(shù)據(jù)以及和 EMPLOYEE、DEPARTEMENT 無關(guān)的數(shù)據(jù)。

就像在這個例子中展示的,你會發(fā)現(xiàn)基于模式間的關(guān)系的業(yè)務(wù)對象。 不過,你或許也想包含其它沒有任何模式關(guān)系的相關(guān)表,卻通過使用一個應(yīng)用程序相關(guān)聯(lián)。另外,你或許會選擇刪除從某個業(yè)務(wù)對象上某個發(fā)現(xiàn)的關(guān)系

第4步:生成你的綜合數(shù)據(jù)分類:

在你對你的應(yīng)用程序和業(yè)務(wù)對象完以成分類并對他們相關(guān)數(shù)據(jù)溫度做出判斷后,你可以生成一個數(shù)據(jù)分類表來總結(jié)這些信息。這張表可以明白的說明數(shù)據(jù)的年齡。

下表提供了一個分類樣本:

第5步:判斷后歸檔存儲類型

為了判斷什么存儲類型歲適合你的老數(shù)據(jù):

  • 誰需要訪問歸檔數(shù)據(jù),處于什么目的?
  • 期望的響應(yīng)時間是多少?
  • 什么數(shù)據(jù)年齡將被歸檔?
  • 有多少層以及應(yīng)該部署在什么存儲類型上,例如,SAN、WORM 或磁帶

例如,對于在線歸檔你可以使用 ATA 磁盤或更大容量的較慢驅(qū)動。對離線歸檔,你可以使用磁帶或 WORM(IBM DR550,EMC Centera)。

第6步:訪問歸檔數(shù)據(jù)

Optim Data Growth訪問層使用 SQL92 容量和多種協(xié)議(如上圖所示)以支持對歸檔數(shù)據(jù)的訪問。這個訪問能力和生產(chǎn)系統(tǒng)完全不同,而且不會使用任何生產(chǎn)系統(tǒng)資源

另外,你可以使用一個聯(lián)邦系統(tǒng)(使用 IBM DB2 聯(lián)邦服務(wù)器)從生產(chǎn)系統(tǒng)上來對歸檔數(shù)據(jù)提供透明訪問。

這兩種方法都允許對歸檔數(shù)據(jù)的直接訪問,不需要取得或回復(fù)歸檔數(shù)據(jù)。

下面例子演示了如何使用 UNION ALL 視圖來同時訪問活動和歸檔數(shù)據(jù)。在例子中把數(shù)據(jù)庫中叫做project表重命名為另外一個名字,然后創(chuàng)建一個也叫做project的 UNION ALL 視圖。

RENAME TABLE project TO project_active                        CREATE VIEW project AS                        SELECT * FROM project_active WHERE prjendate >= (CURRENT_DATE – 5 YEARS)                        UNION ALL                        SELECT * FROM project_arch WHERE prjendate < (CURRENT_DATE – 5 YEARS)                        

另外,下面例子避免了在數(shù)據(jù)庫中重名表的需求。例子中創(chuàng)建了一個叫project_all的 UNION ALL 視圖作為替代,應(yīng)用程序可以從這里查詢到完整的project數(shù)據(jù)集:

CREATE VIEW project_all AS                        SELECT * FROM project WHERE prjendate >= (CURRENT_DATE – 5 YEARS)                        UNION ALL                        SELECT * FROM project_arch WHERE prjendate < (CURRENT_DATE – 5 YEARS)                        





回頁首


結(jié)論

通過仔細(xì)選擇在你的 DB2 數(shù)據(jù)庫中最適合分區(qū)方法,以及在你的系統(tǒng)上使用最有效的轉(zhuǎn)入和轉(zhuǎn)出技術(shù),你可以最大化整體系統(tǒng)性能和效率。

投入足夠的時間來分析和理解你的數(shù)據(jù),這樣你可以最好的利用本文中的指南,并獲得 DB2 數(shù)據(jù)庫提供功能的好處來使你的系統(tǒng)盡可能有效率。

你可以使用數(shù)據(jù)庫分區(qū)來提供擴展性并確保數(shù)據(jù)在分區(qū)間均勻分布。下面指南在“設(shè)計并實現(xiàn)你的表分區(qū)策略”這一章中設(shè)計最有效的表分區(qū)策略。使用 MDC 來提高查詢性能并使轉(zhuǎn)入數(shù)據(jù)更容易。

如果你需要從壓縮的額表分區(qū)中轉(zhuǎn)入大量數(shù)據(jù),升級到 DB2 版本 9.5 數(shù)據(jù)庫系統(tǒng)并使用 ALTER/Add 方法來附加一個表分區(qū)。

如果你需要提供連續(xù)更新,你的最佳策略是使用 MDC 以方便轉(zhuǎn)入處理。

緊接著在“在轉(zhuǎn)出以后:如何管理數(shù)據(jù)增長和數(shù)據(jù)保持?”指南中確定了如何處理你的歷史數(shù)據(jù)需求。

在你準(zhǔn)備好轉(zhuǎn)出你的數(shù)據(jù)并歸檔之前,你需要對數(shù)據(jù)保留和從歸檔中取回數(shù)據(jù)確定一個和你的組織匹配的數(shù)據(jù)策略。

你可以確定你組織對保留數(shù)據(jù)的需求,并通過下列因素取回:

  • 你需要保留的事務(wù)類型
  • 你的數(shù)據(jù)的“溫度”
  • 你的業(yè)務(wù)對象是怎么組成的

你的策略應(yīng)該包含什么類型的后歸檔存儲是最合適的,以及如何最好的訪問歸檔數(shù)據(jù)。



參考資料

學(xué)習(xí)

獲得產(chǎn)品和技術(shù)
  • 使用可直接從 developerWorks 下載的IBM 產(chǎn)品評估試用軟件構(gòu)建您的下一個開發(fā)項目。

  • 現(xiàn)在可以免費使用 DB2 。下載DB2 Express-C,這是為社區(qū)提供的 DB2 Express Edition 的免費版本,它提供了與 DB2 Express Edition 相同的核心數(shù)據(jù)特性,為構(gòu)建和部署應(yīng)用程序奠定了堅實的基礎(chǔ)。


討論




 
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
提高數(shù)據(jù)庫查詢速度的幾個思路
數(shù)據(jù)庫經(jīng)典筆試題總結(jié)
數(shù)據(jù)庫管理員JAVA程序員架構(gòu)師必看
DB2 for z/OS: DB2 數(shù)據(jù)庫設(shè)計
SQL Server 表分區(qū)實戰(zhàn)系列(文章索引)
數(shù)據(jù)庫的那些事(全是干貨)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服