數(shù)據(jù)庫(kù)索引范文

時(shí)間:2023-03-23 20:48:59

導(dǎo)語(yǔ):如何才能寫(xiě)好一篇數(shù)據(jù)庫(kù)索引,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

數(shù)據(jù)庫(kù)索引

篇1

【關(guān)鍵詞】空間數(shù)據(jù)庫(kù);索引技術(shù);Web技術(shù);高維空間

隨著空間數(shù)據(jù)應(yīng)用的增加,存儲(chǔ)空間開(kāi)銷(xiāo)的加大以及索引空間重疊的劇增,空間數(shù)據(jù)庫(kù)的索引性能下降。為提高空間查詢(xún)的效率,空間數(shù)據(jù)庫(kù)索引技術(shù)應(yīng)運(yùn)而生。下面我們將從四個(gè)方面來(lái)對(duì)空間數(shù)據(jù)庫(kù)索引技術(shù)進(jìn)行探討。

1.高維空間索引技術(shù)

隨著三維地理信息系統(tǒng)、多媒體數(shù)據(jù)庫(kù)及時(shí)空數(shù)據(jù)庫(kù)的研究和發(fā)展,對(duì)多維空間目標(biāo)的搜索及更新功能的要求越來(lái)越迫切。而目前常用的空間索引技術(shù),主要是針對(duì)一維或二維空間中的空間數(shù)據(jù)。將這些索引技術(shù)運(yùn)用于三維或更高維空間數(shù)據(jù)時(shí),其查詢(xún)效率將大大降低,有時(shí)索引機(jī)制甚至不起到作用。因此,如何索引這些高維數(shù)據(jù)是一個(gè)很大的挑戰(zhàn),有必要研究新的可擴(kuò)展的高維索引技術(shù),使之不但能有效地檢索一維或二維空間數(shù)據(jù),而且能有效地檢索高維的空間數(shù)據(jù)。

高維空間數(shù)據(jù)索引的一種實(shí)現(xiàn)方法是降維,然后再降維后的子空間里運(yùn)用一維或多維空間索引技術(shù)。其降維的方法包括空間填充曲線、奇異值分解、距離映射算法等。由于高維空間數(shù)據(jù)索引結(jié)構(gòu)的復(fù)雜性,高維空間數(shù)據(jù)索引技術(shù)的研究仍然存在很多問(wèn)題有待于進(jìn)一步探討。

2.基于空間關(guān)系的索引技術(shù)

基于空間關(guān)系的數(shù)據(jù)索引技術(shù)在空間數(shù)據(jù)庫(kù)中占有十分重要的地位。這是因?yàn)椋臻g數(shù)據(jù)庫(kù)涉及對(duì)現(xiàn)實(shí)世界大量具有不規(guī)則幾何形狀空間目標(biāo)的處理,這些目標(biāo)之間存在著復(fù)雜的空間關(guān)系。很多查詢(xún)和分析操作都是基于目標(biāo)間空間關(guān)系的。只有在相應(yīng)的空間數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)上,依據(jù)目標(biāo)間的空間關(guān)系建立良好的索引機(jī)制,才有可能有效地提高對(duì)空間數(shù)據(jù)的處理效率,尤其是空間查詢(xún)的效率。否則,查詢(xún)某個(gè)空間目標(biāo)時(shí),必須將該目標(biāo)的特征值與空間數(shù)據(jù)庫(kù)中存儲(chǔ)的所有目標(biāo)進(jìn)行一一比較,以最終確定要查找的目標(biāo),這顯然是令人難以容忍的。由此可見(jiàn),基于空間關(guān)系的空間索引技術(shù)研究具有十分重要的意義。

目前的空間索引技術(shù)都有其固定的優(yōu)勢(shì)和不足,其共同特點(diǎn)是基于空間目標(biāo)的空間位置來(lái)建立相應(yīng)的索引結(jié)構(gòu),其主要目的是提高空間數(shù)據(jù)庫(kù)系統(tǒng)中區(qū)域查詢(xún)效率。然而目前的空間索引技術(shù)難以根據(jù)目標(biāo)之間的空間關(guān)系來(lái)建立有效的檢索機(jī)制,從而極大地影響了系統(tǒng)的功能和效率。若能根據(jù)空間目標(biāo)之間的某些空間關(guān)系來(lái)動(dòng)態(tài)地相應(yīng)的索引機(jī)制,使之能夠依據(jù)目標(biāo)間的空間關(guān)系,快捷地查找到相關(guān)的目標(biāo),這必將極大地提高空間查詢(xún)和空間分析的效率,從而有效地?cái)U(kuò)充空間數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)組織、數(shù)據(jù)分析和數(shù)據(jù)維護(hù)功能。

3.基于Web技術(shù)的空間索引技術(shù)

與傳統(tǒng)的空間數(shù)據(jù)庫(kù)相比,基于Web的空間數(shù)據(jù)庫(kù)在體系結(jié)構(gòu)上有了根本的轉(zhuǎn)變,它主要包括以下幾部分:(1)基于Internet/Ineranet環(huán)境,采用了TCP/IP通信協(xié)議,大大擴(kuò)展了空間信息共享范圍。(2)在應(yīng)用層采用了HTTP協(xié)議,客戶(hù)端只需要有通用的瀏覽器即可,不需要有特殊的軟件,大大增強(qiáng)了系統(tǒng)的性能。(3)應(yīng)用的分布性??梢愿鶕?jù)網(wǎng)絡(luò)帶寬、計(jì)算機(jī)性能等一系列資源狀況,將應(yīng)用按照功能分布到不同的結(jié)點(diǎn)上,如分布到多臺(tái)服務(wù)器上或是將一部分簡(jiǎn)單應(yīng)用分布到客戶(hù)機(jī)上,復(fù)雜的應(yīng)用仍交給服務(wù)器執(zhí)行,這樣可以大大提高系統(tǒng)的性能。(4)空間數(shù)據(jù)的分布性??臻g數(shù)據(jù)可以根據(jù)其本身具備的空間特征存儲(chǔ)在最適宜的位置上,從而大大簡(jiǎn)化了對(duì)空間數(shù)據(jù)的管理。

基于Web的空間數(shù)據(jù)庫(kù)為信息的高度共享提供了可能,它改變了以往數(shù)據(jù)信息傳輸、、共享及應(yīng)用的過(guò)程和方式,是空間信息系統(tǒng)發(fā)展的必然趨勢(shì)?;赪eb的空間數(shù)據(jù)庫(kù)目前還處在發(fā)展階段,還存在著許多關(guān)鍵問(wèn)題尚未突破,空間數(shù)據(jù)的存儲(chǔ)、檢索及相關(guān)索引技術(shù)結(jié)構(gòu)的建立即為其中等待解決的難題之一。

4.基于空間數(shù)據(jù)倉(cāng)庫(kù)的索引技術(shù)

隨著信息技術(shù)的飛速發(fā)展和空間數(shù)據(jù)庫(kù)業(yè)界對(duì)海量空間數(shù)據(jù)存儲(chǔ)、管理、分析和交換的需求,以面向事務(wù)處理為主的空間數(shù)據(jù)庫(kù)系統(tǒng)已不能滿(mǎn)足需要,空間信息系統(tǒng)開(kāi)始從管理轉(zhuǎn)向決策處理,空間數(shù)據(jù)倉(cāng)庫(kù)就是為滿(mǎn)足這種新的需求而提出的空間信息集成方案,它與傳統(tǒng)空間數(shù)據(jù)庫(kù)的主要差別為面向主題的數(shù)據(jù)組織和管理、數(shù)據(jù)的集成、數(shù)據(jù)的維護(hù)與管理及空間數(shù)據(jù)的時(shí)空序列變化這四個(gè)方面。

空間數(shù)據(jù)倉(cāng)庫(kù)是對(duì)空間數(shù)據(jù)進(jìn)行管理的數(shù)據(jù)倉(cāng)庫(kù),它將各種空間數(shù)據(jù)集成在一起提供給用戶(hù)。由于空間數(shù)據(jù)本身具有的特點(diǎn),空間數(shù)據(jù)倉(cāng)庫(kù)具有許多更加復(fù)雜的特性與關(guān)鍵技術(shù),如空間數(shù)據(jù)倉(cāng)庫(kù)內(nèi)數(shù)據(jù)的組織與顯示,空間數(shù)據(jù)變換,客戶(hù)端數(shù)據(jù)分析等,空間數(shù)據(jù)的高效存儲(chǔ)和數(shù)據(jù)索引技術(shù)也是空間數(shù)據(jù)倉(cāng)庫(kù)的關(guān)鍵技術(shù)之一??臻g數(shù)據(jù)庫(kù)為了支持高層次的決策分析需要大量的數(shù)據(jù)。這些數(shù)據(jù)可能分布在不同的已有應(yīng)用中,存儲(chǔ)在不同的平臺(tái)和數(shù)據(jù)庫(kù)中。空間數(shù)據(jù)倉(cāng)庫(kù)則根據(jù)主題通過(guò)專(zhuān)業(yè)模型對(duì)不同源數(shù)據(jù)庫(kù)中的原始業(yè)務(wù)數(shù)據(jù)進(jìn)行抽取和聚集,形成一個(gè)多維視角,從而為用戶(hù)提供一個(gè)綜合的、面向分析的決策支持環(huán)境。這一過(guò)程的完成需要一套高效存儲(chǔ)和數(shù)據(jù)索引技術(shù)作為保證才能完成。隨著空間數(shù)據(jù)倉(cāng)庫(kù)研究的不斷發(fā)展,基于數(shù)據(jù)倉(cāng)庫(kù)的空間數(shù)據(jù)索引技術(shù)也將得到不斷的完善和發(fā)展。

5.結(jié)束語(yǔ)

空間數(shù)據(jù)索引是提高空間數(shù)據(jù)查詢(xún)最有效的方法,也最難全面掌握的技術(shù),因?yàn)檎_的索引機(jī)制可能使查詢(xún)效率提高一萬(wàn)倍,而無(wú)效的索引可能會(huì)浪費(fèi)了數(shù)據(jù)庫(kù)空間,甚至大大降低查詢(xún)性能。采用不依賴(lài)于商用數(shù)據(jù)庫(kù)空間擴(kuò)展技術(shù)的空間數(shù)據(jù)引擎,具有良好的空間存儲(chǔ)和訪問(wèn)效率,移植性好,靈活性高,更易于提高和完善,對(duì)于應(yīng)用模型的設(shè)計(jì)也更為有利。缺點(diǎn)是實(shí)現(xiàn)難度大,且不支持?jǐn)U展SQL查詢(xún),數(shù)據(jù)維護(hù)復(fù)雜。商用空間數(shù)據(jù)庫(kù)的空間擴(kuò)展最大的優(yōu)點(diǎn)在于對(duì)象級(jí)的數(shù)據(jù)存儲(chǔ)機(jī)制和支持?jǐn)U展SQL的查詢(xún)。采用數(shù)據(jù)庫(kù)廠商提供的抽象數(shù)據(jù)類(lèi)型存儲(chǔ)空間數(shù)據(jù),使得數(shù)據(jù)共享和互操作更有潛力。目前的各種商用空間數(shù)據(jù)庫(kù)引擎或空間擴(kuò)展技術(shù)有待于進(jìn)一步研究。

參考文獻(xiàn):

[1]談國(guó)新.一體化空間數(shù)據(jù)結(jié)構(gòu)及其索引機(jī)制研究.測(cè)繪學(xué)報(bào),1998,27(4):293299

[2]孫小燕,譚勇桂.空間索引技術(shù)―回顧與展望.計(jì)算機(jī)工程與應(yīng)用.2002,24:197200

篇2

1.1 索引對(duì)象的概念

數(shù)據(jù)庫(kù)對(duì)象是一種邏輯結(jié)構(gòu)的集合,索引是供用戶(hù)快速查找到記錄的數(shù)據(jù)庫(kù)結(jié)構(gòu),在邏輯上和物理上都獨(dú)立于表的數(shù)據(jù)。索引可以在表內(nèi)創(chuàng)建一個(gè)或多個(gè)列的組合,當(dāng)建立索引以后表中數(shù)據(jù)會(huì)按照索引創(chuàng)建語(yǔ)句所定義的排序方式返回給用戶(hù)。索引有多種類(lèi)型,除了標(biāo)準(zhǔn)索引外,還包括唯一索引、位圖索引、組合索引、基于函數(shù)的索引、反向鍵索引等。

建立索引能夠提高 SQL 語(yǔ)句執(zhí)行的性能,減少磁盤(pán)I/O。無(wú)索引查詢(xún),通常是全表搜索后才會(huì)得到結(jié)果,全表搜索會(huì)讓數(shù)據(jù)庫(kù)服務(wù)程序遍歷表中的所有記錄然后返回結(jié)果;而建立索引后查詢(xún),可以讓數(shù)據(jù)庫(kù)服務(wù)程序快速地定位到表中的確定行。當(dāng)表被刪除時(shí)所有與表相關(guān)的索引也將被刪除。

索引可以被創(chuàng)建、重建和刪除,索引建立語(yǔ)句:CREATE INDEX item_index ON itemfile (itemcode) TABLESPACE index_tbs;索引重建語(yǔ)句:ALTER INDEX item_index REBUILD;索引刪除語(yǔ)句:DROP INDEX item_index。

創(chuàng)建索引是為了提升數(shù)據(jù)庫(kù)查詢(xún)性能,在使用索引時(shí)需要注意以下情況:

1) 對(duì)于小表來(lái)說(shuō),使用索引對(duì)于性能不會(huì)有任何提高;

2) 當(dāng)索引列中有極多的不同的數(shù)據(jù)和空值時(shí)索引會(huì)使性能有極大的提高;

3) 經(jīng)常執(zhí)行更新、修改操作的字段需要謹(jǐn)慎創(chuàng)建索引,因?yàn)楦滤饕拈_(kāi)銷(xiāo)會(huì)降低創(chuàng)建索引所期望獲得的性能;

4) 不要將索引與表存儲(chǔ)在同一個(gè)驅(qū)動(dòng)器上,分開(kāi)存儲(chǔ)會(huì)去掉訪問(wèn)的沖突從而使結(jié)果返回得更快。

1.2 索引對(duì)象優(yōu)化方法

在業(yè)務(wù)系統(tǒng)中針對(duì)索引對(duì)象的優(yōu)化,主要包括三種方式:一是重建過(guò)高的索引層次;二是清除無(wú)效的索引;三是對(duì)索引碎片的清理。

2.2 風(fēng)險(xiǎn)防范措施

針對(duì)數(shù)據(jù)庫(kù)對(duì)象的優(yōu)化,總體應(yīng)該遵循如下的風(fēng)險(xiǎn)防范原則:

1) 確保數(shù)據(jù)庫(kù)備份完整可用;

2) 所有操作和檢查環(huán)節(jié)都使用事前完成并預(yù)演通過(guò)的腳本,避免臨時(shí)修改腳本;

3) 每部分完成,通過(guò)檢查確認(rèn)無(wú)誤,再進(jìn)行其它部分,避免互相干擾;

4) 專(zhuān)家現(xiàn)場(chǎng)支持,及時(shí)處理突發(fā)問(wèn)題。

在遵循上述原則的基礎(chǔ)之上,對(duì)索引對(duì)象的優(yōu)化需要注意以下風(fēng)險(xiǎn):

1) 監(jiān)測(cè)時(shí)間不夠,在一個(gè)監(jiān)測(cè)周期內(nèi)未操作過(guò)表,監(jiān)測(cè)過(guò)后又用到了這個(gè)表,需要索引,但此時(shí)此索引已被列為被優(yōu)化的對(duì)象;

2) 監(jiān)控過(guò)后,需要取消在用索引的監(jiān)控;

3) 監(jiān)控時(shí)如果rebuild index ,會(huì)取消監(jiān)控,同時(shí)索引標(biāo)記為已使用,這種情況下會(huì)影響監(jiān)控效果;

4) 監(jiān)控時(shí)如果在做統(tǒng)計(jì)分析時(shí)涉及到此索引,索引也會(huì)標(biāo)記為已使用,同樣影響監(jiān)控效果。

為避免上述風(fēng)險(xiǎn)發(fā)生,通常采用的措施是在監(jiān)控期間停止database、schema、table、index等級(jí)別的索引收集,避免影響監(jiān)控效果。

2.3 優(yōu)化效果分析

數(shù)據(jù)庫(kù)級(jí)別的性能數(shù)據(jù)主要是以下關(guān)鍵指標(biāo):響應(yīng)時(shí)間、CPU時(shí)間、等待時(shí)間、物理讀,這些指標(biāo)可以看出目前平均每事務(wù)的反應(yīng)速度、每事務(wù)需要消耗的CPU與IO量。為了得到優(yōu)化的效果,還需要保證進(jìn)行數(shù)據(jù)對(duì)比的時(shí)間內(nèi),數(shù)據(jù)庫(kù)的負(fù)載基本相同。數(shù)據(jù)庫(kù)的負(fù)載指標(biāo)一般以執(zhí)行的事務(wù)數(shù)、Redo size等指標(biāo)來(lái)表示。表1是某業(yè)務(wù)系統(tǒng)的這些指標(biāo)在索引對(duì)象優(yōu)化前后的對(duì)比數(shù)據(jù)。

通過(guò)索引對(duì)象的優(yōu)化,可以從對(duì)比表中明顯看出性能得到了大幅提升,影響較大的數(shù)據(jù)庫(kù)操作瓶頸主要集中在大表的查詢(xún)操作、關(guān)聯(lián)表的更新操作、大業(yè)務(wù)數(shù)據(jù)的統(tǒng)計(jì)分析操作等,在優(yōu)化后其操作響應(yīng)時(shí)間已經(jīng)能夠滿(mǎn)足用戶(hù)的業(yè)務(wù)需求。這些數(shù)據(jù)對(duì)比符合數(shù)據(jù)庫(kù)索引優(yōu)化方案的預(yù)期成效,也說(shuō)明索引對(duì)象對(duì)數(shù)據(jù)庫(kù)性能的重要影響。

3 總結(jié)

企業(yè)的業(yè)務(wù)系統(tǒng)經(jīng)過(guò)長(zhǎng)期的運(yùn)作,積累了大量的業(yè)務(wù)數(shù)據(jù),同時(shí)隨著業(yè)務(wù)增長(zhǎng)、流程優(yōu)化、人員變動(dòng)等因素,會(huì)造成系統(tǒng)性能瓶頸。此時(shí),需要運(yùn)維和管理人員根據(jù)實(shí)際需求,按照系統(tǒng)優(yōu)化原則,制定詳細(xì)、多番論證的優(yōu)化方案,對(duì)系統(tǒng)實(shí)施優(yōu)化,這樣才能滿(mǎn)足用戶(hù)不斷變化、業(yè)務(wù)不斷增長(zhǎng)的需求。該文通過(guò)詳述數(shù)據(jù)庫(kù)索引對(duì)象的優(yōu)化方法、應(yīng)用案例,闡述了索引對(duì)象對(duì)系統(tǒng)性能影響的范圍和程度,并就優(yōu)化方案給出了應(yīng)遵循的原則和風(fēng)險(xiǎn)防范措施。在性能優(yōu)化中,針對(duì)數(shù)據(jù)庫(kù)性能瓶頸,索引對(duì)象優(yōu)化只是其中最常見(jiàn)的一種方案,具體優(yōu)化還需要根據(jù)對(duì)系統(tǒng)長(zhǎng)時(shí)間監(jiān)測(cè)情況的分析,做出正確選擇。

