分區並行化物化視圖

-------------------------避免磁盤I/O爭用--------------------
磁盤爭用通常發生在多個進程視圖同時訪問一個物理磁盤的情況下。
磁盤I/O操作時,注意事項和提示
1 頻繁的批處理需要更大的回滾空間,重做空間,臨時表空間
2 頻繁的DML處理需要更大的回滾空間,重做空間,臨時表空間
3 對大型表的頻繁訪問,需要更多cpu,內存,臨時表空間
4 調整性能較差的系統需要更,需要更多cpu,內存,臨時表空間
5 大量較好均衡的磁盤和控制器通常可用提供性能(減少I/0爭用)
6 增大磁盤容量也可以加快備份和恢復操作,這是因爲可以在磁盤上保存一個備份的副本,而不是在磁帶上保存。
7 如果能使用emc或固態硬盤方案,這仍時一種提高oracle性能的最好方法。
要監控爭用,可用查看數據庫控制中的數據文件的度量。該度量組包含兩組度量,文件平均讀取時間,文件平均寫入時間度量。應用於於數據庫關聯的所有數據文件。
(1)把磁盤的I/O更平均的分佈到多個可用磁盤上,可以有效減少磁盤爭用,減少磁盤I/O也可用減少磁盤爭用。
(2)可以選擇將一個數據文件重新放置到另一個文件系統。
(3)通過移動數據文件來均衡文件I/O。
--------------------------------------------------使用分區來避免磁盤爭用---------------------------------------------
範圍分區,散列分區,組合分區,列表分區,索引分區
使用分區改善性能和改進數據庫的可用性,所有這些功能縮小了管理函數使用範圍,從而減少了他們在整體上對數據庫可用性的影響。
有選擇地壓縮表中的分區來節省I/O和磁盤空間
-------可以使用分區表在物理上隔離數據
1可以截取分區和它的索引,而不會影響表的剩餘部分
2可以通過alter table 命令的drop partition子句刪除分區
3可以刪除分區的本地索引
4可以設置分區爲nologging,減少大型事物的影響。

分區的主要優點在於可用和表的其他部分分開的管理的能力,例截取分區的能力允許從表中刪除大量數據(但不是所有數據),而不會生成任何重做信息。
可以使用exchange partition選項來極大地減小數據加載過程對系統可用性帶來的影響。
----------
首先:創建具有和分區表相同列結構的空表,將數據加載到該表中。
然後:分析新的表,在新的表上創建和分區表相同的索引,
最後:使用exchange partition子句改變分區表,交換的分區和填充的新表現在通過分區表可用訪問所有加載的數據。
這個步驟期間對系統的可用性幾乎沒有任何影響,因爲他是一個DDL操作。
(1)分區表有助於提高數據庫的可用性和可維護性。
(2)分區表還可以改善數據庫的性能,可以使用並行查詢來訪問分區表的每個分區。可用將多個並行執行的服務器分配給表的不同的分區或不同的索引分區
1.如果一個表空間已破壞,能夠減少在多個分區中數據損壞的可能性
2.每個分區可用獨立備份和恢復
3.可用更大程度地控制分區到物理設備的映射,以平衡I/O負載。
表和他們相關聯的索引應當放置在不同物理磁盤上,以便減少文件I/O。

--------------------------------------------------------並行化----------------------------------------------------
使用並行操作可以讓多個處理器(以及可能補加的處理器)協同工作,執行單個SQL語句,這個特性提高了數據庫密集型的操作。
並且時可態的,能夠充分利用您所有的處理器和磁盤驅動。它需要一些額外的開銷和管理。但PEO可以提高多數操作性能。
用於執行掃描的進程的數目稱爲並行度。
(1)parallel_max_servers 每個實例並行進程的最大數
(2)paraller_min_servers每個示例服務器進程的最小值
(3)instance_groups定義激活特定服務器處理的邏輯組

