<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    阿里巴巴數(shù)據(jù)庫(kù)架構(gòu)師張瑞(Jacky)曾在個(gè)人網(wǎng)站寫(xiě)過(guò)一篇博文《Oracle Exadata技術(shù)淺析》,現(xiàn)轉(zhuǎn)載于此,供大家學(xué)習(xí):

    自從Oracle和HP推出Exadata之后,我就很關(guān)注這個(gè)產(chǎn)品,之前也寫(xiě)了一篇Oracle database machine介紹它。去年,Oracle和SUN合并后,推出了Oracle Exadata V2,相比較上一代產(chǎn)品有幾個(gè)變化:第一,使用SUN的硬件;第二,宣稱支持OLTP應(yīng)用;第三,Oracle 11g R2提供了更多的新特性。

    Exadata Smart Flash Cache

    Exadata V2整體架構(gòu)并沒(méi)有太多改變,換用了SUN的硬件,除了采用intel最新的nehalem CPU以外,每臺(tái)storage cell更是配置了384GB的flash,這也是為什么V2可以支持OLTP應(yīng)用的關(guān)鍵。

    Flash cache完全是自動(dòng)管理,Oracle會(huì)根據(jù)數(shù)據(jù)的訪問(wèn)情況,決定哪些數(shù)據(jù)放在flash cache中。所有的數(shù)據(jù)都是先被寫(xiě)到普通磁盤(pán)上,再根據(jù)訪問(wèn)情況讀入flash cache的,所以如果flash card發(fā)生故障,數(shù)據(jù)不會(huì)丟失。當(dāng)然,Oracle提供了方式,可以讓用戶手動(dòng)將表或者索引pin在flash cache中。

    在自動(dòng)管理的方式之外,Oracle還允許用戶人工創(chuàng)建flash disks,和普通磁盤(pán)一樣,這些flash disks通過(guò)ASM輸出給數(shù)據(jù)庫(kù)使用,用戶可以把一些訪問(wèn)非常頻繁的數(shù)據(jù)文件放在上面。這些flash disks不僅僅是cache了,所以ASM會(huì)在cell和cell之間做鏡像。如果某塊卡發(fā)生故障,那么整個(gè)storage cell上的flash disks會(huì)offline,保證數(shù)據(jù)不會(huì)丟失。

    Smart scan

    Smart scan是Exadata最重要的一個(gè)功能,它的作用就是把SQL放在每個(gè)cell上去運(yùn)行,然后每個(gè)cell只返回符合條件的數(shù)據(jù)給數(shù)據(jù)庫(kù),這樣就極大的降低了數(shù)據(jù)庫(kù)服務(wù)器的負(fù)載和網(wǎng)絡(luò)流量,并充分利用了cell的計(jì)算資源和IO資源。

    傳統(tǒng)方式:所有的數(shù)據(jù)都需要返回給數(shù)據(jù)庫(kù)服務(wù)器,網(wǎng)絡(luò)帶寬要求高,所有的計(jì)算在數(shù)據(jù)庫(kù)服務(wù)器上完成。

    Smart scan:只返回符合條件的數(shù)據(jù),減少網(wǎng)絡(luò)帶寬,并充分利用了cell上的計(jì)算和IO資源。

    這里有一點(diǎn)要注意,在使用smart scan時(shí),每個(gè)cell返回給DB server的是結(jié)果集,而不再是傳統(tǒng)的block,DB server完成結(jié)果集的處理,并返回給客戶端。

    Smart scan如何處理join?是我一直想要搞清楚的問(wèn)題。事實(shí)上,smart scan只能處理join filtering,而真正join的工作必須在DB Server上完成,而且smart scan僅適合于處理DSS環(huán)境的復(fù)雜join,對(duì)于OLTP類型的簡(jiǎn)單join,smart scan并不能發(fā)揮其優(yōu)勢(shì)。設(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’這個(gè)條件的過(guò)濾,然后將符合條件的emp表的數(shù)據(jù)返回到DB server,然后由DB Server完成join的工作,逐條查詢dept表(e.deptno=d.deptno)的數(shù)據(jù)。所以smart scan并不適合nested loop join(我認(rèn)為smart scan只有在適合的條件下才會(huì)啟用),只有DSS環(huán)境的大數(shù)據(jù)量復(fù)雜join才會(huì)發(fā)揮出優(yōu)勢(shì)。而且smart scan只能完成filtering的工作,而不能真正完成join的工作,這個(gè)與Greenplum數(shù)據(jù)庫(kù)是不同的(有興趣可以看我的文章,Greenplum技術(shù)淺析)。設(shè)想下面的查詢(emp和dept都是大表):

    select e.ename,d.dname from emp e, dept d where e.deptno=d.deptno;

    假設(shè)采用hash join,由于沒(méi)有任何過(guò)濾條件,smart scan只能把兩個(gè)表的數(shù)據(jù)全部返回到DB Server上進(jìn)行join操作,不過(guò)smart scan也不是一點(diǎn)用都沒(méi)有,至少還可以進(jìn)行column的過(guò)濾,只返回需要的字段就可以了。

    Oracle的文檔中,曾經(jīng)提到對(duì)于一個(gè)大表和小表join時(shí),smart scan會(huì)采用bloom filter來(lái)快速定位(可以看我以前的文章,有趣的bloom filter)。方法是把小表build成為bloom filter,然后在每個(gè)storage cell上對(duì)大表做scan,利用bloom filter快速定位符合條件的結(jié)果,并返回給DB Server作join。

    Storage index

    存儲(chǔ)索引,顧名思義是在存儲(chǔ)級(jí)別建立的索引,簡(jiǎn)單的說(shuō)就是為表中的每一列數(shù)據(jù)建立一個(gè)索引,每個(gè)index entry記錄一段數(shù)據(jù)區(qū)間的最大值,最小值以及它們的物理位置,文檔上說(shuō)1MB數(shù)據(jù)對(duì)應(yīng)一條index entry,見(jiàn)下圖:

    如果我們查詢B<2,或者B>8的數(shù)據(jù),根據(jù)存儲(chǔ)索引,我們就可以跳過(guò)這些不在min和max之間的數(shù)據(jù)塊,極大的提高了掃描的速度,這就是存儲(chǔ)索引的意義。

    Hybrid Columnar Compressed

    首先我們要搞清楚,什么是行壓縮,什么叫列壓縮。我們熟悉的數(shù)據(jù)庫(kù),如Oracle,MySQL等都是基于行的數(shù)據(jù)庫(kù),就是行的不同字段物理上存放在一起,還有一種是基于列的數(shù)據(jù)庫(kù),就是每個(gè)字段的不同行物理上存放在一起。他們的優(yōu)缺點(diǎn)同樣突出:

    基于行的數(shù)據(jù)庫(kù),訪問(wèn)一行非常方便,但是由于同一列的數(shù)據(jù)是分開(kāi)存放的,如果要針對(duì)某一列進(jìn)行查詢時(shí),幾乎要掃描整個(gè)表才能得到結(jié)果。基于行數(shù)據(jù)庫(kù)的壓縮,稱為行壓縮。

    基于列的數(shù)據(jù)庫(kù),因?yàn)橥涣械臄?shù)據(jù)物理上放在一起,所以訪問(wèn)一列非常方便,也就是說(shuō)如果針對(duì)某一列進(jìn)行查詢時(shí),不需要掃描整個(gè)表,只需要掃描這一列的數(shù)據(jù)就可以了,但是訪問(wèn)一行的全部字段非常不方便(又是廢話)。基于列數(shù)據(jù)庫(kù)的壓縮,稱為列壓縮。

    Oracle通常說(shuō)的compress功能(包括11g R2的Advanced compress),都是行壓縮,因?yàn)镺racle是個(gè)基于行的數(shù)據(jù)庫(kù)。大概的方法就是在block頭部存放一個(gè)symbol table,然后將相同的值放在那里,每行上相同的數(shù)據(jù)指向symbol table,以此來(lái)達(dá)到壓縮的目的。行壓縮的效果通常不好,因?yàn)槲覀冎佬信c行之間,其實(shí)相同的數(shù)據(jù)并不多。但是列壓縮則不同,因?yàn)橄嗤械臄?shù)據(jù)類型相同,很容易達(dá)到很好的壓縮效果。

    行壓縮和列壓縮都有其優(yōu)缺點(diǎn),而Oracle的混合列壓縮技術(shù),實(shí)際上是融合了列壓縮的高壓縮比和行數(shù)據(jù)庫(kù)的訪問(wèn)特性,將兩者的優(yōu)點(diǎn)結(jié)合起來(lái)。Oracle提出了CU的概念(compress unit),在一個(gè)CU內(nèi),是一個(gè)基于列的存儲(chǔ)方式,采用列壓縮,但是一個(gè)CU內(nèi)保存了行的所有字段信息,所以在CU與CU之間,Oracle還是一個(gè)基于行的數(shù)據(jù)庫(kù),訪問(wèn)某一行,總是只在一個(gè)CU內(nèi)。每個(gè)CU由一些連續(xù)的block組成,CU header中記錄了每一行的各個(gè)列在CU中的分布情況,在混合列壓縮模式下,一行通常是跨多個(gè)block的。

    所以說(shuō)混合列壓縮,結(jié)合了列壓縮和行訪問(wèn)的特點(diǎn),即可以提供非常高的壓縮率,又很好的保證了基于行類型的訪問(wèn)。

    Exadata的另一個(gè)重要功能是IO resource management,如果我們?cè)谝粋€(gè)Exadata上部署了很多個(gè)數(shù)據(jù)庫(kù),可以用它來(lái)管理IO資源,這里就不作闡述了。

    目前,我還沒(méi)有了解到在國(guó)內(nèi)有Exadata的應(yīng)用,而且資料也是比較少的。希望有機(jī)會(huì)可以真實(shí)的測(cè)試一下它的性能,我不懷疑他在DSS環(huán)境下的表現(xiàn),但是對(duì)于OLTP類型的應(yīng)用,是否真的象Oracle說(shuō)的那么強(qiáng)勁,還有待于驗(yàn)證。

    原文鏈接:http://www.hellodba.net/2010/02/oracle_exadata.html



                                                                                                           --    學(xué)海無(wú)涯
            

    主站蜘蛛池模板: AAAAA级少妇高潮大片免费看| 国产精品1024在线永久免费| 国产精品视_精品国产免费| 日本视频免费观看| 亚洲va国产va天堂va久久| 天天摸夜夜摸成人免费视频| 未满十八私人高清免费影院| 老色鬼久久亚洲AV综合| 日韩成全视频观看免费观看高清 | 亚洲欧洲日产v特级毛片| 黄网址在线永久免费观看| 视频免费在线观看| 国产午夜亚洲精品国产| 在线观看亚洲精品福利片| 中文字幕av无码无卡免费| 久久久WWW免费人成精品| 久久精品亚洲AV久久久无码 | 亚洲精品视频免费| 亚洲成年人免费网站| 日本黄页网址在线看免费不卡| 91在线精品亚洲一区二区| 亚洲成网777777国产精品| 成人免费激情视频| 91在线视频免费观看| 亚洲AV成人精品一区二区三区| 亚洲AV无码国产精品麻豆天美| 国产美女被遭强高潮免费网站| 最近中文字幕大全中文字幕免费| 国产亚洲精品免费| 精品亚洲AV无码一区二区三区| 亚洲成AV人片在线观看ww| 国产免费资源高清小视频在线观看| 蜜臀AV免费一区二区三区| 久久最新免费视频| 亚洲av午夜国产精品无码中文字| 亚洲男女性高爱潮网站| 国产精品亚洲а∨无码播放| 免费大片在线观看网站| 成**人免费一级毛片| 亚洲黄色片免费看| 久久国产免费一区二区三区|