牛 雷 孫忠林山東科技大學(xué)信息科學(xué)與工程學(xué)院牛雷,男,山東科技大學(xué) 信息科學(xué)與工程學(xué)院,學(xué)生,研究方向:數(shù)據(jù)庫(kù)。
?
基于Oracle數(shù)據(jù)庫(kù)的EXP工具性能調(diào)優(yōu)
牛 雷 孫忠林
山東科技大學(xué)信息科學(xué)與工程學(xué)院
牛雷,男,山東科技大學(xué) 信息科學(xué)與工程學(xué)院,學(xué)生,研究方向:數(shù)據(jù)庫(kù)。
link
評(píng)估值15萬(wàn)
appraisement
行業(yè)曲線
industry
數(shù)據(jù)庫(kù)備份技術(shù)對(duì)于數(shù)據(jù)被破壞后的可修復(fù)性,以及預(yù)防數(shù)據(jù)丟失的方面起到了非常重要的作用,而EXP工具是數(shù)據(jù)庫(kù)備份常用的工具之一。本文將探索如何對(duì)EXP工具的性能進(jìn)行優(yōu)化,從而使得數(shù)據(jù)庫(kù)文件的備份變得更加高效。從Oracle10g以后,開(kāi)始支持EXPDP命令進(jìn)行導(dǎo)出,本文對(duì)兩種導(dǎo)出方法的優(yōu)化進(jìn)行介紹。
隨著科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)數(shù)據(jù)庫(kù)中的數(shù)據(jù)充當(dāng)著重要的角色。黑客攻擊,系統(tǒng)故障等對(duì)計(jì)算機(jī)數(shù)據(jù)庫(kù)造成嚴(yán)重?fù)p壞,導(dǎo)致數(shù)據(jù)嚴(yán)重丟失。一旦數(shù)據(jù)丟失,將會(huì)耗費(fèi)巨大的工作量去彌補(bǔ)數(shù)據(jù),也可能因此造成不可挽回的損失。此時(shí),數(shù)據(jù)庫(kù)的備份技術(shù)起到至關(guān)重要的作用,而備份的效率對(duì)數(shù)據(jù)庫(kù)的性能又具有很大的影響。對(duì)EXP導(dǎo)出工具及使用EXPD可以快速提高備份的效率,是解決大量數(shù)據(jù)備份時(shí)間效率低下的有效工具。
首先對(duì)EXP工具的使用進(jìn)行介紹
在Oracle環(huán)境下,exp工具的使用格式為
expusername/password@connStr file=user_date.dmp log=user_date.log
username指的是Oracle數(shù)據(jù)庫(kù)用戶名,password指的是數(shù)據(jù)庫(kù)用戶密碼,connStr指的是數(shù)據(jù)庫(kù)的連接字符串,file為數(shù)據(jù)庫(kù)備份后的文件名,log則是表示備份日志文件。
為EXP設(shè)置相應(yīng)的參數(shù),從而達(dá)到優(yōu)化的目的。
設(shè)置buffer參數(shù)exp username/password@connStr file=user_date.dmp log=user_date.logbuffer=512000000
buffer的單位是位/bytes,buffer設(shè)置的為數(shù)據(jù)緩沖區(qū)的大小,數(shù)據(jù)緩沖區(qū)的大小經(jīng)試驗(yàn)證明并不是越大越好。
buffer=buffersize
這個(gè)參數(shù)用來(lái)指定緩沖區(qū)的大小,以字節(jié)為單位,緩沖區(qū)用來(lái)讀取或者裝載數(shù)據(jù)庫(kù)中的行數(shù)。決定了一個(gè)被export工具導(dǎo)出的序列中,導(dǎo)出行數(shù)的最大值是多少。
buffersize/maximum_row_size
如果將這個(gè)參數(shù)指定為0,那么導(dǎo)出數(shù)據(jù)時(shí)每次導(dǎo)出一行。當(dāng)表中含有數(shù)據(jù)類型LONG,LOB,BFILE,REF,ROWID型的列時(shí),export默認(rèn)一次導(dǎo)出一行。buffer只應(yīng)用于常規(guī)路徑導(dǎo)出,而對(duì)直接路徑導(dǎo)出不起作用。這個(gè)默認(rèn)設(shè)置是為了保證系統(tǒng)運(yùn)行的獨(dú)立性。
exp username/password@connStr file=user_date.dmp log=user_date.logdirect=y recordlength=65536
當(dāng)使用直接路徑導(dǎo)出時(shí),數(shù)據(jù)直接從磁盤讀出到高速緩沖區(qū),然后再寫入到導(dǎo)出文件當(dāng)中。這也同時(shí)意味著SQL命令處理層可以被繞過(guò),因?yàn)閿?shù)據(jù)已是導(dǎo)出時(shí)期望的格式。當(dāng)使用direct參數(shù)時(shí),buffer參數(shù)失效,并且direct參數(shù)不支持query子句,不支持表空間導(dǎo)出。與recordlength參數(shù)(IO緩沖參數(shù))搭配使用。
exp username/password@connStr file=user_date.dmp log=user_date.logconsistent=N
consistent參數(shù)功能為確定交叉表的一致性。在進(jìn)行數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出的過(guò)程中,此參數(shù)表示是否維持?jǐn)?shù)據(jù)庫(kù)中表結(jié)構(gòu)的一致性。當(dāng)將此參數(shù)設(shè)置為Y,在進(jìn)行導(dǎo)出的過(guò)程中,外部系統(tǒng)及相關(guān)用戶同樣可以查詢與之相關(guān)的數(shù)據(jù)庫(kù)表,并且能夠獲取到一致性數(shù)據(jù)。在進(jìn)行導(dǎo)出操作之前修改以及更新的數(shù)據(jù)不會(huì)被外部系統(tǒng)感知,但仍要占用數(shù)據(jù)庫(kù)的回滾段。當(dāng)資源緊張時(shí),將此參數(shù)設(shè)置為N,此舉既減少操作占用的回滾資源,又可提高導(dǎo)出速度。
UNIX中的管道技術(shù)可以加快EXP工具的導(dǎo)出速度。管道是從一個(gè)程序進(jìn)程向另一個(gè)程序進(jìn)程單項(xiàng)傳送信息的技術(shù)。管道是一種偽文件。它存在于內(nèi)存中, 用于快速I/O操作。管道是一種存于內(nèi)存中的偽文件,用來(lái)進(jìn)行快速的輸入輸出操作。管道的緩沖區(qū)采用先進(jìn)先出的機(jī)制,寫管道的進(jìn)程將數(shù)據(jù)寫到緩沖區(qū)的頭部,讀管道進(jìn)程則讀取管道尾部。建立管道的命令為”mknod filename q”,compress 為UNIX數(shù)據(jù)壓縮工具。管道將一個(gè)進(jìn)程的輸入作為另一個(gè)進(jìn)行的數(shù)據(jù),適用于大數(shù)據(jù)量導(dǎo)出的情況,利用管道,可以直接生成最終的壓縮文件,與不壓縮直接導(dǎo)出的時(shí)間性能相當(dāng)。使用管道,不但解決了磁盤空間不足的問(wèn)題,還省去了壓縮的時(shí)間,進(jìn)一步提高了導(dǎo)出數(shù)據(jù)的時(shí)間性能。
導(dǎo)出數(shù)據(jù)實(shí)例:
% mknod /tmp/exp_pipe q # Make the pipe
% compress < /tmp/exp_pipe > export.dmp.Z & # Background compress
膝蓋一軟,我倒了下去,臉碰到了地板,感覺(jué)涼涼的。有什么東西再次重?fù)袅宋业捏w側(cè),我本能地尖叫起來(lái),這是開(kāi)場(chǎng)以來(lái)我第一次喊叫。一種尖銳刺耳的聲音,那是別人的吧,好像不屬于我。體側(cè)再次遭到重?fù)簦沂裁匆部床灰?jiàn)了,連眼前是什么都不知道,一片漆黑。有人喊:“夠了!”腦子里突然閃過(guò)很多念頭,但我一個(gè)都沒(méi)記住。
% exp file=/tmp/exp_pipe # Export to the pipe
Expdp一般情況可以替代Exp,但是還無(wú)法完全替代,主要是它需要在數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行,而Exp可以在任何一臺(tái)客戶端上執(zhí)行。另外,Expdp在導(dǎo)出大型分區(qū)表(1T以上)的時(shí)候,分析時(shí)間過(guò)長(zhǎng),并且存在一些錯(cuò)誤。所以,有些用戶仍然會(huì)使用Exp來(lái)進(jìn)行數(shù)據(jù)備份。
數(shù)據(jù)泵導(dǎo)出與EXP相比有很大的性能提高,其中產(chǎn)生最大影響的就是paralle參數(shù),在使用數(shù)據(jù)泵的情況下提高導(dǎo)出速度,就必須設(shè)置并行參數(shù)。
expdp username/passwordfull=y directory=dump dumpfile=orcl_%U.dmpparallel=4
directory參數(shù)指定導(dǎo)出文件存放位置,full參數(shù)表名進(jìn)行全庫(kù)導(dǎo)出,默認(rèn)為n,dumpfile參數(shù)指定導(dǎo)出后的文件名,dumpfile 參數(shù)擁有一個(gè)通配符 %U,它指示文件將按需要?jiǎng)?chuàng)建,格式將為orcl_nn.dmp,其中nn 從 01 開(kāi)始,然后按需要向上增加。
那么EXPDP將為parallel創(chuàng)建4個(gè)文件,orcl_01. dmp, orcl_02.dmp, orcl_03.dmp, orcl_04.dmp,每個(gè)文件的大小會(huì)因?yàn)檫M(jìn)程而不同。通過(guò)設(shè)置filesize參數(shù)就可指定每個(gè)文件的最大值。當(dāng)文件的大小超過(guò)最大值時(shí),就會(huì)創(chuàng)建一個(gè)新的文件。
圖1 導(dǎo)出時(shí)間比較圖
本次實(shí)驗(yàn)采用數(shù)據(jù)來(lái)自于北京大學(xué)DAIM研究組,數(shù)據(jù)集來(lái)自一個(gè)支持用戶收藏發(fā)布網(wǎng)上資源的共享站點(diǎn)Delicious.com,這類站點(diǎn)支持用戶對(duì)資源添加標(biāo)注和關(guān)注其他用戶等社交功能。本次實(shí)驗(yàn)主要利用其記錄用戶在某個(gè)時(shí)刻對(duì)某個(gè)資源的標(biāo)簽記錄的數(shù)據(jù),對(duì)應(yīng)字段分別為USERID,POSTID,TAGID,DATE1。
實(shí)驗(yàn)所用備份步驟簡(jiǎn)述如下:
(1)開(kāi)啟Oracle數(shù)據(jù)庫(kù)服務(wù),打開(kāi)命令提示符界面;
(2)使用命令EXP及參數(shù)或EXPDP進(jìn)行導(dǎo)出備份操作;
(3)對(duì)各個(gè)參數(shù)下的備份時(shí)間進(jìn)行比較;
(4)得出的時(shí)間性能結(jié)果圖。
根據(jù)導(dǎo)出實(shí)驗(yàn)對(duì)比,比較在相同的數(shù)據(jù)大小下,導(dǎo)出工具的時(shí)間性能比較。如圖1所示。
通過(guò)實(shí)驗(yàn)可以看出,在較小的數(shù)據(jù)量的條件下,EXPDP工具的時(shí)間性能低于EXP工具導(dǎo)出的時(shí)間性能,EXP工具使用不同參數(shù)進(jìn)行優(yōu)化時(shí),時(shí)間性能也有差異,用戶可以根據(jù)自身需要選擇合適的參數(shù),或者使用參數(shù)組合來(lái)達(dá)到加快導(dǎo)出速度的目的。
10.3969/j.issn.101- 8972.2016.12.007