參考文獻(xiàn):

[1] 羅海濱,范玉順,吳澄.工作流技術(shù)綜述[J].北京;軟件學(xué)報(bào),2000,11 (7).

[2] 蓋國(guó)強(qiáng).深入淺出Oracle數(shù)據(jù)庫(kù)——DBA入門(mén)、進(jìn)階與診斷案例[M].北京:人民郵電出版社,2006.

篇3

【關(guān)鍵詞】空間數(shù)據(jù)庫(kù),索引,查詢(xún)優(yōu)化

中圖分類(lèi)號(hào):G250文獻(xiàn)標(biāo)識(shí)碼: A

一、前言

近年來(lái),OracleSpatial的空間數(shù)據(jù)庫(kù)正在不斷的完善,但依然存在一些問(wèn)題和不足需要改進(jìn),在技術(shù)快速發(fā)展的新時(shí)期,不斷完善OracleSpatial的空間數(shù)據(jù)庫(kù)的索引與查詢(xún)優(yōu)化,對(duì)空間數(shù)據(jù)庫(kù)的發(fā)展有著重要意義。

二、查詢(xún)模型

OracleSpatial使用雙層查詢(xún)模型來(lái)解決空間查詢(xún)問(wèn)題,即初級(jí)過(guò)濾操作和二級(jí)過(guò)濾操作。經(jīng)過(guò)兩次過(guò)濾,將返回精確的查詢(xún)結(jié)果集,在的級(jí)操作過(guò)濾步驟中,近似匹配滿(mǎn)足條件的一組候選對(duì)象,這些對(duì)象有可能滿(mǎn)足給定的空間查詢(xún)要求,其結(jié)果集是精確查詢(xún)的父集。

選擇近似表示的條件為:如果對(duì)象A與對(duì)象B的近似滿(mǎn)足一種關(guān)系,那么對(duì)象A與對(duì)象B就可能具有那種空間關(guān)系。例如,如果近似表示是分離的,那么對(duì)象A和對(duì)象B就將是分離的,但是如果近似表示非分離的,對(duì)象A和對(duì)象B仍可能是分離的。然后通過(guò)二次過(guò)濾,對(duì)初次過(guò)濾結(jié)果再次求精,就得到實(shí)體間的精確空間關(guān)系。使用這樣的二次過(guò)濾策略有幾項(xiàng)優(yōu)點(diǎn):空間對(duì)象一般都很大,因此要占用大量主內(nèi)存。空間對(duì)象的近似表示在載入內(nèi)存時(shí)占用的時(shí)間和空間要少的多。對(duì)空間對(duì)象的計(jì)算一般都很復(fù)雜,計(jì)算花費(fèi)很大。對(duì)象越復(fù)雜,計(jì)算空間關(guān)系就越復(fù)雜。使用近似對(duì)象的計(jì)算一般會(huì)很快,需要的計(jì)算周期也要短的多。

三、空間索引

OracleSpatial將空間索引功能引入數(shù)據(jù)庫(kù)引擎,是一項(xiàng)重要特征??臻g索引是根據(jù)空間準(zhǔn)則把搜索限制在各表(或數(shù)據(jù)空間)內(nèi)的一種機(jī)制。對(duì)于在與查詢(xún)區(qū)域重疊的數(shù)據(jù)空間中查找對(duì)象之類(lèi)的查詢(xún),要對(duì)其做出有效處理就需要索引。這由一個(gè)查詢(xún)多邊形(封閉定位)定義。第二種類(lèi)型的查詢(xún)(空間連接)是從兩個(gè)數(shù)據(jù)空間內(nèi)找出對(duì)象對(duì),這兩個(gè)數(shù)據(jù)空間在空間范圍內(nèi)互動(dòng)。OracleSpatial為建立空間數(shù)據(jù)的索引提供了基于線性四叉樹(shù)的索引方案和基于參考樹(shù)的索引方案。

1、四叉樹(shù)索引

線性四叉樹(shù)索引把幾何對(duì)象映射到一組編號(hào)的“瓦片”(title)。二維空間中的一個(gè)瓦片就是一個(gè)方框,它的四邊形與兩條坐標(biāo)軸正交。所有幾何體得以存在的坐標(biāo)空間以一種規(guī)則的分級(jí)方式進(jìn)行分解。坐標(biāo)范圍(即坐標(biāo)空間)可視為一個(gè)矩形。在第一級(jí)分解中將此矩形沿每一坐標(biāo)方向分為兩半,形成四個(gè)“子瓦片”,被稱(chēng)為“四分片”。在接下來(lái)的每一級(jí)分解中,每一個(gè)四分片由被沿每一坐標(biāo)方向分成兩半,再形成四個(gè)子瓦片。顧名思義,四叉樹(shù)的4葉結(jié)構(gòu)可以用來(lái)構(gòu)造索引樹(shù)。此過(guò)程持續(xù)進(jìn)行,直到某些終止條件(如瓦片的大?。┑靡詽M(mǎn)足。這些瓦片可以用z-排序方案或等價(jià)方案進(jìn)行線性排序,從而產(chǎn)生線性四叉樹(shù)。

2、參考樹(shù)索引

除了提供四叉樹(shù)索引功能之外,OracleSpatial還提供了參考樹(shù)索引。參考樹(shù)索引既可以用來(lái)代替四叉樹(shù)索引,也可以與四叉樹(shù)索引并用。此外,參考樹(shù)索引還可用于對(duì)數(shù)據(jù)進(jìn)行三維和四維索引,這對(duì)于解決石油勘探、體系結(jié)構(gòu)、工程設(shè)計(jì)以及許多其他科學(xué)應(yīng)用中的問(wèn)題至關(guān)重要。

3、可擴(kuò)展索引

應(yīng)用程序可在Oracle數(shù)據(jù)庫(kù)內(nèi)(以表的形式)或Oracle數(shù)據(jù)庫(kù)外(以文件形式)存儲(chǔ)索引數(shù)據(jù)。應(yīng)用程序通過(guò)管理、檢索和使用索引數(shù)據(jù)來(lái)計(jì)算用戶(hù)查詢(xún)。實(shí)質(zhì)上,應(yīng)用程序控制著域索引的結(jié)構(gòu)和語(yǔ)義內(nèi)容。數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)與應(yīng)用程序交互來(lái)創(chuàng)建、維護(hù)和使用域索引。

域索引數(shù)據(jù)最好存儲(chǔ)在數(shù)據(jù)庫(kù)中,這樣,它就可以處理物理存儲(chǔ)。

四、空間查詢(xún)的優(yōu)化

1、空間查詢(xún)優(yōu)化的原理

我們已經(jīng)知道了Oracle在空間查詢(xún)過(guò)程中會(huì)采用雙重過(guò)濾的優(yōu)化方法,而在實(shí)際應(yīng)用的空間查詢(xún)中,查詢(xún)條件往往包含一些一維查詢(xún)的條件的限制。當(dāng)把查詢(xún)直接提交給Oracle數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行時(shí),Oracle數(shù)據(jù)庫(kù)并不會(huì)區(qū)分一維查詢(xún)的條件和空間查詢(xún)的條件,直接進(jìn)行一次過(guò)濾與二次過(guò)濾,得到查詢(xún)的數(shù)據(jù),而在一次過(guò)濾時(shí),往往要過(guò)濾的數(shù)據(jù)量就可能會(huì)很大,因此會(huì)十分耗時(shí)。如果當(dāng)空間查詢(xún)中包含普通一維查詢(xún)條件時(shí),或許可以利用一維查詢(xún)條件使得執(zhí)行一次過(guò)濾時(shí)的數(shù)據(jù)量減少,從而減少空間查詢(xún)所需消耗的時(shí)間,提高空間查詢(xún)的效率。優(yōu)化原理也正是基于上個(gè)段落中提到的想法,當(dāng)空間查詢(xún)包含普通一維查詢(xún)時(shí),將空間查詢(xún)分兩步進(jìn)行:第一步,根據(jù)一維查詢(xún)的條件執(zhí)行普通一維查詢(xún),將查詢(xún)得到的結(jié)果存入臨時(shí)表中;第二步,根據(jù)空間查詢(xún)的條件,對(duì)創(chuàng)建的臨時(shí)表進(jìn)行查詢(xún),得到原查詢(xún)應(yīng)得到的結(jié)果。如果,當(dāng)根據(jù)一維查詢(xún)的條件執(zhí)行普通一維查詢(xún)的所得到的數(shù)據(jù)較原查詢(xún)一次過(guò)濾時(shí)需處理的數(shù)據(jù)量有明顯減少時(shí),便可起到減少時(shí)間、提高效率的優(yōu)化作用。

2、空間查詢(xún)優(yōu)化的技術(shù)支持

OCI是Oracle提供的調(diào)用接口,英文全稱(chēng)為OracleCallInterface。它是Oracle數(shù)據(jù)庫(kù)的最底層數(shù)據(jù)訪問(wèn)接口,在各類(lèi)訪問(wèn)接口中,功能最全、效率最高,卻也最復(fù)雜,但是OCI卻提供了很好的靈活性和高效性,為用戶(hù)的二次開(kāi)發(fā)提供了很好的平臺(tái)。

3、空間查詢(xún)優(yōu)化程序的設(shè)計(jì)

(一)、程序流程

空間查詢(xún)優(yōu)化程序接收輸入的空間查詢(xún)SQL語(yǔ)句,判定其是否符合優(yōu)化程序的優(yōu)化條件。如果不符合優(yōu)化的條件,則直接執(zhí)行SQL語(yǔ)句,進(jìn)行空間查詢(xún);如果需要優(yōu)化,則進(jìn)入優(yōu)化程序。首先,分析輸入的SQL語(yǔ)句,提取語(yǔ)句中要查詢(xún)的列、需要查詢(xún)的表格、查詢(xún)條件中關(guān)于空間查詢(xún)的限制以及關(guān)于普通一維查詢(xún)的限制;然后,根據(jù)已提取出的內(nèi)容,生成新的SQL語(yǔ)句;最后提交給Oracle數(shù)據(jù)庫(kù)執(zhí)行,將結(jié)果顯示出來(lái)并存入文件中。

(二)、可優(yōu)化的條件

當(dāng)查詢(xún)的條件中包含兩個(gè)或兩個(gè)以上的約束,并且約束條件中至少有一個(gè)為空間查詢(xún)的約束時(shí),即可實(shí)行優(yōu)化,否則的話(huà),程序?qū)⒉粫?huì)進(jìn)行任何優(yōu)化,直接把SQL語(yǔ)句直接提交給Oracle數(shù)據(jù)庫(kù)執(zhí)行。

4、空間查詢(xún)優(yōu)化程序的實(shí)現(xiàn)

(一)、SQL語(yǔ)句的分析與優(yōu)化

由于SQL語(yǔ)句良好的語(yǔ)法結(jié)構(gòu)和空間查詢(xún)函數(shù)的結(jié)構(gòu)特點(diǎn),因此很容易將空間查詢(xún)的SQL語(yǔ)句進(jìn)行分析,例如,可以很清楚的知道所要查詢(xún)的內(nèi)容在select――from字段之間,所查詢(xún)的表在from――where之間,查詢(xún)的約束條件在where字段之后;而約束條件的區(qū)分則依靠空間查詢(xún)函數(shù)的特點(diǎn)――以“sdo_xxx”作為函數(shù)的開(kāi)始。在分析過(guò)程中,由于要進(jìn)行字符串的匹配,為了提高匹配的效率,在匹配過(guò)程中采用了KMP算法。

(二)、優(yōu)化語(yǔ)句的生成

優(yōu)化語(yǔ)句的生成分兩步執(zhí)行。生成優(yōu)化語(yǔ)句的第一步是根據(jù)普通一維查詢(xún)的約束條件,將所要查詢(xún)的表的符合約束條件的所有內(nèi)容存入到臨時(shí)表中。

(三)、提交優(yōu)化后的SQL語(yǔ)句

優(yōu)化工作的最后一步為將優(yōu)化后的SQL語(yǔ)句提交給數(shù)據(jù)庫(kù)執(zhí)行,顯示查詢(xún)結(jié)果并將結(jié)果寫(xiě)入到文件中。在輸出的過(guò)程中,必須知道每一列的類(lèi)型才可以輸出結(jié)果。類(lèi)型的明確通過(guò)調(diào)用OCI提供的OCIAttrGet函數(shù)實(shí)現(xiàn),將每一列的類(lèi)型記錄到對(duì)應(yīng)的標(biāo)識(shí)列類(lèi)型的數(shù)組中,在輸出時(shí),根據(jù)列的類(lèi)型將相應(yīng)的值寫(xiě)入用于輸出的變量中,顯示在屏幕上、存儲(chǔ)在文件中。整個(gè)優(yōu)化工作完成,結(jié)束會(huì)話(huà),斷開(kāi)與數(shù)據(jù)庫(kù)的連接,程序結(jié)束。

五、結(jié)束語(yǔ)

空間數(shù)據(jù)庫(kù)發(fā)展至關(guān)重要,因此,基于OracleSpatial的空間數(shù)據(jù)庫(kù)的索引與查詢(xún)優(yōu)化,要不斷提高技術(shù)水平,加強(qiáng)對(duì)空間數(shù)據(jù)庫(kù)的索引與查詢(xún)的重視,促進(jìn)OracleSpatial的空間數(shù)據(jù)庫(kù)應(yīng)用水平的提高。

參考文獻(xiàn)

[1]潘農(nóng)菲.基于OracleSpatial的GIS空間數(shù)據(jù)處理及應(yīng)用系統(tǒng)開(kāi)發(fā)[J].計(jì)算機(jī)工程,2002

篇4

一、數(shù)據(jù)庫(kù)的優(yōu)化查詢(xún)方法

1、基于索引的優(yōu)化

數(shù)據(jù)庫(kù)的優(yōu)化方法多種多樣,不同的方法對(duì)提高數(shù)據(jù)庫(kù)查詢(xún)效率也不相同。

索引作為數(shù)據(jù)庫(kù)中的重要數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢(xún)的效率。而優(yōu)化查詢(xún)的重要方法就是建立索引,建立適合關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的索引,這樣就可以避免表掃描,并減少了因?yàn)椴樵?xún)而造成的輸入輸出開(kāi)銷(xiāo)。有效提高數(shù)據(jù)庫(kù)數(shù)據(jù)的查詢(xún)速度,優(yōu)化了數(shù)據(jù)庫(kù)性能。然而在創(chuàng)建索引時(shí)也增加了系統(tǒng)時(shí)間和空間的開(kāi)銷(xiāo)。所以創(chuàng)建索引時(shí)應(yīng)該與實(shí)際查詢(xún)需求相結(jié)合,這樣才能實(shí)現(xiàn)真正的優(yōu)化查詢(xún)。

1.1判斷井建立必要的索引對(duì)所要?jiǎng)?chuàng)建的索引進(jìn)行正確的判斷,使所創(chuàng)建的索引對(duì)數(shù)據(jù)庫(kù)的工作效率提高有所幫助。為了實(shí)現(xiàn)這一點(diǎn)。我們應(yīng)做到以下要求:在熟記數(shù)據(jù)庫(kù)程序中的相關(guān)sQL語(yǔ)句的前提下,統(tǒng)計(jì)出常用且對(duì)性能有影響的語(yǔ)句,判斷數(shù)據(jù)庫(kù)系統(tǒng)中哪些表的哪些字段要建立索引。其次,對(duì)數(shù)據(jù)庫(kù)中操作頻繁的表。數(shù)據(jù)流量較大的表,經(jīng)常需要與其他表進(jìn)行連接的表等,要進(jìn)行重點(diǎn)關(guān)注。這些表上的索引將對(duì)SQL語(yǔ)句的性能產(chǎn)生重要的影響。

1.2對(duì)索引使用的一些規(guī)則索引的使用在一些大型數(shù)據(jù)庫(kù)系統(tǒng)中會(huì)經(jīng)常使用到。這樣可以有效的提高數(shù)據(jù)庫(kù)性能,使數(shù)據(jù)庫(kù)的訪問(wèn)速度得到提高。但索引的使用要恰倒好處,所以我們?cè)谑褂盟饕龝r(shí)應(yīng)遵守使用原則:建立索引可以提高數(shù)據(jù)庫(kù)的查詢(xún)速度。但索引過(guò)多,不但不能實(shí)現(xiàn)優(yōu)化查詢(xún),反而會(huì)影響到數(shù)據(jù)庫(kù)的整體性能。索g作為數(shù)據(jù)庫(kù)中實(shí)際存在的對(duì)象,每個(gè)索引都要占用一定的物理空間。所以對(duì)于索引的建立要考慮到物理空間容量,以及所建立索引的必要性和實(shí)用性。

1.3合理的索引對(duì)SQL語(yǔ)句的意義索引建壺之后,還要確保其得到了真正的使用,發(fā)揮了其應(yīng)有的作用。首先,可以通過(guò)SQL語(yǔ)句查詢(xún)來(lái)確定所建立的索引是否得到了使用,找出沒(méi)有使用到的索引。分析素引建立但沒(méi)有使用的原因,使其真正發(fā)揮作用。其次,索引得到使用以后,是否得到了預(yù)期的效果,對(duì)數(shù)據(jù)庫(kù)的性能是否實(shí)現(xiàn)了真正意義上的提高,只有合理的索引才能真正提高數(shù)據(jù)庫(kù)的性能。

2、優(yōu)化SQL語(yǔ)句

在使用索引時(shí)可以有效的提高查詢(xún)速度,但如果SQL語(yǔ)句使用不恰當(dāng)?shù)脑?huà),所建立的索引就不能發(fā)揮其作用。所以我們應(yīng)該做到不但會(huì)寫(xiě)SQL,還要寫(xiě)出性能優(yōu)良的SQL語(yǔ)句。下面,就如何優(yōu)化引用例子進(jìn)行說(shuō)明。

首先,在進(jìn)行查詢(xún)時(shí),返回的值應(yīng)該是查詢(xún)所需要的。在查詢(xún)中應(yīng)該盡量減少對(duì)數(shù)據(jù)庫(kù)中的表的訪問(wèn)行數(shù),使查詢(xún)的結(jié)果范圍最小,這就意味著在查詢(xún)時(shí),不能過(guò)多的使用通配符,如:selecf*fmm tablet語(yǔ)句,而應(yīng)該做到最小化查詢(xún)范圍,要查詢(xún)幾行幾列就選擇幾行幾列,如:selectcoil from tablel ;多數(shù)情況下,用戶(hù)并不需要查詢(xún)到的所有數(shù)據(jù),而只是部分或靠前的數(shù)據(jù)時(shí),我們也可以通過(guò)SQL語(yǔ)句來(lái)進(jìn)行限制查詢(xún)的結(jié)果,如:select top 50 coll from tablel。

