新聞中心
Oracle數(shù)據(jù)庫機Exadata自推出以后,因為在減小帶寬占用,快速檢索等方面的優(yōu)勢而備受業(yè)界關(guān)注。但是對于具體的技術(shù)細(xì)節(jié),很多數(shù)據(jù)庫運維人員并不是很了解。

黃島網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)公司于2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
本文轉(zhuǎn)載自支付寶架構(gòu)師馮大輝的博客
原文鏈接:http://www.dbanotes.net/database/oracle_exadata.html
自從 Oracle 和HP 推出Exadata 之后,我就很關(guān)注這個產(chǎn)品,之前也寫了一篇Oracle Database Machine介紹它。去年,Oracle和SUN合并后,推出了Oracle Exadata V2,相比較上一代產(chǎn)品有幾個變化:第一,使用SUN的硬件;第二,宣稱支持OLTP應(yīng)用;第三,Oracle 11g R2 提供了更多的新特性。Exadata Smart Flash Cache
Exadata V2整體架構(gòu)并沒有太多改變,換用了SUN的硬件,除了采用Intel最新的Nehalem CPU 以外,每臺Storage Cell 更是配置了384GB 的Flash,這也是為什么V2 可以支持OLTP 應(yīng)用的關(guān)鍵。
Flash Cache 完全是自動管理,Oracle會根據(jù)數(shù)據(jù)的訪問情況,決定哪些數(shù)據(jù)放在 Flash Cache中。所有的數(shù)據(jù)都是先被寫到普通磁盤上,再根據(jù)訪問情況讀入Flash Cache的,所以如果 Flash Card 發(fā)生故障,數(shù)據(jù)不會丟失。當(dāng)然,Oracle提供了方式,可以讓用戶手動將表或者索引Pin 在 Flash Cache 中。
在自動管理的方式之外,Oracle還允許用戶人工創(chuàng)建flash disks,和普通磁盤一樣,這些Flash Disks通過ASM輸出給數(shù)據(jù)庫使用,用戶可以把一些訪問非常頻繁的數(shù)據(jù)文件放在上面。這些 Flash Disks 不僅僅是Cache了,所以 ASM 會在Cell和Cell之間做鏡像。如果某塊卡發(fā)生故障,那么整個Storage Cell上的Flash Disks會offline,保證數(shù)據(jù)不會丟失。
Smart Scan
Smart Scan是 Exadata最重要的一個功能,它的作用就是把SQL 放在每個Cell 上去運行,然后每個Cell只返回符合條件的數(shù)據(jù)給數(shù)據(jù)庫,這樣就極大的降低了數(shù)據(jù)庫服務(wù)器的負(fù)載和網(wǎng)絡(luò)流量,并充分利用了Cell的計算資源和IO資源。
傳統(tǒng)方式:所有的數(shù)據(jù)都需要返回給數(shù)據(jù)庫服務(wù)器,網(wǎng)絡(luò)帶寬要求高,所有的計算在數(shù)據(jù)庫服務(wù)器上完成。
Smart scan:只返回符合條件的數(shù)據(jù),減少網(wǎng)絡(luò)帶寬,并充分利用了Cell 上的計算和IO資源。
這里有一點要注意,在使用Smart Scan 時,每個Cell返回給DB Server的是結(jié)果集,而不再是傳統(tǒng)的Block, DB Server 完成結(jié)果集的處理,并返回給客戶端。
Smart Scan 如何處理 Join ?
這是我一直想要搞清楚的問題。事實上, Smart Scan 只能處理Join filtering,而真正Join的工作必須在DB Server上完成,而且Smart Scan 僅適合于處理 DSS 環(huán)境的復(fù)雜Join,對于 OLTP 類型的簡單Join,Smart Scan 并不能發(fā)揮其優(yōu)勢。設(shè)想下面的查詢:
- select e.ename,d.dname from emp e, dept d where and e.ename='Jacky' and e.deptno=d.deptno;
假設(shè)采用nested loops join,Smart Scan 只能完成 e.ename='Jacky' 這個條件的過濾,然后將符合條件的 emp 表的數(shù)據(jù)返回到 DB server,然后由 DB Server 完成 join 的工作,逐條查詢dept表 (e.deptno=d.deptno) 的數(shù)據(jù)。所以Smart Scan 并不適合nested loop join(我認(rèn)為 Smart Scan 只有在適合的條件下才會啟用),只有 DSS 環(huán)境的大數(shù)據(jù)量復(fù)雜join才會發(fā)揮出優(yōu)勢。而且 Smart Scan 只能完成filtering的工作,而不能真正完成Join 的工作,這個與Greenplum 數(shù)據(jù)庫是不同的(有興趣可以看我的文章,Greenplum技術(shù)淺析)。設(shè)想下面的查詢(emp和dept都是大表):
- select e.ename,d.dname from emp e, dept d where e.deptno=d.deptno;
假設(shè)采用Hash Join ,由于沒有任何過濾條件,Smart Scan只能把兩個表的數(shù)據(jù)全部返回到DB Server 上進(jìn)行join操作,不過Smart Scan也不是一點用都沒有,至少還可以進(jìn)行column 的過濾,只返回需要的字段就可以了。
Oracle的文檔中,曾經(jīng)提到對于一個大表和小表join時,Smart Scan會采用bloom filter來快速定位(可以看我以前的文章,有趣的bloom filter )。方法是把小表build成為bloom filter,然后在每個storage cell上對大表做scan,利用bloom filter快速定位符合條件的結(jié)果,并返回給DB Server 作 join。
Storage Index
存儲索引,顧名思義是在存儲級別建立的索引,簡單的說就是為表中的每一列數(shù)據(jù)建立一個索引,每個index entry記錄一段數(shù)據(jù)區(qū)間的最大值,最小值以及它們的物理位置,文檔上說1MB數(shù)據(jù)對應(yīng)一條index entry,見下圖:
如果我們查詢B<2,或者B>8的數(shù)據(jù),根據(jù)存儲索引,我們就可以跳過這些不在min和max之間的數(shù)據(jù)塊,極大的提高了掃描的速度,這就是存儲索引的意義。
Hybrid Columnar Compress
首先我們要搞清楚,什么是行壓縮,什么叫列壓縮。我們熟悉的數(shù)據(jù)庫,如Oracle、MySQL等都是基于行的數(shù)據(jù)庫,就是行的不同字段物理上存放在一起,還有一種是基于列的數(shù)據(jù)庫,就是每個字段的不同行物理上存放在一起。他們的優(yōu)缺點同樣突出:
基于行的數(shù)據(jù)庫,訪問一行非常方便,但是由于同一列的數(shù)據(jù)是分開存放的,如果要針對某一列進(jìn)行查詢時,幾乎要掃描整個表才能得到結(jié)果?;谛袛?shù)據(jù)庫的壓縮,稱為行壓縮。
基于列的數(shù)據(jù)庫,因為同一列的數(shù)據(jù)物理上放在一起,所以訪問一列非常方便,也就是說如果針對某一列進(jìn)行查詢時,不需要掃描整個表,只需要掃描這一列的數(shù)據(jù)就可以了,但是訪問一行的全部字段非常不方便(又是廢話)?;诹袛?shù)據(jù)庫的壓縮,稱為列壓縮。
Oracle 通常說的 compress 功能(包括11g R2的Advanced compress),都是行壓縮,因為Oracle是個基于行的數(shù)據(jù)庫。大概的方法就是在block頭部存放一個symbol table,然后將相同的值放在那里,每行上相同的數(shù)據(jù)指向symbol table,以此來達(dá)到壓縮的目的。行壓縮的效果通常不好,因為我們知道行與行之間,其實相同的數(shù)據(jù)并不多。但是列壓縮則不同,因為相同列的數(shù)據(jù)類型相同,很容易達(dá)到很好的壓縮效果。
行壓縮和列壓縮都有其優(yōu)缺點,而Oracle的混合列壓縮技術(shù),實際上是融合了列壓縮的高壓縮比和行數(shù)據(jù)庫的訪問特性,將兩者的優(yōu)點結(jié)合起來。Oracle提出了 CU 的概念(compress unit),在一個 CU 內(nèi),是一個基于列的存儲方式,采用列壓縮,但是一個 CU 內(nèi)保存了行的所有字段信息,所以在CU與CU之間,Oracle還是一個基于行的數(shù)據(jù)庫,訪問某一行,總是只在一個 CU 內(nèi)(一個CU總是在一個block內(nèi))。
所以說混合列壓縮,結(jié)合了列壓縮和行訪問的特點,即可以提供非常高的壓縮率,又很好的保證了基于行類型的訪問。
Exadata的另一個重要功能是IO resource management,如果我們在一個Exadata上部署了很多個數(shù)據(jù)庫,可以用它來管理IO資源,這里就不作闡述了。
目前,我還沒有了解到在國內(nèi)有Exadata的應(yīng)用,而且資料也是比較少的。希望有機會可以真實的測試一下它的性能,我不懷疑他在 DSS 環(huán)境下的表現(xiàn),但是對于OLTP類型的應(yīng)用,是否真的象Oracle說的那么強勁,還有待于驗證。
當(dāng)前文章:深入Oracle數(shù)據(jù)庫機OracleExadata五大技術(shù)亮點淺析
文章轉(zhuǎn)載:http://fisionsoft.com.cn/article/cojgcii.html


咨詢
建站咨詢
