分區的威力(翻譯)
2024-07-21 02:11:33
供稿:網友
網站運營seo文章大全提供全面的站長運營經驗及seo技術!
分區的威力
dwaine r. snow and paul c. zikopoulos 著
笑熬漿糊 譯
原文出處:《db2 magazine》 quarter 2, 2003 · vol. 8, issue 2
英文原文(由于文章翻譯未經授權,請在轉載時保留原文鏈接)
人們對分區有很多的誤解。多倫多實驗室的專家們對這個有用的功能進行了正名。
db2 數據庫分區的往往是存在很多誤區。對于linux、unix以及windows平臺上的db2 udb 8.1 版本所做的變動有助于簡化db2 分區。我們將解釋這些變動,澄清一些分區的神話,以及說明您應該考慮分區的時機和理由。
db2 udb 8.1 for linux /unix/windows將db2產品家族中以前稱之為db2 udb 企業版和企業擴展版的產品整合成為一個單獨的產品中。這個 新的db2 企業服務器版(ese) 包含了數據庫分區的功能(從前是作為單獨提供的產品) ,作為一個計費的項目,現在被稱為數據庫分區功能(注:直譯——database partitioning feature dpf)。當db2的用戶們發現自己需要開始分區時,那么他們可以馬上開始而不需要其他一些額外的代碼—— 他們僅僅需要dpf的許可協議。
dpf的真相
關于數據庫分區的神話在db2中隨處可見(參見表1)。對于分區基礎的快速概攬將幫助你區別真偽并且做出適當的分區決策。
表1 : 圍繞db2 數據分區的神話和事實
無論是否有dpf,db2都支持并行查詢處理。圖1展示了安裝在一個4路smp(對稱多處理)服務器db2 ese。在這個假設中。一個獨立的查詢可以自動使用這個服務器上所有的cpu和物理磁盤。對于依靠需要數據的子集進行處理的子代理提供分區內部的并行機制。db2 使用i/o的預存取把從磁盤發送的數據反饋到這些子代理當中。這種并行機制對用戶、應用程序以及dba都是透明可見的。
圖 1:不帶有dpf的db2 ese的并行機制
dpf選項增加了在一組機器中或邏輯上位于某個smp服務器中的數據庫進行分區的能力。依靠dpf,一幅數據庫圖像可以跨越多臺機器(存儲),并且它對于用戶和應用程序來說仍然還是一幅完整數據庫圖像。
考慮四路的smp服務器組的情況。 (在這篇文章里,我們將使用術語數據庫分區組而不是集群,因為集群通常是指高可靠性的故障轉移配置或者用于衡量系統的分區組。) 使用dpf,在圖1中所討論到的并行操作可以擴展到橫跨多臺smp 機器(參見圖2)。這樣的好處就是有一個雙并行操作。 你可以跨越多臺機器或者邏輯數據庫分區來平衡這些并行操作。這樣的處理被稱之為分區之間的并行機制。
圖2 : 橫跨多臺機器的使用dpf的并行機制
分區之間的并行機制通常在多臺服務器執行,但越來越多的用戶現在都一些大型的smp箱中進行該操作(參見圖3)。
圖3 : 單獨的smp服務器中的擁有dpf的db2 ese.
什么時候(為什么)需要進行分區
那么,你應該去做分區嗎?在以下的情況下你應該考慮分區:
· 你的服務器擁有大量可用內存。即使db2 v8有64位支持,多分區已經被證明可以提供比單獨的smp 并行機制更多的內存的有效使用和更多的線性可擴展性。
· 系統將包括多臺服務器,或有超過6 到12 個的cpu。
· 數據庫工具的操作速度是你的業務操作的關鍵所在。
· 為裝載數據或提取,轉換,負荷處理操作提供的批處理窗口數量是有限的。
· 數據倉庫的滾動窗口數據更新的需求使并行sql處理和其他日志空間成為根本。
分區在這些情況下顯得特別有意義。 但是分區所提供的一些其它的好處使得它變得更有魅力。這些好處有:
查詢的可擴展性 使用dpf的一個最明顯的理由就是它可以增加查詢工作量和insert, update,和 delete 操作的性能。把一個單獨的大型數據庫分區為很多定數量的較小的數據庫以加速這些操作因為每一個數據庫分區都擁有它們自己的一套數據。
比如說你想要掃描一個包含100 million行數據的表。對于一個單獨的數據庫分區而言,這次掃瞄會要求獨立的數據庫管理器去搜索所有100 million個紀錄。如果你把你的數據庫系統分區為使用50 臺數據庫分區服務器并且將這100 million條記錄均勻的分配到他們之間的話,那么每一個數據庫分區上的數據庫管理器僅僅需要掃描2 million行。如果每一個掃描都在同一個時間并且以相同的速度執行的話,那么掃瞄完成的時間大約是前者的2%。
dpf提供類似于線性可擴展性和使用工具來完成基礎設施構建。這樣它可以根據需要增加容量而不需要新技術或者單獨安裝
db2 優化器是基于并行機制。換句話說,它保留了如何在系統中對于底層數據進行分區的信息。使用這些信息,優化器考慮不同的查詢執行策略和一個低成本的選擇。當在比較不同的執行策略時,它會考慮到不同的操作的內在的并行機制和在數據庫分區之間傳遞消息的開銷。
在大量數據或者處理器和分區的數量增加的時候,db2可提供類似線性的可擴展性。但是,分區可能提供的最大好處的機會取決于它所相關的工作量、最大容量表的大小以及其它一些因素。一般情況下,我們推薦:每個cpu上面的原始數據(僅是表的大?。┑臄盗繎摶谠诒皇褂梅掌魃系腸pu的功率。比如說pseries p690-class cpu,我們會建議每個處理器150-200gb。而對于使用linux或者windows的xseries-class cpu(或任何intel或amd的機器),我們會推薦每處理器75-150gb。記住,這些只是一般情況下的推薦,在實際情況下會有一些不同的。
體系架構的限制 dpf已經突破了一些db2的體系架構的限制。例如,在db2中表的最大容量是64gb以4kb的頁面大?。m然32kb的頁面大小可以支持到512gb)。db2中表和表空間大小限制是建立在每個分區的基礎上。因此,在多個分區中對一個數據庫進行分區可以讓你通過你所在系統環境的分區數量的系數來增加表的最大容量。例如,把一個數據庫分區成橫跨四個結點系統就可以支持最大(以32kb頁面大小) 的2408 gb的表。
在一個沒有分區的環境中內存也會成為一個瓶頸。32 位版本的db2 ese 限制了每臺db2服務器共享內存。(這個限制將隨運行db2的操作系統的不同而不同,同時一些供應商也提供一些基本內存模的擴展。)共享內存支持內存密集型的數據庫資源譬如緩沖池、高速緩沖區和堆。在一個dpf的環境里,每一個數據庫分區管理和擁有它自己的資源,因此您可以通過分區你的數據庫來克服這些限制。你甚至可以在大型的smp箱中區運行邏輯數據庫分區,充分利用在一臺單獨smp 服務器中的大內存資源。
數據裝載 在db2 ese v8.1中,如果對目標表分區,那么裝載工具會自動并行的分離和裝載數據。它使用智能的缺省值去分離和裝載數據;它也可以被優化用于一些環境。
在一個分區數據庫中,您可以使用裝載工具同時向相應的數據庫分區裝載數據。圖4顯示裝載工具是使用專用的媒體閱讀器將數據分離和裝載到表中(并行狀態下)。裝載工具對于裝載時間提供了類似于線性的可擴展性。
圖4 利用dpf加速表的裝載
db2 v8的裝載工具比以前版本的裝載工具更快、更加可利用。如果你在db2 v8中執行一個裝載的操作,db2不再是將被裝載的那個表所在的表空間所有表鎖定在它之中(與db2 v7的情況一樣)?,F在甚至還有一種被稱之為在線裝載,它在裝載的時候允許對表進行讀操作??紤]對于以前db2版本的,仍然支持autoloader腳本。
是否有可能裝載時間重要但查詢的性能并不重要的?這兩個問題其實并不互相排斥;可是,在許多商業流程中裝載時間是一個重要因素。實際上,這有時還是決定因素。如果是在那種情況下,那么使用dpf是相當有用的。 例如,電信公司(telco)的欺詐偵查單元在一個指定的時間間隔中裝載大量的數據以求快速準確的監測出呼叫模式下反常現象有可能是潛在欺詐信號。數據庫必須迅速發現這些反常現象,因此數據需要迅速和頻繁地進入數據倉庫。在電信公司,這個過程每小時被重復甚至在更大的公司每十五分鐘就要重復。 這些需求要求一個可擴展并且高效率的基礎設施來運行類似查詢的工作。
維護 數據庫分區可以明顯的加速維護。將數據庫分散于多臺數據庫分區服務器上可以加速數據庫的維護,因為每一項操作都是運行在分區管理的數據子集上的。
雖然在db2中索引創建是并行的,你可以通過對數據庫進行分區來進一步減少總的時間。在所有分區上利用小數據集并行創建索引是允許并行的。 記住,db2 抽象了表面現象下的運行;多個表可以表現成一個表的形式。
runstats工具也可以從分成中受益。這個工具更新關于表的物理特性和它相關的索引統計數據。在決定數據訪問路徑時優化器使用這些統計數據。 runstats是cpu密集的,需要數據的排序和聚合。你可以使用dpf的選項來減少該工具所占用的時間。使用dpf,runstats檢查在一個數據庫分區上的數據而不是整個表。在db2 v8中,runstats取樣選項可以進一步減少工具的的執行時間(不管有或沒有dpf)。
同樣,將數據散布于多個分區有助于表重組(reorg),它是i/o 密集的并且需要隨機抓?。ㄌ貏e是在離線狀態下)。每個數據庫分區可以重組它擁有的數據同時分配為每一個處理器更多驅動來重組數據。這些操作也可以并行操作以縮短需要的整體時間。在db2 v8,你可以在各個分區或者在數據庫分區的子集上來執行reorg。你也可以停止、暫停、檢查狀態和恢復。
這些例子僅僅是一些能從dpf得到好處的維護操作。
并行插入/刪除 在數據庫分區中只有sql語句是并行操作。如果數據庫環境使用sql來進行大容量的插入和刪除處理,通過在數據庫分區上的并行處理插入和刪除語句,多數據庫分區可以增加事務處理的吞吐量。這樣的好處還可以應用于從一張表中選擇數據并且插入另外一張表的技術。
滾動窗口需求 當查詢窗口必須保持在打開狀態的時候,分區通常會被用于滿足滾動窗口的需求(每天插入和刪除行)。為每一個處理器定義一個數據庫分區將增加新數據插入表中的吞吐量。在數據庫分區中并發執行插入或刪除數據流很有道理(例如使用一個關鍵范圍)。多數據庫分區使為存儲大量插入和刪除操作的數據庫的locklist分配足夠的內存成為可能。
數據庫分區同時也允許橫跨數據庫分區并行進行索引維護操作(在插入和刪除時)
備份與恢復 多個數據庫服務器之間的分區數據庫可以才很大程度上減少備份數據庫所使用的備份總時間。根據你的環境,在決定是否對數據庫進行分區時這也許是一種重要決定因素。
db2通過為每一個表空間分配一個獨立的進程或者線程來進行并行備份和恢復。 在一個分區的備份中,每一個分區被單獨的進行備份。并行執行這些備份操作將會縮短備份整個數據庫所耗費的時間。
一個分區數據庫環境也可以加速前滾和重新開始(崩潰)恢復。用dpf,一些必須前滾的日志具體到了每一個數據庫分區;數據庫分區服務器間平衡的分離和征服戰略(divide-and-conquer strategy)加速了這個過程。同時如果一個特定的數據庫分區不需要前滾的話,那么它將在崩潰恢復中被忽略。
記錄一些需要考慮的事情 在一個高度活躍的系統中,數據庫日志的性能很可能制約系統的能力。在一個分區的數據庫環境,每個分區都有它自己的一組日志。當系統需要執行高強度的插入、更新或者刪除活動時,多個數據庫分區可能改善性能,因為日志被并行的寫入每個分區中,并且在每個分區較少的記錄日志。
做出選擇
分區還是不分區? 從根本上來講,db2就是db2。不管你沒有對你的數據庫進行分區對于界面、功能、工具和你使用的技能都沒有任何的影響。這事實上是依靠你的應用程序和環境。使用我們建議的標準,你可以發現問題的答案。
關于作者
dwaine r. snow 是db2 udb 分區數據庫的產品經理,做為加拿大ibm的db2udb的資訊顧問工作多年,提供數據庫和應用程序策劃和設計、項目策劃和實施、復雜在線事務處理和決策支持系統設計、性能調整以及系統集成的現場指導。你可以通過[email protected]與他聯系
paul c. zikopoulos在ibm數據管理軟件小組有七年的db2工作經驗并且寫了許多文章。他參與寫作了幾本書,包括db2: the complete reference (osborne mcgraw-hill, 2002),和 db2 fundamentals certification for dummies(wiley, 2002)。paul是db2認證高級技術專家(drda和cluster/eee領域)和db2認證解決方案專家(商業智能和數據庫管理領域)。你可以通過[email protected] 與他聯系。