其次,對(duì)于一些特殊的SQL語(yǔ)句,在使用時(shí)應(yīng)正確選擇。我們用一組例子來(lái)說(shuō)明,如:EXISTS,NOT EXISTS。

語(yǔ)句一:select sum(tt,c1)from t1where((select count(*)from t2 where t2,c2=t1,c2)>0)

語(yǔ)句二:select sum“1,c1)from tl whereexists(select*from t2 where乜,c2=t1,c1)

兩個(gè)語(yǔ)句所得到的結(jié)果相同,但,語(yǔ)句二的效率要遠(yuǎn)高于語(yǔ)句一,因?yàn)檎Z(yǔ)句一在查詢(xún)中產(chǎn)生了大量的索引掃描。

在對(duì)數(shù)據(jù)庫(kù)查詢(xún)時(shí),所使用的語(yǔ)句多種多樣,但選擇恰當(dāng)?shù)牡淖志淠軌蛴行У奶岣卟樵?xún)效率。

最后,WHERE子句在使用時(shí)應(yīng)該注意的問(wèn)題。

在WHERE子句中可以使用exist和not exist代替in和not in,應(yīng)該盡量避免使用in,not in,0r或者h(yuǎn)aving??梢允褂帽礞溄哟鎒xist。Having可以用where代替,如果無(wú)法代替可以分兩步處理。

二、數(shù)據(jù)庫(kù)系統(tǒng)的安全

數(shù)據(jù)庫(kù)系統(tǒng)的安全框架可分為三個(gè)層次:網(wǎng)絡(luò)系統(tǒng)層次、宿主操作系統(tǒng)層次和數(shù)據(jù)庫(kù)管理系統(tǒng)層次。由于數(shù)據(jù)庫(kù)系統(tǒng)在操作系統(tǒng)下都是以文件形式進(jìn)行管理的,因此入侵者可以直接利用操作系統(tǒng)的漏洞竊取數(shù)據(jù)庫(kù)文件,或者直接利用OS工具來(lái)非法偽造、篡改數(shù)據(jù)庫(kù)文件內(nèi)容。因此,數(shù)據(jù)庫(kù)系統(tǒng)的安壘性很大程度上依賴(lài)于數(shù)據(jù)庫(kù)管理系統(tǒng)。如果數(shù)據(jù)庫(kù)管理系統(tǒng)安全機(jī)制非常強(qiáng)大,則數(shù)據(jù)庫(kù)系統(tǒng)的安全性能就較好。根據(jù)數(shù)據(jù)庫(kù)安全的三個(gè)層次,筆者提出了一個(gè)數(shù)據(jù)庫(kù)入侵檢測(cè)系統(tǒng),其外層用基于網(wǎng)絡(luò)的入侵檢測(cè),中間層用基于主機(jī)的入侵檢測(cè),內(nèi)層采用人侵容忍。此系統(tǒng)采用系統(tǒng)整體安全策略,綜合多種安全措施,實(shí)現(xiàn)了系統(tǒng)關(guān)鍵功能的安全性和健壯性。

三、數(shù)據(jù)庫(kù)入侵檢測(cè)技術(shù)

數(shù)據(jù)庫(kù)入侵檢測(cè)系統(tǒng)的研究與設(shè)計(jì)借鑒了針對(duì)網(wǎng)絡(luò)和針對(duì)主機(jī)的入侵檢測(cè)技術(shù),在此基礎(chǔ)上,又考慮了數(shù)據(jù)庫(kù)自身的特點(diǎn)。按照檢測(cè)方法分為:誤用檢測(cè)和反常檢測(cè)。

(1)數(shù)據(jù)庫(kù)誤用檢測(cè)

誤用檢測(cè)是指將已知的攻擊特征存儲(chǔ)在誤用特征知識(shí)庫(kù)里面,然后根據(jù)用戶(hù)的當(dāng)前操作行為與知識(shí)庫(kù)里的誤用人侵規(guī)則進(jìn)行匹配檢驗(yàn),如果符合知識(shí)庫(kù)中的入侵特征,則說(shuō)明發(fā)生了入侵。誤用特征知識(shí)庫(kù)中的入侵規(guī)則由安全專(zhuān)家定義,可以隨時(shí)添加、修改,然后保存在知識(shí)庫(kù)中,用來(lái)對(duì)審計(jì)數(shù)據(jù)進(jìn)行匹配比較。誤用檢測(cè)的優(yōu)點(diǎn)是檢測(cè)的準(zhǔn)確率高,缺點(diǎn)是只能對(duì)已知的攻擊特征進(jìn)行匹配檢驗(yàn),對(duì)未知的攻擊類(lèi)型無(wú)法發(fā)現(xiàn),而對(duì)未知攻擊類(lèi)型的檢測(cè)要依靠異常檢測(cè)。所以,誤用檢測(cè)常常與異常檢測(cè)結(jié)合起來(lái)使用。

(2)數(shù)據(jù)庫(kù)反常入侵檢測(cè)

篇5

關(guān)鍵詞: oracle數(shù)據(jù)庫(kù);sql;數(shù)據(jù)庫(kù)索引;查詢(xún)優(yōu)化 

query optimization method of oracle9i database

abstract: the basic tasks of a database are data storage and  management,and the only characteristic of the database that terminal users can see is its capability, a database enquiry operation is the impact of the key factors of applications response time.  thus,the query system in a logic and reasonable way is the key to develop database application system successfully.so construct the query system reasonably is a very important link of develop the database application system successfully.this paper has introduced the experiences and methods of raising the query efficiency of oracle database from the following four aspects:hit ratio improving,large tables query optimizing,and tuning of sql statement.

key words: oracle database;sql;index; query optimization

引言:

1 oracle9i數(shù)據(jù)庫(kù)常見(jiàn)的資源瓶頸類(lèi)型

oracle9i數(shù)據(jù)庫(kù)運(yùn)行時(shí),常見(jiàn)的瓶頸現(xiàn)象有以下幾種類(lèi)型:

內(nèi)存瓶頸:當(dāng)oracle9i進(jìn)程需要更大的內(nèi)存空間超過(guò)系統(tǒng)可提供時(shí)。

磁盤(pán)i/0瓶頸:由于內(nèi)存緩沖區(qū)的空間不足,或者表空間及其文件在硬件上的分配不合理而導(dǎo)致進(jìn)程對(duì)磁盤(pán)的頻繁i/0讀寫(xiě)。

cpu瓶頸:盡管多數(shù)情況下,都是由操作系統(tǒng)的內(nèi)核來(lái)管理分配有效的cpu給oracle9i數(shù)據(jù)庫(kù)進(jìn)程使用,但是,仍然會(huì)出現(xiàn)過(guò)多的應(yīng)用進(jìn)程對(duì)cpu使用周期激烈競(jìng)爭(zhēng)的現(xiàn)象。

oracle9i資源瓶頸。

對(duì)以上各種資源瓶頸,通常可以從多個(gè)方面進(jìn)行調(diào)整,但是,當(dāng)對(duì)oracle9i數(shù)據(jù)庫(kù)某一方面進(jìn)行調(diào)整后,必然會(huì)影響到其它方面的性能。所以,對(duì)oracle服務(wù)器進(jìn)行性能優(yōu)化調(diào)整,應(yīng)該采取一種綜合優(yōu)化調(diào)整策略,本文重點(diǎn)闡述對(duì)數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化方法。 

2  針對(duì)sga 內(nèi)存區(qū)的調(diào)整

首先進(jìn)行oracle實(shí)例調(diào)整。oracle實(shí)例涉及到sga 內(nèi)存區(qū)和一組oracle后臺(tái)處理進(jìn)程。對(duì)oracle實(shí)例的調(diào)整就是對(duì)sga 內(nèi)存區(qū)和oracle后臺(tái)處理進(jìn)程的調(diào)整。在對(duì)該問(wèn)題的解決中,主要是針對(duì)sga 內(nèi)存區(qū)的調(diào)整。

2.1 sga 內(nèi)存區(qū)結(jié)構(gòu)

sga就是系統(tǒng)全局區(qū),是指內(nèi)存中允許多個(gè)進(jìn)程相互通信的區(qū)域。在oracle中,sga對(duì)所有進(jìn)程來(lái)說(shuō)都是全局的可用的。圖1為sga結(jié)構(gòu)圖。緩沖區(qū)高速緩存是sga 中為所有用戶(hù)和系統(tǒng)進(jìn)程保存數(shù)據(jù)的區(qū)域,任何數(shù)據(jù)在傳遞給一個(gè)調(diào)用的應(yīng)用程序之前,都必須駐留在這片高速緩存中。

這片區(qū)域是共享的,所以多個(gè)進(jìn)程可以從這片高速緩存讀取同樣的數(shù)據(jù)塊,而不必每次都從物理磁盤(pán)中讀取。共享池是sga 中的另一個(gè)區(qū)域,其中保存著關(guān)于待執(zhí)行的sql語(yǔ)句的信息。他由兩部分組成:數(shù)據(jù)字典高速緩存,存放從數(shù)據(jù)字典中讀取的信息以用于處理sql請(qǐng)求;庫(kù)高速緩存,存放需要執(zhí)行的sql語(yǔ)句信息,包括每個(gè)sql語(yǔ)句的語(yǔ)法分析樹(shù)和執(zhí)行計(jì)劃。如果多個(gè)用戶(hù)要執(zhí)行同樣的sql語(yǔ)句,那么語(yǔ)法分析樹(shù)和執(zhí)行計(jì)劃就可以重復(fù)利用,省去了語(yǔ)法分析步驟的昂貴花費(fèi)。

2.2 調(diào)整sga 結(jié)構(gòu)

一般來(lái)講,在系統(tǒng)硬件支持的情況下,系統(tǒng)全局區(qū)越大越有利于數(shù)據(jù)庫(kù)高效的運(yùn)行。大的緩沖區(qū)高速緩存可以緩存更多的數(shù)據(jù)塊,這樣可以提高緩存命中率,節(jié)省物理磁盤(pán)讀取的高昂代價(jià);大的共享池意味著大的庫(kù)高速緩存。庫(kù)緩存的內(nèi)存結(jié)構(gòu)如圖2所示。

圖2  庫(kù)緩存的內(nèi)存結(jié)構(gòu)

庫(kù)緩存越大,可以保存的sql語(yǔ)法分析信息越多;此外,數(shù)據(jù)庫(kù)中的一些對(duì)象,如表、索引、過(guò)程、觸發(fā)器、軟件包等也在首次執(zhí)行后進(jìn)駐庫(kù)高速緩存。大的庫(kù)緩存可以保證對(duì)這些對(duì)象的高命中率,從而節(jié)省解析和載入代價(jià)。作為一個(gè)通用的優(yōu)化原則,我們?cè)诮鉀Q該問(wèn)題時(shí),適當(dāng)增大了sga 的容量,從而保證oracle實(shí)例可以比較高效的運(yùn)行。設(shè)置緩沖區(qū)高速緩存的容量為32 m ,設(shè)置共享池的大小為56m。運(yùn)行rpt_lib.sql程序檢查庫(kù)高速緩存不足率(還沒(méi)有運(yùn)行該腳本),表明庫(kù)緩存足夠。

2.3 oracle數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)和邏輯結(jié)構(gòu)

oracle數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)從操作系統(tǒng)一級(jí)查看,就是由一個(gè)個(gè)的文件組成,從物理上可劃分為:數(shù)據(jù)文件、日志文件、控制文件和參數(shù)文件。數(shù)據(jù)文件中存放了所有的數(shù)據(jù)信息;日志文件存放數(shù)據(jù)庫(kù)運(yùn)行期間產(chǎn)生的日志信息,它被重復(fù)覆蓋使用,若不采用歸檔方式的話(huà),已被覆蓋的日志信息將無(wú)法恢復(fù);控制文件記錄了整個(gè)數(shù)據(jù)庫(kù)的關(guān)鍵結(jié)構(gòu)信息,它若被破壞,整個(gè)數(shù)據(jù)庫(kù)將無(wú)法工作和恢復(fù);參數(shù)文件中設(shè)置了很多oracle數(shù)據(jù)庫(kù)的配置參數(shù),當(dāng)數(shù)據(jù)庫(kù)啟動(dòng)時(shí),會(huì)讀取這些信息。

oracle數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)則是由一些數(shù)據(jù)庫(kù)對(duì)象組成,這也是數(shù)據(jù)庫(kù)管理員和應(yīng)用開(kāi)發(fā)人員經(jīng)常用到和查看的邏輯對(duì)象,如:數(shù)據(jù)庫(kù)表空問(wèn)、表、索引、段、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等。數(shù)據(jù)庫(kù)的邏輯存儲(chǔ)結(jié)構(gòu)(表空間等)決定 7數(shù)據(jù)庫(kù)的物理空問(wèn)是如髓使用的,其關(guān)系示意圖如圖3所示

3 查詢(xún)優(yōu)化的策略

3.1基于索引的優(yōu)化

索引是數(shù)據(jù)庫(kù)中一個(gè)常用而重要的數(shù)據(jù)庫(kù)對(duì)象,而優(yōu)化查詢(xún)重要的方法是建立索引,在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的表上建立合適的索引,可以避免表掃描并減少因查詢(xún)而造成的i/o開(kāi)銷(xiāo),提高數(shù)據(jù)庫(kù)數(shù)據(jù)查詢(xún)的速度,改善數(shù)據(jù)庫(kù)性能。但是創(chuàng)建索引會(huì)增加系統(tǒng)的時(shí)間和空間的開(kāi)銷(xiāo)。因此創(chuàng)建索引時(shí)必須要與實(shí)現(xiàn)應(yīng)用系統(tǒng)的查詢(xún)需求密切結(jié)合,才能達(dá)到優(yōu)化查詢(xún)的目的。

3.1.1建立必要的索引

判斷索引必要性的最終標(biāo)準(zhǔn)則是判斷這些索引是否對(duì)數(shù)據(jù)庫(kù)的工作效率有所幫助。在實(shí)際應(yīng)用的過(guò)程中,應(yīng)該為優(yōu)化工作做以下幾點(diǎn)準(zhǔn)備:

首先必須熟悉數(shù)據(jù)庫(kù)應(yīng)用程序中所有的sql語(yǔ)句,并從中統(tǒng)計(jì)出常用且可能對(duì)性能有影響的部分語(yǔ)句;然后分析、歸納出作為where條件子句的字段及其各種組合方式;在這一基礎(chǔ)上可以初步判斷出哪些表的哪些字段應(yīng)該建立索引。其次,必須熟悉應(yīng)用程序,要了解哪些表是數(shù)據(jù)操作頻繁的表;哪些表經(jīng)常與其他表進(jìn)行連接;哪些表中的數(shù)據(jù)量可能很大;數(shù)據(jù)量大的表中各個(gè)字段的數(shù)據(jù)分布情況如何等等。對(duì)于滿(mǎn)足上述條件的這些表,必須重點(diǎn)關(guān)注。因?yàn)榻⒃谶@些表上的索引,將對(duì)sql語(yǔ)句的性能產(chǎn)生舉足輕重的影響。

3.1.2 使用索引的一些規(guī)則

在大型應(yīng)用開(kāi)發(fā)或表較大的情況下,使用索引可以極大減少數(shù)據(jù)庫(kù)讀寫(xiě)次數(shù),從而提高數(shù)據(jù)庫(kù)訪問(wèn)速度,所以,索引在應(yīng)用程序開(kāi)發(fā)中經(jīng)常被使用,但如何正確使用索引以發(fā)揮它的優(yōu)勢(shì)需遵循以下原則:

在主鍵(primly  key)的索引方面,不應(yīng)有超過(guò)25%的列成為主鍵,而只有很少的普通列,這會(huì)浪費(fèi)索引空間在索引的使用效率方面,當(dāng)選擇數(shù)據(jù)少于全表的20%,并且表的大小超過(guò)oracle的5個(gè)數(shù)據(jù)塊時(shí),使用索引才會(huì)有效,否則用于索引的i/o加上用于數(shù)據(jù)的i/o就會(huì)大于做一次全表掃描的i/o.

另外,在數(shù)據(jù)分布不均勻的特殊情況下,選擇性不高的索引也要建立。假設(shè)表someinfo中數(shù)據(jù)量很大,有一百萬(wàn)行,其中有一個(gè)字段flag,取值范圍為枚舉值:[0,l,2,3,4,5,6,7]。按照前面所述索引建立的規(guī)則,該字段只有8種取值,索引值的重復(fù)率很高,索引選擇性明顯很低,通常被考慮為不必建立索引。然而,如果該字段上數(shù)據(jù)值的分布情況非常特殊,如表l所示:

假定常用的查詢(xún)中,查詢(xún)flag<6的情況既多又頻繁,毫無(wú)疑問(wèn),如果能夠建立索引,并且被應(yīng)用,那么必將大大提高這種情況的查詢(xún)效率。

使用索引尤其應(yīng)當(dāng)注意的是,在表連接操作時(shí)的驅(qū)動(dòng)表/被驅(qū)動(dòng)表的關(guān)系。oracle核心使用至底向上、從右至左的規(guī)則,如:from 子句中的最后一個(gè)表才是oracle用傲為驅(qū)動(dòng)表的表;where子句的最后一個(gè)條件中所臺(tái)的列,它所屬的表才是最先被引用的表??傊?,在from子句中,將表名按被驅(qū)動(dòng)表-驅(qū)動(dòng)表排序,在where子旬中,將條件語(yǔ)句按最少約束-最多約束排序。當(dāng)指向被除行的索引所占空間超過(guò)總索引空間的20%時(shí),就應(yīng)刪除并重建索引,以節(jié)省空間,提高性能。

3.1.3 讓sql語(yǔ)句用上合理的索引

建立必要的索引之后,并非意味著數(shù)據(jù)庫(kù)性能的提高已經(jīng)得到了令人滿(mǎn)意的結(jié)果,還要針對(duì)某些具體的sql語(yǔ)句進(jìn)行分析:

首先,確定索引是否真正得到了使用。不發(fā)揮作用的索引,正如建好的樓宇無(wú)人居住,這是對(duì)資源的浪費(fèi)。不允許有閑置的索引,應(yīng)竭力讓那些仍沒(méi)有使用索引的sql語(yǔ)句發(fā)揮作用。

其次,判斷索引是否利用得合理。特別是一些復(fù)雜的sql語(yǔ)句,當(dāng)其中where子句包含多個(gè)帶有索引的字段時(shí),更應(yīng)該注意索引的選擇是否合理。錯(cuò)誤的索引不會(huì)使數(shù)據(jù)庫(kù)性能得到預(yù)期的提高,往往還會(huì)產(chǎn)生一些與愿望背道而馳的負(fù)面影響。下面,就如何使用合理索引的問(wèn)題,引用實(shí)例進(jìn)行說(shuō)明

