概述
Oracle-OLAP和OLTP解讀
Oracle-index索引解讀
Oracle-分區表解讀
Oracle-鎖解讀
Oracle-等待事件解讀
Oracle-procedure/cursor解讀
通常來說,我們把業務分為來兩類,線上事務處理系統(OLTP)和線上分析系統(OLAP)或者DSS(決策支援系統),這兩類系統在資料庫的設計上是如此的不同,甚至有些地方的設計是像相悖的。
比如:
OLTP 系統強調資料庫的記憶體效率,強調記憶體各種名額的命中率,強調綁定變量,強調并發操作
OLAP 系統則強調資料分析,強調SQL 執行時長,強調磁盤I/O,強調分區等。
OLTP(on-line transaction processing)資料庫
通常來講,OLTP(線上事務處理系統)的使用者并發數都很多,但他們隻對資料庫做很小的操作,資料庫側重于對使用者操作的快速響應,這是對資料庫最重要的性能要求。
對于一個OLTP 系統來說,資料庫記憶體設計顯得很重要,如果資料都可以在記憶體中處理,那麼資料庫的性能無疑會提高很多。
記憶體的設計通常是通過調整Oracle 和記憶體相關的初始化參數來實作的,比較重要的幾個是記憶體相關的參數,包括SGA 的大小(Data Buffer,Shared Pool),PGA 大小(排序區,Hash 區等)等,這些參數在一個OLTP 系統裡顯得至關重要,OLTP 系統是一個資料塊變化非常頻繁,SQL 語句送出非常頻繁的一個系統。
對于資料塊來說,應盡可能讓資料塊儲存在記憶體當中,對于SQL 來說,盡可能使用變量綁定技術來達到SQL 的重用,減少實體I/O 和重複的SQL 解析,能極大的改善資料庫的性能。
除了記憶體,沒有綁定變量的SQL 會對OLTP 資料庫造成極大的性能影響之外,還有一些因素也會導緻資料庫的性能下降,比如熱塊(hot block)的問題,當一個塊被多個使用者同時讀取的時候,Oracle 為了維護資料的一緻性,需要使用Latch 來串行化使用者的操作,當一個使用者獲得了這個Latch,其他的使用者就隻能被迫的等待,擷取這個資料塊的使用者越多,等待就越明顯,就造成了這種熱塊問題。這種熱塊可能是資料塊,也可能是復原段塊。
對于資料塊來講,通常是資料塊上的資料分布不均勻導緻,如果是索引的資料塊,可以考慮建立反向索引來達到重新分布資料的目的,對于復原段資料塊,可以适當多增加幾個復原段來避免這種争用。
OLAP(On-Line Analytical Processing)資料庫
OLAP 資料庫在記憶體上可優化的餘地很小,甚至覺得增加CPU 處理速度和磁盤I/O 速度是最直接的提高資料庫性能的方式,但這将意味着着系統成本的增加。實際上,使用者對OLAP 系統性能的期望遠遠沒有對OLTP 性能的期望那麼高。
對于OLAP 系統,SQL 的優化顯得非常重要
試想,如果一張表中隻有幾千資料,無論執行全表掃描或是使用索引,對我們來說差異都很小,幾乎感覺不出來,但是當資料量提升到幾億或者幾十億或者更多的時候,全表掃描,索引可能導緻極大的性能差異,是以SQL得優化顯得重要起來。
分區技術在OLAP 資料庫中很重要
這種重要主要是展現在資料管理上,比如資料加載,可以通過分區交換的方式實作,備份可以通過備份分區表空間,删除資料可以通過分區進行删除。
聯機事務處理(OLTP)和聯機分析處理(OLAP)的不同
聯機事務處理(OLTP)和聯機分析處理(OLAP)的不同,主要通過以下五點區分開來。
1.使用者和系統的面向性:
OLTP是面向顧客的,用于事務和查詢處理
OLAP是面向市場的,用于資料分析
2.資料内容:
OLTP系統管理目前資料.
OLAP系統管理大量曆史資料,提供彙總和聚集機制.
3.資料庫設計:
OLTP采用實體-聯系ER模型和面向應用的資料庫設計.
OLAP采用星型或雪花模型和面向主題的資料庫設計.
4.視圖:
OLTP主要關注一個企業或部門内部的目前資料,不涉及曆史資料或不同組織的資料
OLAP則相反.
5.通路模式:
OLTP系統的通路主要由短的原子事務組成.這種系統需要并行和恢複機制.
OLAP系統的通路大部分是隻讀操作
OLTP是傳統的關系型資料庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。
OLAP是資料倉庫系統的主要應用,支援複雜的分析操作,側重決策支援,并且提供直覺易懂的查詢結果。