1. 程式人生 > >海量資料庫及分割槽3——《12年資深DBA教你Oracle開發與優化——效能優化部分》...

海量資料庫及分割槽3——《12年資深DBA教你Oracle開發與優化——效能優化部分》...

1.全分割槽智慧連線    此時,將來自於相連的兩個表的一對分割槽之間的很大的連線分解成小連線。只有當基於連線鍵的兩個表是均衡的,或者參照分割槽時才可使用本特徵。如: 假定表sales和customers通過列customer_id相連,該連線是一個大連線,查詢某個1999年第三季度購買次數超過100的客戶記錄,則會使用全分割槽智慧連線,如下: SELECT c.customer_name, COUNT(*)   FROM sales s, customers c    WHERE s.customer_id = c.customer_id  AND                  s.time_id BETWEEN TO_DATE('1999-07-01', 'YYYY-MM-DD')   AND                                                        (TO_DATE('1999-10-01', 'YYYY-MM-DD'))         GROUP BY c.customer_name HAVING COUNT(*) > 100; 上述SQL執行時整個customers表與salse表的第三季度資料相連,在一個大資料倉庫中,這意味著數以百萬計的資料行被連線,此時是一種明顯的雜湊連線,如果此時兩個表中的資料是按customer_id均衡分佈的,則越發能縮短該雜湊連線的處理時間,原因是Oracle可以使用全分割槽智慧連線。 在並行操作中要使用全分割槽智慧連線時,最小的並行粒度也是分割槽,因此並行度也被限制為分割槽的數量。如,請求至少16個分割槽,則會導致查詢的並行度也被設定為16。 下面是三種均衡化兩個連線表的分割槽方法: 如右圖,通常,在一個大事物中,由於customer表是字典表,因而資料量少,為了降低I/O和CPU時間,該表會被選擇為驅動表。但在並行查詢中,由於可以 使用並行查詢
且一般 最終只有幾行會被選中以及 對小表 的限制條件(Where條件)少,所以大表一般被選擇為驅動表。如果此時連線的兩個表的列均建立了 主鍵索引或唯一索引,則對於並行查詢,效率會更高。 (1).單級分割槽-單級分割槽的全分割槽智慧連線 適合於R-R、H-H、L-L的單級分割槽連線的兩個表,且分割槽鍵是建立在連線的兩個列上。     使用執行計劃檢視並行查詢的選項包括:   A.P->P,即PARALLEL_TO_PARALLEL,輸出步驟重新分配到並行伺服器的下一個集合,此時效能最好。 B.P->S,即PARALLEL_FROM_SERIAL,輸出步驟返回至序列化的查詢協調器(QC)程序。 C.PCWP(PWP), PARALLEL_COMBINED_WITH_PARENT,輸出步驟在同一個並行程序內轉向下一步,此時沒有與父程序間通訊   D.PCWC(PWC), PARALLEL_COMBINED_WITH_CHILD,輸入步驟來自在同一個並行程序的前一步,此時也沒有與父程序間通訊 例子如下:建立兩個表account_trade_shq_fpw和account_trade_shq_fpw ,寫入資料然後設定並行訪問,再通過執行計劃檢視:   
  針對上述執行計劃的主要解釋如下:  A. 第14行PX BLOCK ITERATOR,表明將第15行的表ACCOUNT_TRADE_SHQ_FPW分割成小塊,以便在併發從屬之間分攤掃描的負載  B. 第11行的PX SEND BROADCAST和第10行的PX RECEIVE對,第6行的PX SEND HASH和第5行的PX RECEIVE對,描述了兩個併發從屬集之間的管道,該管道中流動的是從併發掃描中獲得的行  C. 第2行PX SEND QC (RANDOM)描述的是按照隨機順序發給查詢協調器彙總聚合的值  D. 第1行PX COORDINATOR描述的是查詢協調器,其負責控制和排程下面樹圖中展示的並行執行計劃 全分割槽智慧連線又包括三種類型:  (1).單級分割槽-單級分割槽的全分割槽智慧連線      適合H-H,L-L和R-R的表連線,且分割槽鍵是相連線的列。   
    (2).組合分割槽-單級分割槽的全分割槽智慧連線   此時一般是大表基於兩個維度分割槽,連線的列作為子分割槽鍵         (3).組合分割槽-組合分割槽的全分割槽智慧連線   如果需要的話,連線的兩個表均建立組合分割槽,因而也可以建立分割槽-分割槽,分割槽-子分割槽,子分割槽-分割槽,子分割槽-子分割槽的連線。但是這種情況很少見,一般不建議使用,可以採用前面兩種兩法來替代。 2.部分分割槽智慧連線   區別於全分割槽智慧連線,部分分割槽智慧連線僅僅是兩個相連的表中的一個表在連線鍵上分割槽,而不是兩個表均在連線鍵上分割槽。分割槽表作為參照表,另外一個表可以分割槽,也可以不分割槽。部分分割槽智慧連線比全分割槽智慧連線更常用。 Oracle在執行過程中會依據分割槽的參照表動態對另外一個表進行分割槽,然後其執行類似於全智慧分割槽。當大表的分割槽是建立在連線鍵、外來鍵或主鍵上時,可以防止任何時候基於該連線的重新分配,因此使用外來鍵是部分智慧分割槽中常見的情形。 右邊的例子中customer沒分割槽,sales分為16個雜湊分割槽。執行前面全分割槽智慧連線的SQL語句,則表Sales的分割槽 與customers表的連線中,customers表自動重新分配以便與sales表不同的分割槽連線。      分割槽及表壓縮技術      分割槽級壓縮支援對單個或幾個分割槽進行壓縮, 表級壓縮則是對所有分割槽進行壓縮,其儲存引數同樣也遵循表空間->表->分割槽的原則,細粒度的屬性定義會覆蓋從上一級別繼承的屬性(其他儲存引數也是如此,如邏輯儲存設定引數)。一般來說,如果資料更新很少,對錶的操作主要是隻讀的且資料量很大一般建議(2000萬行或2G大小)壓縮。 可以更改任何未壓縮的表分割槽,然後再加入新的壓縮或未壓縮的分割槽,也可以改變任何分割槽管理操作的壓縮屬性,如分割槽合併、分割、移動等(MERGE PARTITION、 SPLIT PARTITION、 MOVE PARTITION )。對部分或全部壓縮的分割槽表的訪問和維護操作與未壓縮的分割槽表是一樣的。 1.建表時壓縮語法           1.建表時壓縮語法          2.修改表時壓縮語法 表壓縮語句