3.2 基于sql語(yǔ)句的優(yōu)化 

由于oracle9i是關(guān)系型數(shù)據(jù)庫(kù),sql語(yǔ)句是面向結(jié)果而不是面向過(guò)程的查詢(xún)語(yǔ)言,所以它包含一個(gè)基于開(kāi)銷(xiāo)的優(yōu)化程序(cost based optimizer)及一個(gè)基于規(guī)則的優(yōu)化程序(rule based optimizer)來(lái)對(duì)用戶(hù)提交的及時(shí)查詢(xún)提供一個(gè)最佳的執(zhí)行策略,這個(gè)執(zhí)行策略就是執(zhí)行這個(gè)查詢(xún)所需的一系列步驟。

3.2.1 查詢(xún)優(yōu)化程序中sql語(yǔ)句的調(diào)整

要對(duì)查詢(xún)語(yǔ)句進(jìn)行優(yōu)化,一個(gè)簡(jiǎn)單直接有效的方法是對(duì)sql語(yǔ)句進(jìn)行調(diào)整,減少計(jì)算量,提高查詢(xún)的響應(yīng)速度。對(duì)sql語(yǔ)句進(jìn)行調(diào)整時(shí)要遵循下列原則:

首先,選擇運(yùn)算盡可能先做,并在對(duì)同一個(gè)表進(jìn)行多個(gè)選擇運(yùn)算時(shí),選擇影響較大的語(yǔ)句放在前面。

其次,在執(zhí)行連接前對(duì)關(guān)系作適當(dāng)?shù)念A(yù)處理,預(yù)處理的方法有兩種,在連接屬性上建立索引和對(duì)關(guān)系進(jìn)行排序。

最后,應(yīng)避免相關(guān)子查詢(xún)。sql概念上將位于where子旬中的相關(guān)子查詢(xún)處理成獲取參數(shù)并且返回—個(gè)單獨(dú)的值或值的集合(也可能為空集)的函數(shù)。它是按以下方式執(zhí)行的:首先計(jì)算位于外層查詢(xún)的form子句中關(guān)系的笛卡爾積,然后對(duì)該笛卡爾積的每個(gè)元組用位于where子句中的謂詞進(jìn)行測(cè)試。這種執(zhí)行方式技術(shù)上稱(chēng)為相關(guān)執(zhí)行,相關(guān)執(zhí)行方式效率不高,因?yàn)樽硬樵?xún)要對(duì)應(yīng)位于外層查詢(xún)的每一個(gè)元組進(jìn)行單獨(dú)的計(jì)算,從而導(dǎo)致大量的隨機(jī)磁盤(pán)i/o操作。所以在實(shí)際應(yīng)用中,若可以用連接查詢(xún)代替的子查詢(xún),則用連接查詢(xún)實(shí)現(xiàn);例如,有以下相關(guān)子查詢(xún)語(yǔ)句:

select  sname

from student

where exists(

select *

from student_grade

where score>90 and student.sno =student_grade.sno)

用連接查詢(xún)實(shí)現(xiàn)以上子查詢(xún)?nèi)缦拢?/p>

select sname

from student,student_grade

where score>90 and student.sno =student_grade.sno)

如果子查詢(xún)不可避免,那么要在子查詢(xún)中過(guò)濾掉盡可能多的行。

3.2.2書(shū)寫(xiě)sql的一些經(jīng)驗(yàn)

(1)不要在索引的字段上面進(jìn)行任何操作(包括函數(shù)操作),例如select *from emp where sal*12>10000;要寫(xiě)成select * from emp where sal>10000/12:

(2)盡量使用union替換掉or的操作,如果可能,使用uni0n all

(3)如果能用連接操作處理的語(yǔ)句,最好不要使用嵌套子查詢(xún)

(4)如果返回的結(jié)果集超過(guò)表記錄的40%以上,最好使用全表掃描,而不要使用索引,因?yàn)槭褂盟饕送ㄟ^(guò)rowid對(duì)表進(jìn)行操作外,還增加了對(duì)索引的操作。

(5)如果不打算使用某個(gè)索引。對(duì)于字符類(lèi)型的字段a(有索引),可以用aii代替,對(duì)于數(shù)字類(lèi)型子段b(有索引),使用b+0就可以使基于開(kāi)銷(xiāo)的優(yōu)化程序(cbo)不使用索引。

(6)盡量不要在含有索引的字段里面添加null,因?yàn)閷?duì)null的判斷將不使用索引。

(7)使用復(fù)合索引時(shí)要注意索引列在where 中的位置,只有當(dāng)復(fù)合索引中的第一列出現(xiàn)在where 中時(shí),才會(huì)成功的使用該復(fù)合索引。

3.3其它優(yōu)化手段

3.3.1使用存儲(chǔ)過(guò)程

存儲(chǔ)過(guò)程是sql語(yǔ)句和可選控制流語(yǔ)句的預(yù)編譯集合,以一個(gè)名稱(chēng)存儲(chǔ)并作為一個(gè)單元處理,創(chuàng)建后便可轉(zhuǎn)換為可執(zhí)行代碼,作為數(shù)據(jù)庫(kù)的一個(gè)對(duì)象存儲(chǔ)在數(shù)據(jù)庫(kù)中,存儲(chǔ)過(guò)程的代碼駐留在服務(wù)器端,因而執(zhí)行時(shí)不需要將應(yīng)用程序代碼向服務(wù)器端傳送,可以大大減輕網(wǎng)絡(luò)負(fù)載。同時(shí),由于存儲(chǔ)過(guò)程已編譯為可執(zhí)行代碼,不需要每次執(zhí)行時(shí)進(jìn)行分析和優(yōu)化工作,只需要從高速緩沖存儲(chǔ)器中調(diào)用存儲(chǔ)過(guò)程已編譯好的二進(jìn)制代碼來(lái)執(zhí)行,從而減少了預(yù)處理所花費(fèi)的時(shí)間,提高了系統(tǒng)的效率。另一方面,使用存儲(chǔ)過(guò)程還易于維護(hù),且表的結(jié)構(gòu)改變時(shí),不影響客戶(hù)端的應(yīng)用程序。

3.3.2避免相關(guān)子查詢(xún)

如果一個(gè)列的屬性名同時(shí)在主查詢(xún)和where子句查詢(xún)中出現(xiàn),那么很可能當(dāng)主查詢(xún)中的列值改變之后,子查詢(xún)必須重新查詢(xún)一次。查詢(xún)嵌套層次越深,效率越低,因此,應(yīng)盡量避免子查詢(xún),如果不可避免,那么要在子查詢(xún)中過(guò)濾掉盡可能多的行。

3.3.3避免或簡(jiǎn)化排序

應(yīng)當(dāng)簡(jiǎn)化或避免對(duì)大型表中的數(shù)據(jù)進(jìn)行重復(fù)排序,如果利用索引能以適當(dāng)?shù)拇涡蜃詣?dòng)產(chǎn)生輸出時(shí),優(yōu)化器就能避免這種排序。以下是一些主要的影響因素:

(1)索引中不包括一個(gè)或幾個(gè)待排序的列。

(2)group by或order by子句中列的次序與索引的次序不一樣。

(3)排序的列來(lái)自不同的表。

為了避免不必要的排序,應(yīng)正確增建索引,合理合并數(shù)據(jù)庫(kù)表,在必要時(shí)對(duì)表進(jìn)行反規(guī)范化處理。如果排序不可避免,那么應(yīng)當(dāng)試圖簡(jiǎn)化它,如縮小排序的列的范圍等。

4 結(jié)束語(yǔ)

數(shù)據(jù)庫(kù)應(yīng)用的性能調(diào)整是一個(gè)不斷摸索、總結(jié)的過(guò)程,涉及的方面很多。優(yōu)化數(shù)據(jù)庫(kù)整體的應(yīng)用性能是提高計(jì)算機(jī)系統(tǒng)處理速度的一種行之有效的辦法,本文從索引優(yōu)化,sql語(yǔ)句以及oracle10g的新特性的優(yōu)化等方面的優(yōu)化進(jìn)行討論,結(jié)果表明優(yōu)化后的數(shù)據(jù)庫(kù)性能有所提高,但在實(shí)際應(yīng)用中要根據(jù)系統(tǒng)的實(shí)際情況具體分析,對(duì)優(yōu)化的方法反復(fù)實(shí)驗(yàn),最后再確定最終的優(yōu)化方法,這樣才能達(dá)到較好的優(yōu)化效果。實(shí)現(xiàn)快速、高效的數(shù)據(jù)查詢(xún)和應(yīng)用分析,同時(shí)也使硬件資源得到最充分的發(fā)揮。在實(shí)踐中必須分析影響性能的各方面因素,針對(duì)不同的具體情況選擇合理的優(yōu)化措施;同時(shí)還需要不斷了解oracle提供的新技術(shù)并加以合理利用,從而更好地進(jìn)行數(shù)據(jù)庫(kù)的調(diào)優(yōu)。 

參考文獻(xiàn):

[l](美)bulusu lakshman.oracle 9i pl/sql開(kāi)發(fā)人員指南.清華大學(xué)出版社.2004.

[2](美)kevin loney marlene theriault.oraele9idba手冊(cè).機(jī)械工業(yè)出版社.2002.

[3]oracle91.6管理員指南.北京希望電子出版社.2003年1月.

篇6

關(guān)鍵詞:Oracle數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)配置優(yōu)化;SQL 語(yǔ)句優(yōu)化

中圖分類(lèi)號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2010)22-6151-02

Oracle10g Database Performance Optimization and Adjustment

ZHEN Fu-dong

(Civil Aviation Air Traffic Control Branch of Gansu, Lanzhou 730087, China)

Abstract: Oracle database is currently the most widely used large-scale databases, database data with the increase of the number of concurrent users increases, the throughput of the system often appears lower, longer response time performance problems, how to effectively optimize and adjust database performance, avoid system bottlenecks and to ensure efficient operation of the base Oracle database. This paper analyzes Oracle database system performance impact factor, we focused on the Oracle10g database system optimization strategy, including the memory area to adjust and optimize disk I / O optimization, disk fragmentation, rollback segment set, CPU performance tuning and optimization of SQL statements and so on, through the introduction of these optimization strategies, hopes to Oracle10g database system for optimum performance.

Key words: oracle database; database configuration optimization; optimizing SQL statement

Oracle 數(shù)據(jù)庫(kù)是現(xiàn)在使用最廣泛的大型數(shù)據(jù)庫(kù)之一,選用Oracle 作為數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng)一般規(guī)模比較大, 需要處理的用戶(hù)數(shù)目較多,對(duì)于這樣的數(shù)據(jù)庫(kù)系統(tǒng)來(lái)說(shuō),效率是最重要的指標(biāo)之一,在實(shí)際應(yīng)用中,隨著系統(tǒng)數(shù)據(jù)庫(kù)中數(shù)據(jù)的增加,訪問(wèn)量的加大,數(shù)據(jù)庫(kù)系統(tǒng)性能將會(huì)下降,數(shù)據(jù)庫(kù)的優(yōu)化逐漸突顯出其重要作用。

1 影響Oracle 數(shù)據(jù)庫(kù)系統(tǒng)性能的因素

Oracle 數(shù)據(jù)庫(kù)系統(tǒng)性能受到數(shù)據(jù)庫(kù)運(yùn)行的諸多方面的影響與制約,包括數(shù)據(jù)庫(kù)服務(wù)器性能、數(shù)據(jù)庫(kù)配置、網(wǎng)絡(luò)I/O、應(yīng)用程序性能等。

1) 數(shù)據(jù)庫(kù)服務(wù)器性能

數(shù)據(jù)庫(kù)服務(wù)器是整個(gè)系統(tǒng)的核心,它的性能直接影響到整個(gè)系統(tǒng)的性能。數(shù)據(jù)庫(kù)服務(wù)器的性能主要取決于服務(wù)器上運(yùn)行的操作系統(tǒng)以及服務(wù)器的硬件配置。

2) 數(shù)據(jù)庫(kù)配置

數(shù)據(jù)庫(kù)的配置情況直接決定了數(shù)據(jù)庫(kù)的性能優(yōu)劣,是數(shù)據(jù)庫(kù)性能優(yōu)化的核心。[1]主要包括內(nèi)存區(qū)的設(shè)置、I/O 設(shè)置、參數(shù)設(shè)置、CPU 調(diào)整、回滾段設(shè)置以及碎片整理等。數(shù)據(jù)庫(kù)配置及其調(diào)整貫穿于數(shù)據(jù)庫(kù)設(shè)計(jì)、創(chuàng)建、運(yùn)行的各個(gè)階段。

3) 網(wǎng)絡(luò)I/O

應(yīng)用程序與數(shù)據(jù)庫(kù)服務(wù)器之間的交互需要通過(guò)網(wǎng)絡(luò)來(lái)進(jìn)行,網(wǎng)絡(luò)的性能,特別是網(wǎng)絡(luò)I/O 對(duì)整個(gè)系統(tǒng)性能有重要的影響。

4) 應(yīng)用程序?qū)崿F(xiàn)

應(yīng)用程序的實(shí)現(xiàn)方法對(duì)數(shù)據(jù)庫(kù)性能也有很大的影響,特別是SQL 語(yǔ)句的應(yīng)用、數(shù)據(jù)庫(kù)連接方式的選擇、數(shù)據(jù)庫(kù)端程序設(shè)計(jì)以及數(shù)據(jù)庫(kù)對(duì)象的使用情況等,都影響系統(tǒng)的執(zhí)行效率。

2 Oracle10g數(shù)據(jù)庫(kù)系統(tǒng)性能優(yōu)化與調(diào)整策略

Oracle 數(shù)據(jù)庫(kù)的性能優(yōu)化,可以從數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)、軟件結(jié)構(gòu)、模式對(duì)象以及具體的業(yè)務(wù)和技術(shù)實(shí)現(xiàn)出發(fā),進(jìn)行統(tǒng)籌考慮。優(yōu)化是有目的地更改系統(tǒng)的一個(gè)或多個(gè)組件,使其滿(mǎn)足一個(gè)或多個(gè)目標(biāo)的過(guò)程。下面從幾個(gè)不同方面介紹Oracle 數(shù)據(jù)庫(kù)優(yōu)化設(shè)計(jì)方案。

2.1 內(nèi)存區(qū)調(diào)整與優(yōu)化

Oracle 數(shù)據(jù)庫(kù)實(shí)例的內(nèi)存結(jié)構(gòu)主要由SGA 和PGA 構(gòu)成,其中SGA 主要包括數(shù)據(jù)緩沖區(qū)、共享池、日志緩沖區(qū),它們的分配是否合理直接決定了數(shù)據(jù)庫(kù)性能。

1) 數(shù)據(jù)緩沖區(qū)調(diào)整與優(yōu)化。數(shù)據(jù)緩沖區(qū)用于存儲(chǔ)從數(shù)據(jù)庫(kù)中檢索的數(shù)據(jù)。如果用戶(hù)請(qǐng)求的數(shù)據(jù)在數(shù)據(jù)緩沖區(qū)中,則數(shù)據(jù)從數(shù)據(jù)緩沖區(qū)中直接返回給用戶(hù),查詢(xún)時(shí)間短。如果用戶(hù)請(qǐng)求的數(shù)據(jù)不在數(shù)據(jù)緩沖區(qū)中,則先由服務(wù)器進(jìn)程將數(shù)據(jù)從數(shù)據(jù)文件讀取到數(shù)據(jù)緩沖區(qū),然后再?gòu)臄?shù)據(jù)緩沖區(qū)中將數(shù)據(jù)返回給用戶(hù),查詢(xún)時(shí)間延長(zhǎng)。因此,保證盡量多的用戶(hù)請(qǐng)求數(shù)據(jù)在緩沖區(qū)中,避免讀取數(shù)據(jù)文件,可以大大提高數(shù)據(jù)的操作性能。[2]

2) 共享池調(diào)整與優(yōu)化。設(shè)置共享池的目的為了緩存已經(jīng)被解析過(guò)的SQL,而使其能被重用,不再解析。[3]通過(guò)確保大多數(shù)語(yǔ)句能夠在共享池中查找到它們自己的一個(gè)已分析版本,就可以提高語(yǔ)句分析和執(zhí)行的效率,降低資源消耗。共享池中存放的信息是應(yīng)用程序需要經(jīng)常訪問(wèn)的,因此需要保持這些信息的高命中率。共享池大小是否合適,主要體現(xiàn)在庫(kù)緩沖區(qū)和數(shù)據(jù)字典高速緩沖區(qū)的命中率上。

3) 日志緩沖區(qū)調(diào)整與優(yōu)化。日志緩沖區(qū)用于存放數(shù)據(jù)的修改信息。日志首先寫(xiě)入日志緩沖區(qū),在一定條件下由L GWR 進(jìn)程將日志緩沖區(qū)的信息寫(xiě)入日志文件。如果日志緩沖區(qū)已滿(mǎn),但還沒(méi)有寫(xiě)入日志文件,則日志寫(xiě)入處于等待狀態(tài),即日志緩沖區(qū)寫(xiě)入失敗。過(guò)多的日志寫(xiě)入失敗,說(shuō)明日志緩沖區(qū)偏小,影響數(shù)據(jù)庫(kù)性能。

4) PGA 區(qū)調(diào)整與優(yōu)化。PGA 區(qū)主要由私有會(huì)話(huà)區(qū)以及排序區(qū)構(gòu)成。其中,排序區(qū)設(shè)置是否合理對(duì)數(shù)據(jù)庫(kù)性能有一定的影響。在Oracle 數(shù)據(jù)庫(kù)中,排序可以在PGA 的排序區(qū)或臨時(shí)表空間的臨時(shí)段中進(jìn)行,由于使用臨時(shí)段時(shí)需要對(duì)磁盤(pán)進(jìn)行I/O 操作,降低的排序的效率,因此Oracle 建議盡量在排序區(qū)中進(jìn)行排序操作。

2.2 磁盤(pán)I/O 調(diào)整

對(duì)于數(shù)據(jù)庫(kù)系統(tǒng)來(lái)說(shuō),磁盤(pán)I/O 操作是數(shù)據(jù)庫(kù)性能最重要的方面,影響磁盤(pán)I/O性能的主要原因有磁盤(pán)競(jìng)爭(zhēng)、I/O次數(shù)過(guò)多和數(shù)據(jù)塊空間的分配管理。減少磁盤(pán)I/O操作的最根本的方法就是利用高速緩存存放頻繁使用的數(shù)據(jù)信息,最小化磁盤(pán)I/O,降低Oracle 服務(wù)器查找和返回行所花費(fèi)時(shí)間的最有效的方法之一就是利用索引、分區(qū)。