----- 在創建表時使用並行操作
-----在創建索引時使用並行操作
儘管並行查詢增加了在修改數據時的操作性能,但會繼續記錄重做日誌,並且造成瓶頸,使用nologging選項,可以在創建表和索引時避免這個瓶頸。
使用nologging可以克服由於重做日誌文件連續的寫操作造成了I/O瓶頸。
因爲對重做日誌文件的寫操作是連續的。重做日誌的寫操作可以有效地消除您爲語句定義的並行化處理。使用nologging可以強制執行批量操作,以避免記錄日誌,但單獨的insert命令必須仍然寫入重做日誌。如果使用nologging選項,您必須可以通過歸檔重做日誌文件之外的其他方法來恢復數據。
    使用並行操作創建索引,考慮以下亮點技巧:
(1)如果內存中沒有足夠的內存可以執行排序操作(sort_area_size)則創建索引時將用到臨時表空間。構建臨時表空間方式:物理數據文件至少分散分佈在與create index語句中並行度一樣多的磁盤上。
(2)當增加/啓用一張表的主鍵或唯一鍵時,您不可能在並行處理中創建相關索引。相反,應當首先並行創建索引,然後使用alter table來增加/啓用約束條件,並指定using index。
---- 並行DML語句。
在一個sql會話中並行執行DML語句的操作時,必須啓用對並行DML的支持。
(1)如果您沒有首先完成事務,您就不能啓用一個並行DML會話,您必須首先執行提交或回滾操作
(2)必須通過命令alter session enable parllel dml 啓用會話的並行功能。
(3)直到並行事務結束之後,纔可讀取一張被並行DML修改的表(通過提交或回滾)
當執行DML操作時的約束條件:
1 update,merge,delete操作在沒有分區的表上不能並行化處理
2 在遠程對象的任何DML操作,集羣表,對象列爲lob類型的列(其他列可用)表上有觸發器,正在執行復制的表不能執行dml操作
3 使用delete cascade刪除一張有外鍵的表的操作也無法被並行化,如果dml中涉及到主鍵,也就不能刪除帶有延遲約束或時自引用外鍵的表。

並行操作的不利方面是大量消耗服務器資源,要監控的最簡單的服務器資源時cpu利用率。
數據分佈是另一個因素,如果當前存在I/O瓶頸,使用並行操作會惡化這種情況,要確保並行目標對象的數據文件適當分散在磁盤上。

計劃(重新設計)數據文件的物理分佈是成功並行訪問數據的關鍵爲每一個sql語句決定一個合適的並行度,並在創建物理設計時就開始考慮並行化問題,不要依賴於初始化參數來確定並行度。
並行化處理是管理數據倉庫或者執行定期維護活動的強大工具。
1 爲大表創建或重新創建索引是一種資源集中的操作,其中使用並行操作可用極大地提高性能,索引創建語句要求操作的並行度爲6
2 在很小的表非常快的查詢中使用並行操作同樣也會降低性能,因爲協調查詢也會消耗性能資源。
3 確保您的數據分佈得當,否則並行查詢服務器進程可能會加劇已經存在的I/O瓶頸問題
可以通過使用並行操作來獲得性能增益的一條潛在規格就是:數據是存儲在不同的設備上的,它們應可以獨立尋址。

----------------------------------------------------------------物化視圖--------------------------------------------------
可以使用物化視圖來劃分用戶針對表執行的操作類型
創建物化視圖時,可以指示用戶直接查詢物化視圖。或者依賴oracle的查詢的查詢重寫功能將查詢重定向到物化視圖,
這種情況下,有數據的兩個副本。一個用於服務新事物數據的輸入,另一個物化視圖用於服務查詢。
物化視圖可以預先連接表並且預先生成聚集。從而用戶查詢可以執行儘可能少的工作。
物化視圖同時具有表和視圖的特性
(1)它和視圖相同之處在於它從對一個或多個表的查詢中得到結果。
(2)它類似表的地方在於它將視圖的結果集維護在一個段中。(佔用物理空間)
(3)可以使用物化視圖來聚集,預連接,或複製數據
(4)可以使用物化視圖來預計算並將聚集的信息存儲在一個數據庫中,可以在分佈式數據庫之間動態地複製數據。並能夠在數據複製環境中同步數據的更新。
   在複製環境中,物化視圖允許本地訪問那些通常必須遠程訪問的數據,一個物化視圖可能要基於另一個物化視圖。
