聯機分析處理 (olap) 的概念最早是由關聯式資料庫之父e.f.codd於2023年提出的,他同時提出了關於olap的12條準則。olap的提出引起了很大的反響,olap作為一類產品同聯機事務處理 (oltp) 明顯區分開來。
當今的資料處理大致可以分成兩大類:聯機事務處理oltp(on-line transaction processing)、聯機分析處理olap(on-line analytical processing)。oltp是傳統的關係型資料庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。olap是資料倉儲系統的主要應用,支援複雜的分析操作,側重決策支援,並且提供直觀易懂的查詢結果。
區別oltp還是olap
在資料庫的設計中,就算完全掌握了以上的方法,但是,在不同的資料庫型別上,使用起來也是大有差別的,這就需要設計者弄清楚自己的業務型別。如果沒有正確地識別自己的業務型別,就盲目地開始設計資料庫,或者是盲目地尋求優化方法,則往往是把olap的方法使用在oltp上,或者是把oltp的方法使用在olap上。如果這樣,很可能會適得其反。
什麼是oltp
注意:如果不特殊指定,本書中的高可用資料庫都是指oltp型別的資料庫。
oltp系統最容易出現瓶頸的地方就是cpu與磁碟子系統。
cpu出現瓶頸常表現在邏輯讀總量與計算性函式或者是過程上,邏輯讀總量等於單個語句的邏輯讀乘以執行次數,如果單個語句執行速度雖然很快,但是執行次數非常多,那麼,也可能會導致很大的邏輯讀總量。設計的方法與優化的方法就是減少單個語句的邏輯讀,或者是減少它們的執行次數。另外,一些計算型的函式,如自定義函式、decode等的頻繁使用,也會消耗大量的cpu時間,造成系統的負載公升高,正確的設計方法或者是優化方法,需要盡量避免計算過程,如儲存計算結果到統計表就是乙個好的方法。
磁碟子系統在oltp環境中,它的承載能力一般取決於它的iops處理能力。因為在oltp環境中,磁碟物理讀一般都是db file sequential read,也就是單塊讀,但是這個讀的次數非常頻繁。如果頻繁到磁碟子系統都不能承載其iops的時候,就會出現大的效能問題。
oltp比較常用的設計與優化方式為cache技術與b-tree索引技術,cache決定了很多語句不需要從磁碟子系統獲得資料,所以,web cache與oracle data buffer對oltp系統是很重要的。另外,在索引使用方面,語句越簡單越好,這樣執行計畫也穩定,而且一定要使用繫結變數,減少語句解析,儘量減少表關聯,儘量減少分布式事務,基本不使用分割槽技術、mv技術、並行技術及位圖索引。因為併發量很高,批量更新時要分批快速提交,以避免阻塞的發生。
什麼是olap
olap,也叫聯機分析處理(online analytical processing)系統,有的時候也叫dss決策支援系統,就是我們說的資料倉儲。在這樣的系統中,語句的執行量不是考核標準,因為一條語句的執行時間可能會非常長,讀取的資料也非常多。所以,在這樣的系統中,考核的標準往往是磁碟子系統的吞吐量(頻寬),如能達到多少mb/s的流量。
磁碟子系統的吞吐量則往往取決於磁碟的個數,這個時候,cache基本是沒有效果的,資料庫的讀寫型別基本上是db file scattered read與direct path read/write。應盡量採用個數比較多的磁碟以及比較大的頻寬,如4gb的光纖介面。
在olap系統中,常使用分割槽技術、並行技術。如分割槽技術可以使得一些大表的掃瞄變得很快(只掃瞄單個分割槽),而且方便管理。另外,如果分割槽結合並行的話,也可以使得整個表的掃瞄會變得很快。並行技術除了與分割槽技術結合外,在oracle 10g中,與rac結合實現多節點的同時掃瞄,效果也非常不錯,可把乙個任務,如select的全表掃瞄,平均地分派到多個rac的節點上去。
在olap系統中,不需要使用繫結(bind)變數,因為整個系統的執行量很小,分析時間對於執行時間來說,可以忽略,而且可避免出現錯誤的執行計畫。但是olap中可以大量使用位圖索引,物化檢視,對於大的事務,盡量尋求速度上的優化,沒有必要像oltp要求快速提交,甚至要刻意減慢執行的速度。
分開設計與優化
以上描述了oltp與olap的特點,在設計上要特別注意,如在高可用的oltp環境中,不要盲目地把olap的技術拿過來用。如分割槽技術,假設不是大範圍地使用分割槽關鍵字,而採用其它的字段作為where條件,那麼,如果是本地索引,將不得不掃瞄多個索引,而效能變得更為低下。如果是全域性索引,又失去分割槽的意義。
並行技術也是如此,一般在完成大型任務時才使用,如在實際生活中,翻譯一本書,可以先安排多個人,每個人翻譯不同的章節,這樣可以提高翻譯速度。如果只是翻譯一頁書,也去分配不同的人翻譯不同的行,再組合起來,就沒必要了,因為在分配工作的時間裡,乙個人或許早就翻譯完了。
位圖索引也是一樣,如果用在oltp環境中,很容易造成阻塞與死鎖。但是,在olap環境中,可能會因為其特有的特性,提高olap的查詢速度。mv也是基本一樣,包括觸發器等,在dml頻繁的oltp系統上,很容易成為瓶頸,甚至是library cache等待,而在olap環境上,則可能會因為使用恰當而提高查詢速度。
關於sga、pga與系統記憶體三者間的關聯,目前有乙個相對通用的計算規則可供參考:
對於oltp資料庫,sga=系統記憶體*70%*80%,pga=sga*(10%~20%)。sga=系統記憶體*0.56 pga=系統記憶體*(0.05~0.1)
對於olap資料庫,sga=系統記憶體*80%*60%,pga=sga*(45%~65%)。sga=系統記憶體*0.48 pga=系統記憶體*(0.22~0.31)
(對於32bit平台,預設情況下sga最大可用記憶體有1.7gb的限制)
olap由於有著大量的全表掃瞄等操作,這樣的環境中sga的作用就不太大,因為可能一張表的資料量都比db cache大,乙個fts的就需要反覆幾次資料經過sga再轉到pga進行處理;至於共享池的存在意義就更不大了,因為很少有語句需要共享的。將pga設定大一些就是因為olap裡面的很多操作是需要到pga來處理的,比如大資料量的排序、連線等操作,通過並行處理,通常是發生direct path read,這樣資料通常是直接從資料檔案讀取到pga進行處理,因此需要pga大一些
一 Oracle的OLTP和OLAP模式
oracle屬於傳統的關係型資料庫,在建庫應用時,大致可以分為oltp和olap兩種模式,針對這兩種不同模式,oracle都有的不同的技術應用和優化技巧。先簡單介紹這一下這兩種模式 olap on line analytical processing 聯機分析處理,用於做複雜的sql關聯和資料分析,...
OLAP和OLTP的介紹
資料處理大致可以分成兩大類 聯機事務處理 oltp on line transaction processing 聯機分析處理 olap on line analytical processing oltp 是傳統的關係型資料庫的主要應用,主要是基本的 日常的事務處理,例如銀行交易。olap 是資料...
OLTP和OLAP的區別
弄清楚你的業務型別 oltp or olap2009 06 06 20 55 在oracle資料庫系統中,很多人沒有弄清楚自己的業務型別到底是什麼,就在開始盲目的尋求優化方法,而往往是把olap的方法使用在oltp上,或者是oltp的方法使用在olap上。這樣的使用,有的時候,對效能沒有任何的提高,...