1) 索引Index 的優(yōu)化設(shè)計(jì)。索引是數(shù)據(jù)庫(kù)中重要的數(shù)據(jù)結(jié)構(gòu),是優(yōu)化的基礎(chǔ),索引把表中的邏輯值映射到RowID,因此索引能進(jìn)行快速定位數(shù)據(jù)的物理地址。索引必須充分利用才能加快數(shù)據(jù)庫(kù)訪問(wèn)速度, 建立索引根本目的是提高查詢(xún)效率,利用索引行記錄定位,減少磁盤(pán)的讀寫(xiě)次數(shù),從而達(dá)到提高查詢(xún)速度的目的。一個(gè)建有合理索引的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)可能比一個(gè)沒(méi)有建立索引的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)效率高幾十倍,但并不是索引越多越好,在那些經(jīng)常需要修改的數(shù)據(jù)列上建立索引,將導(dǎo)致系統(tǒng)性能的下降和存儲(chǔ)空間的浪費(fèi)。

2) 使用Oracle 分區(qū)技術(shù)。分區(qū)將數(shù)據(jù)在物理上分隔開(kāi),不同分區(qū)的數(shù)據(jù)可以制定保存在處于不同磁盤(pán)上的數(shù)據(jù)文件里。這樣,當(dāng)對(duì)這個(gè)表進(jìn)行查詢(xún)時(shí),只需要在表分區(qū)中進(jìn)行掃描,而不必進(jìn)行FTS(Full Table Scan,全表掃描),明顯縮短了查詢(xún)時(shí)間,另外處于不同磁盤(pán)的分區(qū)也將對(duì)這個(gè)表的數(shù)據(jù)傳輸分散在不同的磁盤(pán)I/O,一個(gè)精心設(shè)置的分區(qū)可以將數(shù)據(jù)傳輸對(duì)磁盤(pán)I/O競(jìng)爭(zhēng)均勻地分散開(kāi)。

2.3 回滾段設(shè)置

回滾段用于保存回退條目,將被修改的數(shù)據(jù)的初始版本保存在回退條目中,利用該信息,用戶(hù)可以撤銷(xiāo)未提交的事務(wù),Oracle 可以維護(hù)數(shù)據(jù)庫(kù)的一致性,并從實(shí)例崩潰中恢復(fù)。因此,回滾段在數(shù)據(jù)庫(kù)事務(wù)處理中起著關(guān)鍵的作用,其設(shè)置是否合理直接影響到系統(tǒng)的性能。

在Oracle 10g 中,可以使用撤銷(xiāo)表空間自動(dòng)進(jìn)行回滾段的管理,也可以手動(dòng)進(jìn)行回滾段的管理。在手工管理中,應(yīng)該根據(jù)事務(wù)大小不同建立不同大小的回滾段,并分散到不同的表空間中?;貪L段的數(shù)量與事務(wù)的數(shù)量有關(guān),假設(shè)有n 個(gè)并發(fā)事務(wù),當(dāng)n < 16 時(shí),需要建立4 個(gè)回滾段,當(dāng)16 ≤ n < 32 時(shí),需要建立8 個(gè)回滾段;當(dāng)n ≥32 時(shí),需要建立n/ 4 個(gè)回滾段[4] 。

2.4 碎片整理

由于數(shù)據(jù)庫(kù)中數(shù)據(jù)庫(kù)對(duì)象不斷變化以及數(shù)據(jù)操作不斷進(jìn)行,導(dǎo)致磁盤(pán)碎片的產(chǎn)生。數(shù)據(jù)庫(kù)中碎片可分為表空間級(jí)、表級(jí)、索引級(jí)三類(lèi)。

1) 表空間級(jí)碎片是由于段的建立、擴(kuò)展和刪除引起的??梢酝ㄟ^(guò)重組表空間、執(zhí)行AL TER TA2BL ESPACE . . . COAL ESCES 命令或先通過(guò)EXPORT程序?qū)?shù)據(jù)先導(dǎo)出,然后利用TRUNCATE 刪除表中數(shù)據(jù),最后利用IMPORT 程序?qū)?shù)據(jù)導(dǎo)入的方法消除表空間級(jí)碎片。[5]

2) 表級(jí)碎片是由于行遷移或行鏈接導(dǎo)致數(shù)據(jù)存儲(chǔ)不連續(xù)而形成的。可以通過(guò)設(shè)置合適大小的數(shù)據(jù)塊以及PCTFREE、PCTUSED 參數(shù)以盡量避免表碎片的產(chǎn)生。通常在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),根據(jù)應(yīng)用中記錄的大小來(lái)設(shè)置標(biāo)準(zhǔn)數(shù)據(jù)塊大小,保證其可以存儲(chǔ)一條完整的記錄。

3) 索引級(jí)碎片是由于索引太多、索引值變化頻繁而導(dǎo)致B - TREE 結(jié)構(gòu)失衡、葉節(jié)點(diǎn)排序混亂引起的??梢酝ㄟ^(guò)減少表上索引數(shù)量,以及在數(shù)據(jù)變化頻率較低的列上創(chuàng)建索引或先進(jìn)行數(shù)據(jù)的插入操作,然后再為表創(chuàng)建索引等方法,減少索引表的變化,降低索引碎片的產(chǎn)生。

2.5 CPU 性能調(diào)整

服務(wù)器的CPU 使用情況對(duì)數(shù)據(jù)庫(kù)的性能影響很大,調(diào)整CPU 可以更有效地利用服務(wù)器的各種資源, 提高數(shù)據(jù)庫(kù)的運(yùn)行速度和效率。

1) 盡量利用多個(gè)CPU 處理器來(lái)執(zhí)行事務(wù)處理和查詢(xún)CPU 的快速發(fā)展使得Oracle 越來(lái)越重視對(duì)多CPU 的并行技術(shù)的應(yīng)用,只要可能,應(yīng)該將數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用程序的CPU 請(qǐng)求分開(kāi),或?qū)PU 請(qǐng)求從一個(gè)服務(wù)器移到另一個(gè)服務(wù)器。

2) 使用PQO 方式進(jìn)行數(shù)據(jù)查詢(xún)PQO 方式不僅可以在多個(gè)CPU 間分配SQL 語(yǔ)句的請(qǐng)求處理,當(dāng)所查詢(xún)的數(shù)據(jù)處于不同的磁盤(pán)時(shí),一個(gè)個(gè)獨(dú)立的進(jìn)程可以同時(shí)進(jìn)行數(shù)據(jù)讀取。

2.6 SQL 語(yǔ)句優(yōu)化

對(duì)數(shù)據(jù)庫(kù)進(jìn)行的各種操作(包括添加、刪除、查詢(xún)等等)最終都是通過(guò)數(shù)據(jù)庫(kù)的SQL 語(yǔ)句來(lái)執(zhí)行,因此SQL 語(yǔ)句的執(zhí)行效率最終決定了Oracle 數(shù)據(jù)庫(kù)的性能高低, SQL 語(yǔ)句的書(shū)寫(xiě),通常應(yīng)該遵循以下原則:

1) 盡量避免對(duì)全表掃描。

2) 對(duì)經(jīng)常查詢(xún)的表創(chuàng)建合理索引, 對(duì)大表的查詢(xún)應(yīng)在索引上進(jìn)行。

3) 在字符串查詢(xún)中盡可能少用通配符。

4) 如果多個(gè)表經(jīng)常被查詢(xún),盡可能使其放在同一數(shù)據(jù)塊中。

5) 盡量使用(not)exists 的操作替代(not)in 這樣的操作。

6) 連接查詢(xún)時(shí), 要有充分的連接條件。

3 結(jié)束語(yǔ)

Oracle10g數(shù)據(jù)庫(kù)系統(tǒng)性能優(yōu)化與調(diào)整是一個(gè)復(fù)雜、繁瑣的系統(tǒng)工程,貫穿于數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)的整個(gè)過(guò)程。數(shù)據(jù)庫(kù)系統(tǒng)的優(yōu)化和調(diào)整,包括內(nèi)存結(jié)構(gòu)調(diào)整、磁盤(pán)I/O 調(diào)整、磁盤(pán)碎片調(diào)整以及CPU 性能調(diào)整等,直接決定了整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的性能,應(yīng)該充分利用各種性能優(yōu)化與調(diào)整策略進(jìn)行反復(fù)的調(diào)整,以獲得系統(tǒng)的最優(yōu)性能。

參考文獻(xiàn):

[1] 藤永昌.Oracle數(shù)據(jù)庫(kù)管理員大全[M].北京:清華大學(xué)出版社,2004.

[2] 布萊拉,馬樹(shù)其.Oracle 10G 新特性學(xué)習(xí)指南[M].北京:電子工業(yè)出版社,2005.

[3] 王海亮.精通Oracle 10G系統(tǒng)管理[M].北京:中國(guó)水利水電出版社,2005.

篇7

【關(guān)鍵詞】性能優(yōu)化;性能調(diào)整;Oracle數(shù)據(jù)庫(kù)

0 前言

計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域應(yīng)用較為普遍的信息管理工具就是數(shù)據(jù)庫(kù)系統(tǒng),而Oracle數(shù)據(jù)庫(kù)是應(yīng)用最為廣泛的信息數(shù)據(jù)管理系統(tǒng),為計(jì)算機(jī)用戶(hù)帶來(lái)了極大的便利,為了達(dá)到數(shù)據(jù)庫(kù)系統(tǒng)能夠有效管理數(shù)據(jù)信息的目標(biāo),需要不斷調(diào)整優(yōu)化Oracle數(shù)據(jù)庫(kù)性能,為其安全穩(wěn)定運(yùn)行提高保障,保證Oracle數(shù)據(jù)庫(kù)的持久發(fā)展。

1 Oracle數(shù)據(jù)庫(kù)簡(jiǎn)介

1.1 Oracle數(shù)據(jù)庫(kù)概述

Oracle數(shù)據(jù)庫(kù)功能相當(dāng)強(qiáng)大,起源較早,最開(kāi)始出現(xiàn)的形式是關(guān)系型數(shù)據(jù)庫(kù)技術(shù),可以實(shí)現(xiàn)對(duì)數(shù)據(jù)之間的關(guān)系的了解,并通過(guò)信息庫(kù)的構(gòu)造將這些關(guān)系真實(shí)的反映出來(lái)。1984年Oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)了桌面計(jì)算機(jī)與關(guān)系數(shù)據(jù)庫(kù)的有效結(jié)合,隨著Oracle數(shù)據(jù)庫(kù)的不斷發(fā)展,其各項(xiàng)功能也不斷健全,并提供給企業(yè)類(lèi)的、網(wǎng)絡(luò)工作組、高可靠性的、產(chǎn)業(yè)化的應(yīng)用可靠的技術(shù)支撐,實(shí)現(xiàn)對(duì)關(guān)系數(shù)據(jù)的高效處理[1]。

1.2 Oracle數(shù)據(jù)庫(kù)主要特點(diǎn)

Oracle數(shù)據(jù)庫(kù)的主要特點(diǎn)有支持多用戶(hù)和大數(shù)據(jù)的高性能事務(wù)處理、硬件環(huán)境獨(dú)立、對(duì)完整性和安全性的良好控制,同時(shí)Oracle數(shù)據(jù)庫(kù)還遵守網(wǎng)絡(luò)通信協(xié)議、數(shù)據(jù)存取語(yǔ)言等相關(guān)的工業(yè)標(biāo)準(zhǔn)。另外Oracle數(shù)據(jù)庫(kù)支持分布式數(shù)據(jù)庫(kù)和分布處理,擁有可連接性、可兼容性、可移植性的特征。實(shí)現(xiàn)不同型號(hào)的計(jì)算機(jī)和不同操作系統(tǒng)下可以運(yùn)行Oracle數(shù)據(jù)庫(kù)的需求,其自身獨(dú)有的特點(diǎn)滿(mǎn)足了不同用戶(hù)的不同要求,符合時(shí)展潮流。

2 Oracle數(shù)據(jù)庫(kù)性能調(diào)整

2.1 調(diào)整Oracle數(shù)據(jù)庫(kù)內(nèi)存參數(shù)

Oracle數(shù)據(jù)庫(kù)內(nèi)存參數(shù)的調(diào)整主要是針對(duì)其系統(tǒng)全局區(qū)進(jìn)行的。其主要組成部分有日志緩沖區(qū)、數(shù)據(jù)緩沖區(qū)、共享池。系統(tǒng)全局區(qū)伴隨著環(huán)境的變化做出相應(yīng)改變,在對(duì)其進(jìn)行調(diào)整的過(guò)程中要考慮數(shù)據(jù)庫(kù)的運(yùn)行模式、操作系統(tǒng)的內(nèi)存容量、系統(tǒng)的類(lèi)型是裸設(shè)備還是文件系統(tǒng)、物理內(nèi)存的大小。系統(tǒng)全局區(qū)大約占數(shù)據(jù)庫(kù)物理內(nèi)存的40%-60%,系統(tǒng)全局區(qū)大小直接受初始化參數(shù)的決定性影響,主要參數(shù)有WORK

AREASIZEPOLICY、LOGBBUFFER、SHARED_POOL_SIZE、DB_CACHE_

SIZE、DB_BLOCK_SIZE。WORKAREASIZEPOLICY參數(shù)的有MANUAL和AUTO兩種可選值,可根據(jù)實(shí)際情況進(jìn)行選擇;LOGBBUFFER能夠指定Oracle數(shù)據(jù)庫(kù)內(nèi)存空間的大小,即寫(xiě)入到重做日志文件中的通過(guò)緩沖區(qū)寫(xiě)入的重做日志;SHARED_POOL_SIZE對(duì)數(shù)據(jù)庫(kù)共享內(nèi)存池其直接決定作用;DB_CACHE_SIZE對(duì)默認(rèn)緩沖池的大小產(chǎn)生決定效用;DB_BLOCK_SIZE對(duì)創(chuàng)建數(shù)據(jù)庫(kù)每個(gè)模塊的尺寸產(chǎn)生直接影響。對(duì)這些參數(shù)進(jìn)行調(diào)整有利于實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)的內(nèi)部?jī)?yōu)化,為Oracle數(shù)據(jù)庫(kù)的穩(wěn)定運(yùn)行提供可靠的后臺(tái)保障[2]。

2.2 調(diào)整Oracle數(shù)據(jù)庫(kù)操作系統(tǒng)資源

運(yùn)行服務(wù)器的操作系統(tǒng)對(duì)Oracle數(shù)據(jù)庫(kù)服務(wù)器產(chǎn)生直接影響,操作系統(tǒng)的性能若是出現(xiàn)故障,則無(wú)法進(jìn)行Oracle數(shù)據(jù)庫(kù)性能的有效調(diào)整。首先,需要對(duì)操作系統(tǒng)的換頁(yè)空間進(jìn)行適當(dāng)?shù)恼{(diào)整,優(yōu)化配置其內(nèi)存分配,通過(guò)數(shù)據(jù)庫(kù)的實(shí)際運(yùn)行情況的調(diào)查,相關(guān)的管理人員可以調(diào)整內(nèi)在資源,同時(shí)對(duì)操作系統(tǒng)的換頁(yè)空間也要做出相應(yīng)的調(diào)整。在換頁(yè)空間的大小檢查過(guò)程中,當(dāng)換頁(yè)空間的物理內(nèi)存大于2G時(shí),就需要對(duì)其進(jìn)行適當(dāng)?shù)恼{(diào)整,如果物理內(nèi)存小于2G,則需要將換頁(yè)空間的大小設(shè)定為物理內(nèi)存的1.5倍。另外在創(chuàng)建換頁(yè)空間的時(shí)候,應(yīng)盡量將換頁(yè)空間設(shè)置在不同的硬盤(pán)中,提高換頁(yè)空間的性能,通過(guò)smitty mpks增加換頁(yè)空間或者是利用smitty chps對(duì)原有的換頁(yè)空間的大小進(jìn)行修改,以此來(lái)調(diào)整其性能。其次,對(duì)數(shù)據(jù)庫(kù)的硬盤(pán)I/O進(jìn)行調(diào)整,在I/O的設(shè)計(jì)階段管理員就應(yīng)當(dāng)優(yōu)化調(diào)整其操作方式,管理員想要實(shí)現(xiàn)的系統(tǒng)類(lèi)型與與I/O設(shè)計(jì)聯(lián)系密切,不同的數(shù)據(jù)庫(kù)系統(tǒng)需要不同的I/O設(shè)計(jì)方案和不同類(lèi)型的I/O模式。當(dāng)創(chuàng)建系統(tǒng)之后就需要對(duì)系統(tǒng)的內(nèi)存進(jìn)行調(diào)整,將磁盤(pán)I/O調(diào)移,以此保證磁盤(pán)I/O調(diào)整工作順利進(jìn)行,簡(jiǎn)化調(diào)整程序,不必考慮緩沖區(qū)命中率過(guò)低的問(wèn)題。對(duì)于數(shù)據(jù)庫(kù)的性能來(lái)說(shuō)磁盤(pán)I/O操作發(fā)揮了極大的作用。影響磁盤(pán)I/O性能的因素有I/O次數(shù)過(guò)多和磁盤(pán)競(jìng)爭(zhēng)等,對(duì)其調(diào)整時(shí)可以將組成同表的數(shù)據(jù)分置在不同的磁盤(pán)中,使硬盤(pán)之間的I/O負(fù)載達(dá)到均衡。最后是對(duì)數(shù)據(jù)庫(kù)的核心參數(shù)配置進(jìn)行調(diào)整,通常情況下設(shè)置系統(tǒng)核心參數(shù)時(shí)都會(huì)設(shè)置較低的參數(shù)值,需要在運(yùn)行的過(guò)程中不斷進(jìn)行調(diào)整,在運(yùn)行Oracle數(shù)據(jù)庫(kù)過(guò)程中將Default128增加到500,調(diào)整maxuproc來(lái)發(fā)揮效用,保證Oracle數(shù)據(jù)庫(kù)的穩(wěn)定運(yùn)行。

3 Oracle數(shù)據(jù)庫(kù)性能優(yōu)化

3.1 優(yōu)化Oracle數(shù)據(jù)庫(kù)索引

由于索引在用戶(hù)使用數(shù)據(jù)庫(kù)的過(guò)程中為用戶(hù)檢索提供了便利,所以O(shè)racle要優(yōu)化數(shù)據(jù)庫(kù)中的索引,索引出現(xiàn)問(wèn)題直接影響Oracle數(shù)據(jù)庫(kù)的利用效率,為用戶(hù)的數(shù)據(jù)庫(kù)使用和查詢(xún)帶來(lái)不便。對(duì)Oracle數(shù)據(jù)庫(kù)索引進(jìn)行優(yōu)化主要有兩種方式,第一種是手動(dòng)優(yōu)化,在Oracle數(shù)據(jù)庫(kù)中通過(guò)手動(dòng)方法對(duì)其索引進(jìn)行優(yōu)化主要依靠Oracle數(shù)據(jù)庫(kù)的圖形性能工具Oracle Enterprise Manager Console,在相應(yīng)的Oracle數(shù)據(jù)庫(kù)中,通過(guò)用戶(hù)的登陸權(quán)限登陸到指定的索引界面,找出SYAPP數(shù)據(jù)庫(kù)中的位于索引區(qū)里的XTWHZDBMB_X功能菜單,點(diǎn)擊鼠標(biāo)右鍵選擇功能菜單中的“移去”選項(xiàng),將不正確的索引選中并刪除,或者將不符合數(shù)據(jù)庫(kù)實(shí)際信息內(nèi)容的索引進(jìn)行修改,及時(shí)更新數(shù)據(jù)庫(kù)的索引列表。第二種索引優(yōu)化的方法是命令行方法,根據(jù)Oracle數(shù)據(jù)庫(kù)提供的相關(guān)SQL環(huán)境,利用特有的命令語(yǔ)句,在索引命令設(shè)置時(shí)輸入DROP INDEX XTWHZDBMB_X命令語(yǔ)句,利用該命令執(zhí)行刪除不必要索引的的指令,或者輸入其他的命令將索引進(jìn)行索引替換、更新命令執(zhí)行語(yǔ)句,對(duì)Oracle數(shù)據(jù)庫(kù)的索引進(jìn)行優(yōu)化。通過(guò)這兩種方式實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)索引的優(yōu)化,從而保證Oracle數(shù)據(jù)庫(kù)的安全運(yùn)行,為用戶(hù)數(shù)據(jù)利用和檢索查詢(xún)帶來(lái)便利。