(5)物化視圖有助於提高涉及聚集(包括求和,計數,平均值,方差,標準差,最小值,最大值)或表連接的查詢性能,oracle的查詢優化器將會自動意識到可以使用物化視圖來滿足查詢。
   一個稱爲查詢重寫的特性可以使用初始化參數配置優化器來自動重寫查詢,以便在任何可能的時候使用物化視圖。

1 bulid immediate 命令選項將數據立刻裝載到物化視圖
2 bulid defrred 預先創建物化視圖而並不向其中它填充數據,直到第一次使用它的時候才填充數據,直到執行了dbms_mview.refresh 程序包,並且在返回任何數據之前,用戶必須等待物化視圖的填充。

更新形式:
1 fast更新中,使用物化視圖日誌來跟蹤自從上次更新以來表中出現的數據變化。
2 complete中,每次執行更新時將會完全更換物化視中的數據。
3 force更新過程首先評估能否運行fast更新,如果不能運行它,將會執行complete更新
4 如果將never指定爲更新選項,將不會更新物化視圖。

如果沒有創建和填充物化視圖日誌,只能執行complete更新。

dbms_mview程序包用來執行管理操作,如評價,註冊或更新物化視圖。
使用dbms_mview.refresh兩個主要參數物化視圖名稱,和使用的更新方法。
c 用於cmplete f 用於fast   ? force
execute dbms_mview.refresh('mv1','mv2','mv3','cfc');
對於兩個相關聯的均有基於自身的簡單物化視圖的表,可能並沒有在他們的物化視圖中執行兩個表之間的引用完整性。
---------更新組
更新組提供了針對引用完整性問題的另一種解決方法。
可以將相關的物化視圖聚集到更新組中,更新組的目的時協調它的成員的更新進度。
通過dbms_refresh程序包可以執行更新組的操作。
execute dbms_refresh.make(name=>'emp_group',list=>'local_emp,local_dept',next_date=>sysdate,interval='sysdate+7')
-------物化視圖日誌
物化視圖日誌是一個表,用來在物化視圖中維護主表改動的記錄。
create materialized view log on employee tablespace data_2;
可以將物化視圖日誌的pctfree值設置得很低,而將pctused值設置得很高。物化視圖日誌的大小依賴於每次更新過程中將會處理的更改數量。
爲了查看可能用於物化視圖的更新和重寫功能的類型,可以查詢mv_capabilities_table表。
-------------------查詢重寫
可以使用物化視圖來影響優化程序,以便它改變查詢的執行路徑,這種特性稱爲“查詢重寫”
爲了有效地使用查詢重寫功能,應該創建一個維,用來在表的數據中定義分級結構。
物化視圖用於查詢重寫,必須將該物化的所有主表放置在物化視圖的模式中,並且必須擁有query rewrite系統權限。
爲了能夠進行查詢重寫,必須設置如下的初始化參數:
1 optimizer_mode=all_rows或first_rows
2 querey_Rewrite_enable=true
3 querey_rewrite_integrity=stale_tolerated,trusted,enforced
  (1)enfore  物化視圖日誌 oracle執行並保證一致性和完整性
  (2)trusted  支持查詢重寫用於聲明的關係
  (3)stale_tolerated即使在物化視圖和他們的底層數據不一致的情況下支持查詢重寫。
可以使用dbms_mview,explan_Rewrite程序來檢查重寫是否可以用於查詢以及會涉及哪些物化視圖
explain_Rewrite需要三個輸入參數,查詢,物化視圖的名稱,語句標識符並且可以將它的輸出存儲在一個表中。
p248使用物化視圖快照來複制數據

發佈了51 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章