3.2 優(yōu)化Oracle數(shù)據(jù)庫(kù)內(nèi)存

對(duì)Oracle數(shù)據(jù)庫(kù)的內(nèi)存進(jìn)行優(yōu)化主要是在SGA調(diào)整的基礎(chǔ)上進(jìn)行優(yōu)化,在使用Oracle數(shù)據(jù)庫(kù)過(guò)程中不斷檢查,首先,對(duì)共享池優(yōu)化,對(duì)其優(yōu)化的原因是它能夠高速緩存PL/SQL、SQL語(yǔ)句,通過(guò)最少算法進(jìn)行管理的功能程序,當(dāng)共享池內(nèi)的SQL語(yǔ)句超出額定值之后,該算法則除掉不常使用或很少訪問(wèn)的語(yǔ)句,為新的SQL語(yǔ)句提供更多的空間。使用共享池的這項(xiàng)功能可以實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)將用戶(hù)常用和流行的PL/SQL、SQL語(yǔ)句保存在數(shù)據(jù)庫(kù)中,逐步將不常用的語(yǔ)句更新?lián)Q代,優(yōu)化Oracle數(shù)據(jù)庫(kù)的內(nèi)存,得到最新的信息,以此來(lái)適應(yīng)用戶(hù)對(duì)數(shù)據(jù)庫(kù)不同的需求。其次,是對(duì)緩沖區(qū)高速緩沖存儲(chǔ)器進(jìn)行優(yōu)化工作,實(shí)現(xiàn)用戶(hù)對(duì)自己的PL/SQL和SQL語(yǔ)句緩存版本的檢索,還可以查找到請(qǐng)求的相關(guān)數(shù)據(jù)。充分發(fā)揮緩沖區(qū)高速緩沖存儲(chǔ)器的作用。用戶(hù)在使用的過(guò)程中常用LRU列表進(jìn)行管理,用戶(hù)對(duì)應(yīng)用程序的訪問(wèn)模塊大多存放在最近使用端,通過(guò)全表掃描對(duì)對(duì)常訪問(wèn)的表進(jìn)行優(yōu)化檢查,當(dāng)發(fā)現(xiàn)常用表較小的時(shí)候,就有很能全表掃描對(duì)該表進(jìn)行訪問(wèn)。但當(dāng)全表掃描在LRU列表的最少使用端放置該表的緩沖區(qū),這些該緩沖區(qū)就容易被移走,只有程序用戶(hù)重新利用的時(shí)候,才會(huì)在內(nèi)存中看到,解決這一問(wèn)題,采取的優(yōu)化方式就是在全表掃描的過(guò)程中,將緩沖區(qū)存儲(chǔ)在LUR列表的最多使用端,利用這種方式可以將內(nèi)存中的緩沖區(qū)留存的時(shí)間更久,便于用戶(hù)對(duì)其進(jìn)行有效訪問(wèn)。提高Oracle數(shù)據(jù)庫(kù)的利用效率。

3.3 優(yōu)化Oracle數(shù)據(jù)庫(kù)分區(qū)

Oracle數(shù)據(jù)庫(kù)引用分區(qū)技術(shù)有效的解決了大索引、大表的可用性和相關(guān)性能的問(wèn)題,通過(guò)對(duì)其拆分,在對(duì)操作資源的請(qǐng)求上進(jìn)行限制,分區(qū)變小就會(huì)加快系統(tǒng)的訪問(wèn)速度,提高系統(tǒng)效率。Oracle數(shù)據(jù)庫(kù)的分區(qū)技術(shù)還可以有效的解決信息資源管理數(shù)據(jù)庫(kù)的其他檢索和相關(guān)表的使用問(wèn)題,對(duì)Oracle數(shù)據(jù)庫(kù)分區(qū)進(jìn)行優(yōu)化同時(shí)可以實(shí)現(xiàn)對(duì)其他性能的優(yōu)化。Oracle數(shù)據(jù)庫(kù)雖然擁有分區(qū)技術(shù),但在實(shí)際應(yīng)用中仍存在缺陷,Oracle數(shù)據(jù)庫(kù)中已有的普通表無(wú)法實(shí)現(xiàn)直接修改屬性轉(zhuǎn)換為分區(qū)表,只有通過(guò)重建的方法才能進(jìn)行轉(zhuǎn)換,但是信息資源數(shù)據(jù)管理系統(tǒng)適用的時(shí)間較長(zhǎng),一旦投入使用其各項(xiàng)性能設(shè)計(jì)都已經(jīng)定型,很難通過(guò)重建對(duì)普通表進(jìn)行分區(qū)表轉(zhuǎn)換。這時(shí)在優(yōu)化的時(shí)候可以利用交換分區(qū)技術(shù)和在線定義功能對(duì)普通表進(jìn)行分區(qū)化轉(zhuǎn)化,實(shí)現(xiàn)對(duì)Oracle數(shù)據(jù)庫(kù)分區(qū)的優(yōu)化。在線定義功能是指在保證數(shù)據(jù)的一致性的基礎(chǔ)上對(duì)操作表進(jìn)行命令指示,進(jìn)行DML操作,切換完成后可以不進(jìn)行其他額外管理程序。交換分區(qū)是修改表的定義,對(duì)數(shù)據(jù)不進(jìn)行任何操作行為,從而提高數(shù)據(jù)庫(kù)優(yōu)化的效率,準(zhǔn)確的檢查表中的數(shù)據(jù)的完整性。在對(duì)其分區(qū)轉(zhuǎn)化之后,就可以實(shí)現(xiàn)對(duì)Oracle數(shù)據(jù)庫(kù)的優(yōu)化,從而提高Oracle數(shù)據(jù)庫(kù)工作效率。

4 結(jié)論

綜上所述,通過(guò)對(duì)Oracle數(shù)據(jù)庫(kù)性能調(diào)整與優(yōu)化的分析研究,可以看出Oracle數(shù)據(jù)庫(kù)性能的調(diào)整和優(yōu)化意義重大,完善Oracle數(shù)據(jù)庫(kù)各項(xiàng)功能有助于實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)的穩(wěn)定運(yùn)行,在使用過(guò)程中不斷的進(jìn)行優(yōu)化檢查,及時(shí)對(duì)性能進(jìn)行優(yōu)化,實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)的持久發(fā)展,推動(dòng)數(shù)據(jù)庫(kù)技術(shù)的發(fā)展,為人們提供利用和服務(wù)。

【參考文獻(xiàn)】

篇8

【關(guān)鍵詞】MES;數(shù)據(jù)庫(kù);中間件;優(yōu)化

1.問(wèn)題的提出

包鋼寬厚板MES于2007年年底與生產(chǎn)同步上線,系統(tǒng)的投入運(yùn)行在生產(chǎn)質(zhì)量控制方面起著舉足輕重的作用,但隨著系統(tǒng)的的使用,新需求的提出和改進(jìn)再所難免,上下互聯(lián)的系統(tǒng)間的交互業(yè)務(wù)非常頻繁,用戶(hù)多,訪問(wèn)量非常大。作為業(yè)務(wù)支撐的軟件系統(tǒng)也處于不斷的改進(jìn)和變化之中。該系統(tǒng)數(shù)據(jù)庫(kù)經(jīng)過(guò)一段時(shí)間的運(yùn)行以后,隨著數(shù)據(jù)庫(kù)表規(guī)模的不斷擴(kuò)大,數(shù)據(jù)量的不斷積累和增加,應(yīng)用程序訪問(wèn)的改進(jìn)和變化,其性能隨著使用時(shí)間的延長(zhǎng)而逐步呈現(xiàn)下降的趨勢(shì),所以對(duì)該系統(tǒng)數(shù)據(jù)庫(kù)的性能優(yōu)化有著重要的意義。

2.MES系統(tǒng)構(gòu)成

寬厚板MES系統(tǒng)的主機(jī)平臺(tái)采用兩臺(tái)IBM公司UNIX小型機(jī)P55A,組成集群(Cluster)結(jié)構(gòu)的高可用硬件平臺(tái),一臺(tái)作為數(shù)據(jù)庫(kù)服務(wù)器,另一臺(tái)作為應(yīng)用服務(wù)器。每臺(tái)服務(wù)器配置4路1.65GHz CPU,內(nèi)存為8GB,內(nèi)置2塊73GB硬盤(pán)。兩臺(tái)P55A服務(wù)器采用雙機(jī)熱備份的方式,當(dāng)一臺(tái)服務(wù)器故障時(shí),由HACMP集群軟件提供的自動(dòng)切換功能使另一臺(tái)服務(wù)器可自動(dòng)接管故障服務(wù)器的功能,保證整個(gè)主機(jī)系統(tǒng)不間斷地運(yùn)行。兩臺(tái)服務(wù)器之間用專(zhuān)用快速通道互連構(gòu)成Cluster集群系統(tǒng)的高速心跳線,并共享一套磁盤(pán)陣列,以保證應(yīng)用系統(tǒng)的高可用性。數(shù)據(jù)庫(kù)采用ORACLE公司的10g企業(yè)版數(shù)據(jù)庫(kù),極大地提高了系統(tǒng)的可靠性及處理能力,保證系統(tǒng)持續(xù)運(yùn)行。系統(tǒng)中間件軟件采用BEA公司TUXEDO 8.1交易中間件。與相關(guān)外部系統(tǒng)之間的通信采用基于TCP/IP SOCKET協(xié)議的XCOM通訊中間件進(jìn)行電文通訊,軟件則是采用C/M/S三層架構(gòu)方式,前臺(tái)采用流行的.net開(kāi)發(fā),實(shí)現(xiàn)用戶(hù)UI畫(huà)面,操作簡(jiǎn)便易行,前臺(tái)把用戶(hù)的請(qǐng)求轉(zhuǎn)化為與TUXEDO中間件的數(shù)據(jù)交互。中間件TUXEDO,它具有高可靠性,負(fù)載平衡等優(yōu)點(diǎn),它屏蔽了底層操作系統(tǒng)的復(fù)雜性,使程序開(kāi)發(fā)人員變得簡(jiǎn)單統(tǒng)一,大大減少程序設(shè)計(jì)的復(fù)雜性。客戶(hù)和服務(wù)器之間、服務(wù)器和服務(wù)器之間的通訊,異構(gòu)平臺(tái)之間的數(shù)據(jù)變換,以及服務(wù)器和數(shù)據(jù)庫(kù)之間的集成和事務(wù)控制都由TUXEDO來(lái)完成。數(shù)據(jù)庫(kù)后臺(tái)開(kāi)發(fā)采用PROC C,采用固定模板針對(duì)業(yè)務(wù)邏輯進(jìn)行數(shù)據(jù)的轉(zhuǎn)換和處理,把獲取的數(shù)據(jù)傳遞給TUXEDO,來(lái)實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯功能。

3.服務(wù)器優(yōu)化

寬厚板MES系統(tǒng)初期使用了兩臺(tái)服務(wù)器,由于資金限制只購(gòu)買(mǎi)了兩臺(tái)服務(wù)器,一臺(tái)運(yùn)行數(shù)據(jù)庫(kù)和應(yīng)用,另外一臺(tái)作為測(cè)試和開(kāi)發(fā)平臺(tái)使用。自2007年上線后,隨著生產(chǎn)的穩(wěn)定運(yùn)行,信息數(shù)據(jù)量逐步增加,服務(wù)器的負(fù)荷也越來(lái)越大,在使用高峰時(shí)CPU使用率為55~78%左右,明顯感覺(jué)到應(yīng)用的遲滯不流暢,鑒于這種情況,我們?cè)?010年申請(qǐng)又購(gòu)置了兩臺(tái)服務(wù)器,把應(yīng)用和數(shù)據(jù)庫(kù)徹底分離,新購(gòu)服務(wù)器一臺(tái)替換原先的測(cè)試開(kāi)發(fā)平臺(tái),另一臺(tái)則作為系統(tǒng)數(shù)據(jù)庫(kù)備份。分開(kāi)后的的數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用服務(wù)器,其CPU在使用率上沒(méi)有超過(guò)50%,系統(tǒng)運(yùn)行效率明顯得到提高。

4.TUXEDO優(yōu)化

寬厚板MES系統(tǒng)在運(yùn)行某些占用時(shí)間較長(zhǎng)的應(yīng)用時(shí),多個(gè)人同時(shí)操作,會(huì)出現(xiàn)長(zhǎng)時(shí)間的等待后,前臺(tái)畫(huà)面會(huì)報(bào)一個(gè)“后臺(tái)程序調(diào)用失敗”的錯(cuò)誤,經(jīng)過(guò)我們分析,原來(lái)在中間件TUXEDDO系統(tǒng)中每個(gè)服務(wù)SERVER默認(rèn)只啟動(dòng)了一個(gè)進(jìn)程,這樣導(dǎo)致當(dāng)多個(gè)請(qǐng)求同時(shí)發(fā)起時(shí),一些請(qǐng)求會(huì)因?yàn)槌瑫r(shí)導(dǎo)致調(diào)用失敗,查找資料,我們發(fā)現(xiàn)服務(wù)SERVER可以啟動(dòng)多個(gè)進(jìn)程,假如原來(lái)某個(gè)SERVER所啟動(dòng)的進(jìn)程數(shù)較少,可適當(dāng)增加它的進(jìn)程數(shù),以下所示:

"qmhppsrv"SRVGRP="GROUP4"SRVID=3 MIN=1 MAX=1

RQADDR="qmhppsrv"REPLYQ=Y

改成

"qmhppsrv"SRVGRP="GROUP4"SRVID=3 MIN=1 MAX=4

RQADDR="qmhppsrv"REPLYQ=Y

我們針對(duì)使用頻度較高的服務(wù)SERVER這樣更改之后,出現(xiàn)調(diào)用失敗的幾率大大降低。

5.前臺(tái)程序優(yōu)化

當(dāng)數(shù)據(jù)庫(kù)結(jié)構(gòu)固定不變的情況下,前臺(tái)程序操作數(shù)據(jù)庫(kù)的優(yōu)化核心目標(biāo)是減少數(shù)據(jù)的返回量,主要措施是限制查詢(xún)條件來(lái)減少返回的數(shù)據(jù)量。由于系統(tǒng)代碼由多人完成,每個(gè)人的水平和編程習(xí)慣不同,造成我們后期使用中發(fā)現(xiàn)大量性能上的問(wèn)題,對(duì)此我們做了大量修正。

比如:沒(méi)有采取后臺(tái)分頁(yè)技術(shù),直接在返回全部數(shù)據(jù)后再在前臺(tái)上做分頁(yè),這樣導(dǎo)致數(shù)據(jù)庫(kù)和網(wǎng)絡(luò)負(fù)荷的增加,效率低下,操作時(shí)間一般在幾十秒以上,通過(guò)修改后操作時(shí)間基本是原時(shí)間的十分之一左右。還有就是經(jīng)常使用的一些數(shù)據(jù)字典小表,每次操作都要從后臺(tái)再獲取一遍,效率較低,改動(dòng)的辦法是當(dāng)進(jìn)入該UI畫(huà)面時(shí)只獲取一次,這樣也減少了系統(tǒng)負(fù)荷。另外針對(duì)一些多個(gè)數(shù)據(jù)表關(guān)聯(lián),大數(shù)據(jù)量操作的應(yīng)用,做了業(yè)務(wù)拆分,分畫(huà)面分步驟實(shí)現(xiàn)。

總之,前臺(tái)優(yōu)化總體把握就是減少數(shù)據(jù)量的操作和訪問(wèn)的原則,在這個(gè)前提下的優(yōu)化工作基本上難度不大,且效果顯著。

6.數(shù)據(jù)庫(kù)SQL優(yōu)化

系統(tǒng)后臺(tái)程序的優(yōu)化工作主要是SQL語(yǔ)句的優(yōu)化,從獲取的大量資料來(lái)看,SQL語(yǔ)句的優(yōu)化是數(shù)據(jù)庫(kù)最有成效的一個(gè)手段,因此SQL語(yǔ)句的影響非常大,系統(tǒng)往往因?yàn)橐粋€(gè)小的SQL語(yǔ)句不夠優(yōu)化,導(dǎo)致數(shù)據(jù)庫(kù)性能急劇下降,應(yīng)用服務(wù)器斷連、超時(shí),嚴(yán)重影響業(yè)務(wù)的正常運(yùn)行。寬厚板MES系統(tǒng)中發(fā)生多次性能危機(jī)中,90%都是SQl語(yǔ)句使用不當(dāng)造成。

這里我們借助使用第三方Oracle工具TOAD,進(jìn)行系統(tǒng)問(wèn)題的查找定位,具體方法如下:

首先通過(guò)數(shù)據(jù)庫(kù)系統(tǒng)性能的監(jiān)控,定位出現(xiàn)性能危機(jī)時(shí)的準(zhǔn)確時(shí)間。

根據(jù)時(shí)間段通過(guò)導(dǎo)出ORACLE的AWR報(bào)告,分析其中I/O、CPU占用較高的SQL語(yǔ)句

通過(guò)TOAD中執(zhí)行計(jì)劃具體分析SQL語(yǔ)句的cost,cost的高低決定數(shù)據(jù)庫(kù)執(zhí)行的效率,cost越小效率越高。

使用ORACLE中SQL優(yōu)化功能建議,結(jié)合實(shí)際情況,對(duì)后臺(tái)程序進(jìn)行優(yōu)化。

下面列舉一些常用的手段和方法。

6.1 建立必要的索引

必須熟悉數(shù)據(jù)庫(kù)應(yīng)用程序中的所有SQL語(yǔ)句,從中分析、歸納出作為Where條件子句的字段及其組合方式;在這一基礎(chǔ)上可以初步判斷出哪些表的哪些字段應(yīng)該建立索引,索引對(duì)SQL語(yǔ)句的性能會(huì)產(chǎn)生舉足輕重的影響。

建立索引常用的規(guī)則如下:

表的主鍵、外鍵必須有索引;

經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該建立索引;

經(jīng)常出現(xiàn)在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引;

索引應(yīng)該建在選擇性高的字段上;

索引應(yīng)該建在小字段上,對(duì)于大的文本字段甚至超長(zhǎng)字段,不要建索引;

復(fù)合索引的建立需要進(jìn)行仔細(xì)分析;盡量考慮用單字段索引代替:

頻繁進(jìn)行數(shù)據(jù)操作的表,不要建立太多的索引;

刪除無(wú)用的索引,避免對(duì)執(zhí)行計(jì)劃造成負(fù)面影響;

由于許多索引未建,導(dǎo)致全表掃描,尤其當(dāng)數(shù)據(jù)量大時(shí),基本上查詢(xún)時(shí)間需要幾分鐘左右都不一定完成,所以,建立合適的索引非常重要。

6.2 提高使用索引的效率

雖然建立了索引,但實(shí)際編程過(guò)程中,不同的SQL語(yǔ)句的寫(xiě)法,會(huì)導(dǎo)致索引無(wú)效。

避免對(duì)列的操作,任何對(duì)列的操作都可能導(dǎo)致全表掃描,這里所謂的操作包括數(shù)據(jù)庫(kù)函數(shù)、計(jì)算表達(dá)式等等,查詢(xún)時(shí)要盡可能將操作移至等式的右邊,甚至去掉函數(shù)。

增加查詢(xún)的范圍限制,避免全范圍的搜索。從而提高查詢(xún)效率。

盡量去掉“IN”、“OR”,對(duì)含有“N”、“OR”的Where子句常會(huì)使用工作表,使索引失效;如果不產(chǎn)生大量重復(fù)值,可以考慮把子句拆開(kāi);拆開(kāi)的子句中應(yīng)該包含索引。然后再做一個(gè)簡(jiǎn)單的加法,與原來(lái)的SQL語(yǔ)句相比,查詢(xún)速度更快。

分解復(fù)雜查詢(xún),用常量代替變量,對(duì)于復(fù)雜的Where條件組合,Where中含有多個(gè)帶索引的字段,考慮用IF語(yǔ)句分情況進(jìn)行討論;同時(shí),去掉不必要的外來(lái)參數(shù)條件,減低復(fù)雜度,以便在不同情況下用不同字段上的索引。

like子句盡量前端匹配,因?yàn)閘ike參數(shù)使用的非常頻繁,因此如果能夠?qū)ike子句使用索引,將很高的提高查詢(xún)的效率。在做like查詢(xún)時(shí),應(yīng)該盡量使查詢(xún)的匹配端是具體值,例如使用like‘512%’。

應(yīng)盡量避免在where子句中對(duì)字段進(jìn)行表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。

在使用索引字段作為條件時(shí),如果該索引是復(fù)合索引,那么必須使用到該索引中的第一個(gè)字段作為條件時(shí)才能保證系統(tǒng)使用該索引,否則該索引將不會(huì)被使用,并且應(yīng)盡可能的,讓字段順序與索引順序相一致。

索引并不是越多越好,索引固然可以提高相應(yīng)的select的效率,但同時(shí)也降低了insert及update的效率,因?yàn)閕nsert或update時(shí)有可能會(huì)重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。

任何地方都不要使用select*from t,用具體的字段列表代替“*”,數(shù)據(jù)的提取速度就會(huì)有相應(yīng)的提升。

盡量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力。

以上的方法,是完全可以相互結(jié)合同時(shí)運(yùn)用的。而且各種方法之間相互影響,緊密聯(lián)系。這種聯(lián)系既存在一致性,也可能帶來(lái)沖突,當(dāng)沖突發(fā)生時(shí),需要根據(jù)實(shí)際情況進(jìn)行選擇,沒(méi)有固定的模式。

7.數(shù)據(jù)庫(kù)備份系統(tǒng)

寬厚板MES系統(tǒng)運(yùn)行到目前已經(jīng)有6年多了,數(shù)據(jù)隨著時(shí)間不斷增長(zhǎng),部分?jǐn)?shù)據(jù)表的量已達(dá)幾千萬(wàn),歷史數(shù)據(jù)的查詢(xún)使用由于數(shù)據(jù)量大會(huì)直接影響系統(tǒng)的正常穩(wěn)定運(yùn)行,原系統(tǒng)沒(méi)有歷史數(shù)據(jù)導(dǎo)出備份功能,因此,做為優(yōu)化系統(tǒng)性能重要一部分工作內(nèi)容,我們自主開(kāi)發(fā)了歷史數(shù)據(jù)導(dǎo)出備份系統(tǒng),將其中的歷史數(shù)據(jù),按照合同關(guān)系的邏輯,從訂單開(kāi)始到發(fā)貨結(jié)束進(jìn)行打包歸檔,減輕在線系統(tǒng)的負(fù)荷,目前備份系統(tǒng)已經(jīng)投入運(yùn)行。

8.結(jié)束語(yǔ)

應(yīng)用系統(tǒng)的性能調(diào)整與優(yōu)化是一個(gè)系統(tǒng)工程,涉及的方面很多,是一個(gè)長(zhǎng)期不懈、不斷比較分析和調(diào)整的過(guò)程,需要全面系統(tǒng)地規(guī)劃考慮才能對(duì)數(shù)據(jù)庫(kù)運(yùn)行狀況做出一個(gè)綜合評(píng)估。只有深入領(lǐng)會(huì)和掌握Oracle數(shù)據(jù)庫(kù)系統(tǒng)所提供的強(qiáng)大功能,正確觀察和分析系統(tǒng)運(yùn)行中提供的各種信息,充分結(jié)合實(shí)際應(yīng)用特點(diǎn),才能合理制定出良好的優(yōu)化策略,目前,本系統(tǒng)數(shù)據(jù)庫(kù)經(jīng)過(guò)長(zhǎng)期的研究開(kāi)發(fā)、推敲測(cè)試和調(diào)整優(yōu)化,數(shù)據(jù)庫(kù)性能已有較大的提高,較好的滿(mǎn)足了本系統(tǒng)眾多軟件程序的訪問(wèn)使用,本系統(tǒng)數(shù)據(jù)庫(kù)表現(xiàn)出了較高的穩(wěn)定性和較好的使用性能,從而驗(yàn)證了所述采取的若干優(yōu)化措施是切實(shí)可行有效的。

當(dāng)然存在的問(wèn)題也不少,有一部分應(yīng)用由于業(yè)務(wù)邏輯復(fù)雜,優(yōu)化有一定的難度,光從SQL語(yǔ)句單一優(yōu)化已經(jīng)提高不了多少效率,將來(lái)只能從業(yè)務(wù)邏輯拆分,簡(jiǎn)化分步流程來(lái)實(shí)現(xiàn)優(yōu)化的目的。

參考文獻(xiàn)

[1]王勇.基于SQL數(shù)據(jù)庫(kù)的性能優(yōu)化問(wèn)題分析[J].電腦知識(shí)與技術(shù),2008,15:1004-1007.

[2]呂華,杜忠軍.數(shù)據(jù)庫(kù)性能優(yōu)化[J].計(jì)算機(jī)應(yīng)用,2003, 23(06).

篇9

關(guān)鍵詞:中文期刊,全文數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)系統(tǒng)

 

引言在追求快速、方便的網(wǎng)絡(luò)時(shí)代,只提供題錄、文摘數(shù)據(jù)庫(kù)已不能滿(mǎn)足讀者的要求,全文數(shù)據(jù)庫(kù)的建設(shè)是今后發(fā)展的方向。許多文獻(xiàn)數(shù)據(jù)庫(kù)都是通過(guò)網(wǎng)絡(luò)和提供檢索的,面對(duì)的是沒(méi)有檢索經(jīng)驗(yàn)的用戶(hù)和巨大的文獻(xiàn)處理的難題,如何建立一個(gè)有價(jià)值的、用戶(hù)滿(mǎn)意的、實(shí)用的全文數(shù)據(jù)庫(kù)就成為廣大圖書(shū)情報(bào)人員深入研究的課題。

全文數(shù)據(jù)庫(kù)除提供一般題錄數(shù)據(jù)庫(kù)的題名、分類(lèi)等檢索途徑外,還提供全文檢索。全文檢索是利用了文獻(xiàn)中的自然語(yǔ)言作為一個(gè)檢索入口,這種自然語(yǔ)言的檢索方式比較符合用戶(hù)的易于利用的需求。

中文與西方國(guó)家的語(yǔ)言不同,由大量獨(dú)立漢字組成,因此在建設(shè)中文全文數(shù)據(jù)庫(kù)時(shí)要注意數(shù)據(jù)庫(kù)系統(tǒng)、編碼與開(kāi)發(fā)工具的選擇。

1 全文數(shù)據(jù)庫(kù)系統(tǒng)軟件基本模塊的設(shè)計(jì)構(gòu)想由于全文數(shù)據(jù)庫(kù)是非結(jié)構(gòu)化的數(shù)據(jù),因此全文數(shù)據(jù)庫(kù)的結(jié)構(gòu)(記錄、字段、子字段等)的劃分及長(zhǎng)度的確定,往往隨文獻(xiàn)本身的內(nèi)容特點(diǎn)而彼此有很大的差異。與之相對(duì)應(yīng),全文數(shù)據(jù)庫(kù)系統(tǒng)的軟件及其功能模塊也會(huì)有很大的不同。作為功能完備的全文數(shù)據(jù)庫(kù)系統(tǒng),應(yīng)該具有以下的結(jié)構(gòu)特點(diǎn)及全部或大部分功能模塊。

1.1 數(shù)據(jù)庫(kù)結(jié)構(gòu)定義模塊這一模塊主要是確定庫(kù)的記錄、字段(包括重復(fù)字段或子字段),確定相應(yīng)記錄或字段的索引方式。字段設(shè)計(jì)之目的在于:增加正文之外的信息項(xiàng),增加檢索的切入點(diǎn);提高檢索的查準(zhǔn)性,借以進(jìn)行字段限定檢索,并提高檢索速度;索引方式的確定,以字段為單位。索引方式有四種:全字段作為一個(gè)完整單位作索引;以< >標(biāo)引符號(hào)內(nèi)字符串作索引;以%分割的重復(fù)字段作索引;每個(gè)字作索引(單字索引,主要用于正文字段)。在一條記錄中,字段的個(gè)數(shù)應(yīng)不限,一般最多能達(dá)到數(shù)百個(gè)字段。

1.2 數(shù)據(jù)預(yù)處理模塊由于全文數(shù)據(jù)庫(kù)的數(shù)據(jù)基本上來(lái)源于外部數(shù)據(jù),對(duì)不同格式的數(shù)據(jù)處理采用不同的方法。

電子排版文本。這種文本中含有排版符號(hào)。如果全文數(shù)據(jù)庫(kù)建立在這種排版軟件基礎(chǔ)上,則文本無(wú)需加工。但多數(shù)全文數(shù)據(jù)庫(kù)系統(tǒng)并非建立在這種排版文本基礎(chǔ)上的,因此有必要通過(guò)軟件一次全部刪除排版符號(hào),同時(shí)應(yīng)解決由于刪除排版符號(hào)而帶來(lái)的問(wèn)題,如補(bǔ)字、數(shù)學(xué)公式、上下標(biāo)等等,使之成為完整的純文本文件。

網(wǎng)上下載的PDF文件、網(wǎng)頁(yè)文件、光盤(pán)上記錄的某些特殊格式的數(shù)據(jù)。如果全文系統(tǒng)采用純文本格式,則需對(duì)其轉(zhuǎn)換。

以上這些文件的轉(zhuǎn)換,需要編制工具軟件,或利用已有的轉(zhuǎn)換工具。

文本預(yù)處理還包括數(shù)據(jù)的批式標(biāo)引。這是建立全文數(shù)據(jù)庫(kù)之前特別是數(shù)據(jù)裝載之前,主要是利用文字處理軟件和專(zhuān)門(mén)自動(dòng)標(biāo)引軟件對(duì)數(shù)據(jù)進(jìn)行的標(biāo)引,或按自己建立的標(biāo)引詞表,對(duì)文本進(jìn)行的掃描標(biāo)引。

1.3 裝庫(kù)模塊裝庫(kù)就是將數(shù)據(jù)預(yù)處理后的文本數(shù)據(jù)導(dǎo)入已有的庫(kù)結(jié)構(gòu)之中。

有的全文庫(kù)要求將數(shù)據(jù)轉(zhuǎn)換成ISO2709(CNMARC)格式才能裝庫(kù);有時(shí)可將有一定標(biāo)志的文本格式裝庫(kù);有的則將文本按原格式導(dǎo)入庫(kù)結(jié)構(gòu);有的不實(shí)際裝庫(kù),只在系統(tǒng)中建立指向文本文件地址的指針??梢愿鶕?jù)具體情況選擇裝庫(kù)方式,但最后一種方法不推薦使用。

1.4 標(biāo)引模塊全文庫(kù)正文的單字索引,不必建立,因?yàn)橄到y(tǒng)有識(shí)別每個(gè)漢字和其他符號(hào)或外文字串索引功能。

在以單字為基礎(chǔ)的索引中,以布爾邏輯為手段進(jìn)行檢索,誤檢率極高,需以位置檢索手段進(jìn)行檢索,用以提高查準(zhǔn)率。以單字為基礎(chǔ)的索引的優(yōu)點(diǎn)在于不需要人工標(biāo)引,可實(shí)現(xiàn)索引的自動(dòng)化,從而大大提高了建庫(kù)的效率。但單字索引也存在明顯的缺點(diǎn),即同義詞、相關(guān)詞無(wú)法控制,解決辦法可以通過(guò)在檢索匹配模塊設(shè)置后控詞表進(jìn)行后控檢索。

1.5 索引作業(yè)模塊索引作業(yè)就是按照庫(kù)結(jié)構(gòu)定義中的索引字段生成索引的過(guò)程,一般生成一個(gè)索引即可。為了區(qū)別不同字段的索引款目,可以在索引定義中加文字常量。這樣在混排索引中就可以把不同屬性的索引款目相對(duì)集中,在檢索時(shí),可以進(jìn)行按字順顯示。如要檢索作者為“高山”的著作,應(yīng)這樣輸入檢索式:“AU = 高山”,從而可以避免檢出作為關(guān)鍵詞的“高山”及正文中的“高山”。全文索引的主體應(yīng)該是正文的單字索引,借助這種索引可以使全文中的任何信息、中心主題信息與邊緣性信息都能被檢索出來(lái),避免標(biāo)引中的遺漏和主觀武斷,從而實(shí)現(xiàn)檢索的徹底性。

1.6用戶(hù)輸入檢索式模塊這一模塊是全文數(shù)據(jù)庫(kù)系統(tǒng)與用戶(hù)之間最直接的接口,也是決定檢索結(jié)果好壞的關(guān)鍵。全文數(shù)據(jù)庫(kù)的使用者往往缺乏系統(tǒng)檢索經(jīng)驗(yàn),要查到一些信息容易,但查全、查準(zhǔn)信息較難。全文庫(kù)檢索主要是使用自然語(yǔ)言,缺乏詞匯的控制,因此隨意性較大,檢索效果的評(píng)價(jià)也缺乏明顯的驗(yàn)證標(biāo)準(zhǔn)。要引導(dǎo)用戶(hù)正確提出檢索式,一般來(lái)說(shuō)有三種基本的引導(dǎo)用戶(hù)的模式:

詢(xún)問(wèn)表方式。即在用戶(hù)檢索時(shí),系統(tǒng)提出一個(gè)詢(xún)問(wèn)表格,檢索項(xiàng)目由用戶(hù)填寫(xiě)。這些項(xiàng)目如:欲檢索的篇名、作者姓名、關(guān)鍵詞、分類(lèi)號(hào)、單字等等。不必要求用戶(hù)每項(xiàng)都填,即使只填一、二項(xiàng)也可。詢(xún)問(wèn)表方式引導(dǎo)用戶(hù)表達(dá)自己信息需求的方式,對(duì)無(wú)檢索經(jīng)驗(yàn)者較為有用。

詞典式檢索。此方法適用于一般用戶(hù)。按詞典檢索時(shí),應(yīng)能允許用戶(hù)從顯示詞表中用光標(biāo)選詞,并且可選一個(gè)以上的詞,被選中的詞以“或”方式連結(jié)。如果讀者要用“與”“非”方式,應(yīng)能從表下所附的AND、NOT中點(diǎn)出這些運(yùn)算符,使之形成檢索式??偟膩?lái)說(shuō),其目標(biāo)應(yīng)該是減少用戶(hù)自己輸入漢字和運(yùn)算符,以提高效率并減輕其負(fù)擔(dān)。

命令方式。這是供有一定檢索經(jīng)驗(yàn)的用戶(hù)使用的,功能最為強(qiáng)大。命令方式主要是布爾運(yùn)算、位置運(yùn)算、括號(hào)嵌套、截?cái)喾?hào)、字段限定等。

1.7 用戶(hù)檢索分析處理模塊系統(tǒng)對(duì)來(lái)自屏幕的用戶(hù)檢索式加以處理,使之形成便于運(yùn)算的檢索方式。論文參考。對(duì)于復(fù)雜的檢索式,需要進(jìn)行逆波蘭變換,確定各檢索項(xiàng)的運(yùn)算次序。對(duì)詢(xún)問(wèn)表的檢索式也需根據(jù)用戶(hù)所填數(shù)據(jù)形成檢索式。對(duì)標(biāo)引詞表顯示中用戶(hù)光標(biāo)指定詞加以收集,并形成檢索式。

在這一模塊中,系統(tǒng)還應(yīng)該檢查用戶(hù)提問(wèn)檢索式是否有錯(cuò)誤(如左右括號(hào)不配對(duì),數(shù)個(gè)運(yùn)算符連用,字段文字常量輸錯(cuò)等),如發(fā)現(xiàn)錯(cuò)誤,應(yīng)向用戶(hù)做出提示,并給出修改建議。

1.8 檢索匹配模塊這一模塊與一般檢索系統(tǒng)相同,但作為全文數(shù)據(jù)庫(kù)來(lái)說(shuō)還應(yīng)具備下列功能:

較強(qiáng)的位置檢索功能。由于全文庫(kù)往往對(duì)正文字段單字索引,因此對(duì)單字的布爾檢索不大適用,而應(yīng)以位置檢索為主。位置檢索時(shí),應(yīng)對(duì)緊密相鄰的幾個(gè)字采用連寫(xiě)方法,不必插入位置運(yùn)算符?;蛘哒f(shuō),字與字之間默認(rèn)的運(yùn)算符是彼此緊密相鄰。

全文庫(kù)或指定集合中的順序掃描匹配檢索。當(dāng)對(duì)正文作單字索引的情況下,允許用戶(hù)使用這種掃描匹配進(jìn)行檢索。用戶(hù)只需輸出一個(gè)字符串(詞或短語(yǔ)),計(jì)算機(jī)就開(kāi)始對(duì)全庫(kù)或指定集合進(jìn)行檢索匹配。

1.9 檢索結(jié)果的處理模塊檢索結(jié)果的處理主要包括:顯示瀏覽有關(guān)記錄(段或句子)文本。排序:可由用戶(hù)指定排序鍵。排序鍵可以是年代、字順或命中頻率。排列次序可以是升或降序。聚類(lèi):在有屬性標(biāo)引的全文庫(kù)中可進(jìn)行聚類(lèi)。打印:可將命中結(jié)果打印輸出。下載:可以提供文本格式或機(jī)內(nèi)數(shù)據(jù)格式兩種下載方式。

2 數(shù)據(jù)庫(kù)系統(tǒng)、開(kāi)發(fā)工具及中文編碼的選擇2.1 數(shù)據(jù)庫(kù)系統(tǒng)的選擇理論上現(xiàn)在成熟的大型關(guān)系數(shù)據(jù)庫(kù)軟件均可作為中文期刊全文數(shù)據(jù)庫(kù)系統(tǒng),但從市場(chǎng)占有程度及成本和易用性考慮,用來(lái)存儲(chǔ)中文期刊全文的數(shù)據(jù)庫(kù)系統(tǒng)建議從以下幾種平臺(tái)中進(jìn)行選擇。如果服務(wù)器端操作系統(tǒng)為Unix或Linux,并且經(jīng)費(fèi)預(yù)算允許,建議選擇Oracle作為數(shù)據(jù)庫(kù)系統(tǒng)。Oracle數(shù)據(jù)庫(kù)是一種具有無(wú)限可伸縮性與高可用性,并可在集群環(huán)境中運(yùn)行商業(yè)軟件的互聯(lián)網(wǎng)數(shù)據(jù)庫(kù),具有400多個(gè)領(lǐng)先的數(shù)據(jù)庫(kù)功能,在集群技術(shù)、高可用性、商業(yè)智能、安全性、系統(tǒng)管理等方面都實(shí)現(xiàn)了新的突破。如果從降低成本考慮,可以選擇MySQL作為數(shù)據(jù)庫(kù)系統(tǒng)。以上兩種數(shù)據(jù)庫(kù)還提供支持Windows操作系統(tǒng)的版本,具有跨平臺(tái)能力。

如果服務(wù)器端操作系統(tǒng)為Windows,則建議選擇SQL Server作為數(shù)據(jù)庫(kù)系統(tǒng)。SQL Server是一個(gè)全面的數(shù)據(jù)庫(kù)系統(tǒng),使用集成的商業(yè)智能(BI)工具提供了企業(yè)級(jí)的數(shù)據(jù)管理。SQL Server數(shù)據(jù)庫(kù)引擎為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了更安全可靠的存儲(chǔ)功能,可以構(gòu)建和管理用于業(yè)務(wù)的高可用和高性能的數(shù)據(jù)應(yīng)用程序。

2.2 開(kāi)發(fā)工具的選擇如果系統(tǒng)需要跨平臺(tái)部署,在選擇Oracle或MySQL數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ)上,建議選擇Java為開(kāi)發(fā)工具。Java是一種簡(jiǎn)單的,面向?qū)ο蟮?,分布式的,解釋型的,健壯安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線程的動(dòng)態(tài)語(yǔ)言。如果對(duì)跨平臺(tái)沒(méi)有要求,并選擇SQL Server數(shù)據(jù)庫(kù)系統(tǒng),則建議選擇Visual Studio為開(kāi)發(fā)工具。Visual Studio 是微軟公司推出的開(kāi)發(fā)環(huán)境。是目前最流行的 Windows 平臺(tái)應(yīng)用程序開(kāi)發(fā)環(huán)境。目前已經(jīng)開(kāi)發(fā)到 9.0 版本,也就是 Visual Studio 2008。Visual Studio 可以用來(lái)創(chuàng)建 Windows 平臺(tái)下的 Windows 應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也可以用來(lái)創(chuàng)建網(wǎng)絡(luò)服務(wù)、智能設(shè)備應(yīng)用程序和Office 插件。

2.3 中文編碼的選擇中文編碼主要有以下四種:

GB2312:簡(jiǎn)體中文編碼,一個(gè)漢字占用2字節(jié),在大陸是主要編碼方式。當(dāng)文章中包含繁體中文、日文、韓文等等時(shí),這些內(nèi)容可能無(wú)法被正確編碼。

BIG5:繁體中文編碼。主要在臺(tái)灣地區(qū)采用。

GBK:支持簡(jiǎn)體及繁體中文,但對(duì)其它國(guó)家非拉丁字母語(yǔ)言還是有問(wèn)題。論文參考。

UTF-8:Unicode編碼的一種。Unicode用一些基本的保留字符制定了三套編碼方式,它們分別UTF-8,UTF-16和UTF-32。在UTF-8中,字符是以8位序列來(lái)編碼的,用一個(gè)或幾個(gè)字節(jié)來(lái)表示一個(gè)字符。論文參考。這種方式的最大好處,是UTF-8保留了ASCII字符的編碼作為它的一部分。UTF-8俗稱(chēng)“萬(wàn)國(guó)碼”,可以同屏顯示多語(yǔ)種,一個(gè)漢字占用3字節(jié)。

因此,為了保證全文數(shù)據(jù)的存儲(chǔ)和顯示不出現(xiàn)問(wèn)題,建議選擇UTF-8為數(shù)據(jù)庫(kù)系統(tǒng)編碼,應(yīng)該在裝庫(kù)操作前對(duì)所有內(nèi)容進(jìn)行編碼轉(zhuǎn)換,統(tǒng)一轉(zhuǎn)換成UTF-8編碼。

結(jié)語(yǔ)全文數(shù)據(jù)庫(kù)以其內(nèi)容完整、直接提供一次文獻(xiàn)等特點(diǎn),越來(lái)越受到人們的關(guān)注。全文數(shù)據(jù)庫(kù)給網(wǎng)絡(luò)環(huán)境下的信息交流提供了更為方便快捷的途徑。在全文檢索技術(shù)日趨成熟的條件下,全文數(shù)據(jù)庫(kù)在供讀者利用方面表現(xiàn)出的優(yōu)勢(shì)是其它類(lèi)型數(shù)據(jù)庫(kù)所無(wú)法替代的。因此,對(duì)中文全文數(shù)據(jù)庫(kù)的設(shè)計(jì)進(jìn)行研究,是信息服務(wù)發(fā)展的必然要求。

參考文獻(xiàn)[1]秦劍.我國(guó)數(shù)據(jù)庫(kù)建設(shè)的思考與展望[J]河南圖書(shū)館學(xué)刊,2002,(04).

[2]程文艷.數(shù)字圖書(shū)館——數(shù)字中國(guó)的開(kāi)路先鋒[J]情報(bào)科學(xué),2002,(06).

[3]楊麗兵.淺談中文過(guò)刊編目數(shù)據(jù)庫(kù)建設(shè)工作[J]農(nóng)業(yè)圖書(shū)情報(bào)學(xué)刊,2004,(01).

[4]何凱文.我國(guó)高校圖書(shū)館數(shù)字資源建設(shè)的問(wèn)題及發(fā)展途徑[J]圖書(shū)館建設(shè),2004,(05).

[5]曾莉紅.基于點(diǎn)擊率的全文數(shù)據(jù)庫(kù)檢索結(jié)果組織方法探討[J]情報(bào)雜志,2007,(06).

篇10

關(guān)鍵詞:Oracle數(shù)據(jù)庫(kù);索引;硬解析

引言

Oracle數(shù)據(jù)庫(kù)以支持大數(shù)據(jù)量、多用戶(hù)、高并發(fā)事務(wù)處理等優(yōu)勢(shì),越來(lái)越多的被應(yīng)用在大型企業(yè),如電信、銀行、電力等部門(mén),隨著高訪問(wèn)量所帶來(lái)的壓力逐漸增大,系統(tǒng)會(huì)出現(xiàn)吞吐量低,響應(yīng)時(shí)間長(zhǎng)等性能問(wèn)題,為了解決這個(gè)問(wèn)題有必要對(duì)數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化,數(shù)據(jù)庫(kù)的優(yōu)化可從兩方面進(jìn)行分析研究,制定出優(yōu)化策略。

1 影響Oracle數(shù)據(jù)庫(kù)系統(tǒng)性能的因素

Oracle數(shù)據(jù)庫(kù)性能問(wèn)題受到多方面因素影響,包括硬件環(huán)境,網(wǎng)絡(luò)I/O,應(yīng)用程序規(guī)范,數(shù)據(jù)庫(kù)參數(shù)配置,行遷移等

(1)數(shù)據(jù)庫(kù)服務(wù)器硬件環(huán)境:cpu,內(nèi)存,網(wǎng)絡(luò)傳輸狀況等方面均會(huì)影響oracle的性能。

(2)數(shù)據(jù)庫(kù)參數(shù)配置:Oracle數(shù)據(jù)庫(kù)為用戶(hù)提供了大量的參數(shù)配置,根據(jù)具體的應(yīng)用環(huán)境,調(diào)整參數(shù)配置,可以使數(shù)據(jù)庫(kù)達(dá)到更優(yōu),相反,錯(cuò)誤的參數(shù)配置可能令數(shù)據(jù)庫(kù)性能低下。

(3)網(wǎng)絡(luò)I/O:計(jì)算機(jī)的輸入輸出(I/O)是很耗時(shí)的系統(tǒng)行為,I/O優(yōu)化就是通過(guò)一定的措施減少I(mǎi)/O消耗時(shí)間。

(4)應(yīng)用程序的實(shí)現(xiàn):對(duì)于程序員而言,不合理的sql語(yǔ)句書(shū)寫(xiě)直接影響到Oracle數(shù)據(jù)庫(kù)的性能,且后期更改難度大。如書(shū)寫(xiě)sql語(yǔ)句不使用綁定變量,會(huì)使數(shù)據(jù)庫(kù)出現(xiàn)大量的硬解析,從而影響數(shù)據(jù)庫(kù)性能。

(5)行遷移:表中存在的數(shù)據(jù),在update操作過(guò)程中,行可能會(huì)變長(zhǎng),此時(shí),行會(huì)使用數(shù)據(jù)塊內(nèi)的剩余空間,當(dāng)數(shù)據(jù)塊內(nèi)沒(méi)有剩余空間的時(shí)候,數(shù)據(jù)會(huì)選擇新的數(shù)據(jù)塊進(jìn)行存放,行頭會(huì)保留在原數(shù)據(jù)塊中,指針指向新的數(shù)據(jù)塊內(nèi)的行,造成讀取數(shù)據(jù)的時(shí)候產(chǎn)生兩次I/O,下降了數(shù)據(jù)庫(kù)的性能。

2 數(shù)據(jù)庫(kù)優(yōu)化

2.1 內(nèi)存區(qū)調(diào)整

(1)在Oracle 10g以及以上版本,提供了內(nèi)存的自動(dòng)管理,Oracle會(huì)根據(jù)應(yīng)用的特點(diǎn)和服務(wù)器本身環(huán)境自動(dòng)調(diào)整內(nèi)存,SGA_TARGET參數(shù)就決定了是否使用SGA自動(dòng)管理,該參數(shù)不為0時(shí)為自動(dòng)管理,該參數(shù)為動(dòng)態(tài)管理。

(2)將數(shù)據(jù)常駐內(nèi)存:在生產(chǎn)數(shù)據(jù)庫(kù)中,有些經(jīng)常被訪問(wèn)的小表,可以將其常駐在內(nèi)存中,以避免對(duì)該表訪問(wèn)時(shí)頻繁產(chǎn)生磁盤(pán)I/O,以空間換時(shí)間,使響應(yīng)速度增大。具體方法:

SQL> alter system set db_keep_cache_size = 200M;//開(kāi)辟出200M的常駐區(qū)域;

SQL> alter table t1 storage (buffer_pool keep);//把表t1常駐在內(nèi)存中。

2.2 磁盤(pán)I/O調(diào)整

(1)分開(kāi)存儲(chǔ)數(shù)據(jù)文件和索引文件。Oracle數(shù)據(jù)庫(kù)在提取數(shù)據(jù)的時(shí)候會(huì)去索引和數(shù)據(jù)文件里讀數(shù)據(jù),將這兩個(gè)文件分開(kāi)存放在不同的硬盤(pán)上可以增加讀取速度以提高性能。

(2)日志文件的存放位置。日志文件寫(xiě)操作比較頻繁,可以選擇存儲(chǔ)在固態(tài)硬盤(pán)等高速存儲(chǔ)上。

(3)使用分區(qū)來(lái)避免磁盤(pán)爭(zhēng)用。當(dāng)一個(gè)表很大的時(shí)候,如:1GB(具體和環(huán)境有關(guān)),可以考慮分區(qū),把一個(gè)表的分區(qū)存放在不同的磁盤(pán)上,吞吐量可以大大增加。分區(qū)的類(lèi)型有多種,如范圍分區(qū)、哈希分區(qū)、組合分區(qū)、列表分區(qū)。

2.3 回滾段設(shè)置

回滾段保存著數(shù)據(jù)更新的前映像,當(dāng)事物回滾時(shí)會(huì)用到此前映像,原則上講,建議每個(gè)回滾段能同時(shí)進(jìn)行4個(gè)事物處理,但也應(yīng)該根據(jù)系統(tǒng)需求來(lái)設(shè)定回滾段的數(shù)目。

2.4 碎片整理

SQL> ALTER TABLE T1 ENABLE ROW MOVEMENT;//允許表T1 可以在線回收碎片

SQL> ALTER TABLE T1 SHRINK SPACE;//進(jìn)行空間回收

2.5 處理行遷移

利用移動(dòng)表的存放位置來(lái)消除行遷移,操作語(yǔ)句為:

SQL> ALTER TABLE T1 MOVE TABLESPACE tablespace_name;

此操作會(huì)使T1表在數(shù)據(jù)庫(kù)中重新碼放,但是索引會(huì)失效,注意要重建索引。

2.6 綁定變量

移動(dòng)渠道管理系統(tǒng)是OLTP(On-Line Transaction Processing聯(lián)機(jī)事務(wù)處理)系統(tǒng),綁定變量是OLTP很受關(guān)注的一個(gè)技術(shù)點(diǎn),OLTP數(shù)據(jù)庫(kù)系統(tǒng)中大量的sql語(yǔ)句并發(fā)執(zhí)行,速度飛快,內(nèi)存效率極高,綁定變量后會(huì)減少大量的sql語(yǔ)句解析消耗,從而減少數(shù)據(jù)庫(kù)壓力。

2.7 索引的建立與維護(hù)

索引是將無(wú)序的數(shù)據(jù)有序化,這樣可以在查詢(xún)數(shù)據(jù)的時(shí)候減少數(shù)據(jù)塊的讀取,實(shí)現(xiàn)快速定位數(shù)據(jù)。數(shù)據(jù)庫(kù)自動(dòng)維護(hù)索引,但隨著大量的增刪改操作,索引會(huì)產(chǎn)生許多空洞,可以采用合并或重建索引的方法進(jìn)行優(yōu)化,以提高訪問(wèn)速度。操作命令為:

SQL> ALTER index index1 coalesce;//合并索引的空洞

SQL> ALTER index index1 rebuild;//索引的重建

合并并不釋放索引段所擁有的空間,不處理正在變化的行,重建只能在沒(méi)有事物的情況下進(jìn)行,如果有未提交的事物,則會(huì)報(bào)錯(cuò)。

3 Oracle常用優(yōu)化工具

(1)Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)字典和動(dòng)態(tài)性能視圖,Oracle動(dòng)態(tài)性能視圖能反映出Oracle動(dòng)態(tài)運(yùn)行情況,對(duì)于數(shù)據(jù)庫(kù)的性能調(diào)整很有幫助。

(2)Oracle Statspack是DBA用來(lái)診斷數(shù)據(jù)庫(kù)的工具,在Oracle8i已經(jīng)被引入,并經(jīng)過(guò)多次調(diào)整增加的許多強(qiáng)有力功能,可以幫助DBA迅速定位數(shù)據(jù)庫(kù)瓶頸所在。此工具腳本存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,spcreate.sql為建立用戶(hù)和表腳本,以后采集的數(shù)據(jù)庫(kù)信息會(huì)放在這個(gè)用戶(hù)和表內(nèi)。spreport.sql為收集快照腳本。

(3)Oracle AWR(automatic workload repository自動(dòng)工作負(fù)載信息庫(kù)),Oracle建議用戶(hù)用這個(gè)取代statspack,AWR實(shí)質(zhì)是Oracle的一個(gè)內(nèi)置工具,它采集與性能相關(guān)的統(tǒng)計(jì)數(shù)據(jù),并從那些統(tǒng)計(jì)數(shù)據(jù)中導(dǎo)出性能量度,以跟蹤潛在問(wèn)題。它產(chǎn)生兩種類(lèi)型的輸出,文本格式和HTML格式,提供了非常友好的用戶(hù)報(bào)表。此工具腳本存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,名字為awrrpt.sql。在sqlplus下可以直接執(zhí)行,如:SQL>@$ORACLE_HOME/RDBMS/ADMIN/awrrpt.sql

(4)Oracle ASH(Active Session History),此工具從Oracle10gR2開(kāi)始引入,和AWR相比,ASH側(cè)重于當(dāng)前活動(dòng)回話(huà)的信息分析,Oracle每秒鐘會(huì)對(duì)數(shù)據(jù)庫(kù)中活動(dòng)的回話(huà)信息進(jìn)行采樣,這些信息被存放在一個(gè)動(dòng)態(tài)循環(huán)使用的內(nèi)存區(qū)域中(位于SGA區(qū)),此區(qū)域是循環(huán)使用的,數(shù)據(jù)庫(kù)活動(dòng)越頻繁,老的數(shù)據(jù)越會(huì)被快速覆蓋掉。軟件包也存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,名字為ashrpt.sql。

4 結(jié)束語(yǔ)

文章針對(duì)移動(dòng)渠道管理系統(tǒng)數(shù)據(jù)庫(kù)性能調(diào)整的實(shí)踐經(jīng)驗(yàn),總結(jié)了導(dǎo)致數(shù)據(jù)庫(kù)性能下降的原因和優(yōu)化方法,數(shù)據(jù)庫(kù)性能問(wèn)題在最近幾年越來(lái)越受到DBA的關(guān)注,只有在實(shí)踐中反復(fù)實(shí)驗(yàn)調(diào)整,才能使數(shù)據(jù)庫(kù)系統(tǒng)獲得最優(yōu)性能。

參考文獻(xiàn)

[1][美]Richard J?Niemiec,Oracle 10g Performance Tuning Tips & Techniques[M].北京:清華大學(xué)出版社,2010.