數(shù)據(jù)庫索引范文
時(shí)間:2023-03-23 20:48:59
導(dǎo)語:如何才能寫好一篇數(shù)據(jù)庫索引,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
【關(guān)鍵詞】空間數(shù)據(jù)庫;索引技術(shù);Web技術(shù);高維空間
隨著空間數(shù)據(jù)應(yīng)用的增加,存儲(chǔ)空間開銷的加大以及索引空間重疊的劇增,空間數(shù)據(jù)庫的索引性能下降。為提高空間查詢的效率,空間數(shù)據(jù)庫索引技術(shù)應(yīng)運(yùn)而生。下面我們將從四個(gè)方面來對(duì)空間數(shù)據(jù)庫索引技術(shù)進(jìn)行探討。
1.高維空間索引技術(shù)
隨著三維地理信息系統(tǒng)、多媒體數(shù)據(jù)庫及時(shí)空數(shù)據(jù)庫的研究和發(fā)展,對(duì)多維空間目標(biāo)的搜索及更新功能的要求越來越迫切。而目前常用的空間索引技術(shù),主要是針對(duì)一維或二維空間中的空間數(shù)據(jù)。將這些索引技術(shù)運(yùn)用于三維或更高維空間數(shù)據(jù)時(shí),其查詢效率將大大降低,有時(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ù)的研究仍然存在很多問題有待于進(jìn)一步探討。
2.基于空間關(guān)系的索引技術(shù)
基于空間關(guān)系的數(shù)據(jù)索引技術(shù)在空間數(shù)據(jù)庫中占有十分重要的地位。這是因?yàn)?,空間數(shù)據(jù)庫涉及對(duì)現(xiàn)實(shí)世界大量具有不規(guī)則幾何形狀空間目標(biāo)的處理,這些目標(biāo)之間存在著復(fù)雜的空間關(guān)系。很多查詢和分析操作都是基于目標(biāo)間空間關(guān)系的。只有在相應(yīng)的空間數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)上,依據(jù)目標(biāo)間的空間關(guān)系建立良好的索引機(jī)制,才有可能有效地提高對(duì)空間數(shù)據(jù)的處理效率,尤其是空間查詢的效率。否則,查詢某個(gè)空間目標(biāo)時(shí),必須將該目標(biāo)的特征值與空間數(shù)據(jù)庫中存儲(chǔ)的所有目標(biāo)進(jìn)行一一比較,以最終確定要查找的目標(biāo),這顯然是令人難以容忍的。由此可見,基于空間關(guān)系的空間索引技術(shù)研究具有十分重要的意義。
目前的空間索引技術(shù)都有其固定的優(yōu)勢(shì)和不足,其共同特點(diǎn)是基于空間目標(biāo)的空間位置來建立相應(yīng)的索引結(jié)構(gòu),其主要目的是提高空間數(shù)據(jù)庫系統(tǒng)中區(qū)域查詢效率。然而目前的空間索引技術(shù)難以根據(jù)目標(biāo)之間的空間關(guān)系來建立有效的檢索機(jī)制,從而極大地影響了系統(tǒng)的功能和效率。若能根據(jù)空間目標(biāo)之間的某些空間關(guān)系來動(dòng)態(tài)地相應(yīng)的索引機(jī)制,使之能夠依據(jù)目標(biāo)間的空間關(guān)系,快捷地查找到相關(guān)的目標(biāo),這必將極大地提高空間查詢和空間分析的效率,從而有效地?cái)U(kuò)充空間數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)組織、數(shù)據(jù)分析和數(shù)據(jù)維護(hù)功能。
3.基于Web技術(shù)的空間索引技術(shù)
與傳統(tǒng)的空間數(shù)據(jù)庫相比,基于Web的空間數(shù)據(jù)庫在體系結(jié)構(gòu)上有了根本的轉(zhuǎn)變,它主要包括以下幾部分:(1)基于Internet/Ineranet環(huán)境,采用了TCP/IP通信協(xié)議,大大擴(kuò)展了空間信息共享范圍。(2)在應(yīng)用層采用了HTTP協(xié)議,客戶端只需要有通用的瀏覽器即可,不需要有特殊的軟件,大大增強(qiáng)了系統(tǒng)的性能。(3)應(yīng)用的分布性??梢愿鶕?jù)網(wǎng)絡(luò)帶寬、計(jì)算機(jī)性能等一系列資源狀況,將應(yīng)用按照功能分布到不同的結(jié)點(diǎn)上,如分布到多臺(tái)服務(wù)器上或是將一部分簡單應(yīng)用分布到客戶機(jī)上,復(fù)雜的應(yīng)用仍交給服務(wù)器執(zhí)行,這樣可以大大提高系統(tǒng)的性能。(4)空間數(shù)據(jù)的分布性??臻g數(shù)據(jù)可以根據(jù)其本身具備的空間特征存儲(chǔ)在最適宜的位置上,從而大大簡化了對(duì)空間數(shù)據(jù)的管理。
基于Web的空間數(shù)據(jù)庫為信息的高度共享提供了可能,它改變了以往數(shù)據(jù)信息傳輸、、共享及應(yīng)用的過程和方式,是空間信息系統(tǒng)發(fā)展的必然趨勢(shì)?;赪eb的空間數(shù)據(jù)庫目前還處在發(fā)展階段,還存在著許多關(guān)鍵問題尚未突破,空間數(shù)據(jù)的存儲(chǔ)、檢索及相關(guān)索引技術(shù)結(jié)構(gòu)的建立即為其中等待解決的難題之一。
4.基于空間數(shù)據(jù)倉庫的索引技術(shù)
隨著信息技術(shù)的飛速發(fā)展和空間數(shù)據(jù)庫業(yè)界對(duì)海量空間數(shù)據(jù)存儲(chǔ)、管理、分析和交換的需求,以面向事務(wù)處理為主的空間數(shù)據(jù)庫系統(tǒng)已不能滿足需要,空間信息系統(tǒng)開始從管理轉(zhuǎn)向決策處理,空間數(shù)據(jù)倉庫就是為滿足這種新的需求而提出的空間信息集成方案,它與傳統(tǒng)空間數(shù)據(jù)庫的主要差別為面向主題的數(shù)據(jù)組織和管理、數(shù)據(jù)的集成、數(shù)據(jù)的維護(hù)與管理及空間數(shù)據(jù)的時(shí)空序列變化這四個(gè)方面。
空間數(shù)據(jù)倉庫是對(duì)空間數(shù)據(jù)進(jìn)行管理的數(shù)據(jù)倉庫,它將各種空間數(shù)據(jù)集成在一起提供給用戶。由于空間數(shù)據(jù)本身具有的特點(diǎn),空間數(shù)據(jù)倉庫具有許多更加復(fù)雜的特性與關(guān)鍵技術(shù),如空間數(shù)據(jù)倉庫內(nèi)數(shù)據(jù)的組織與顯示,空間數(shù)據(jù)變換,客戶端數(shù)據(jù)分析等,空間數(shù)據(jù)的高效存儲(chǔ)和數(shù)據(jù)索引技術(shù)也是空間數(shù)據(jù)倉庫的關(guān)鍵技術(shù)之一??臻g數(shù)據(jù)庫為了支持高層次的決策分析需要大量的數(shù)據(jù)。這些數(shù)據(jù)可能分布在不同的已有應(yīng)用中,存儲(chǔ)在不同的平臺(tái)和數(shù)據(jù)庫中??臻g數(shù)據(jù)倉庫則根據(jù)主題通過專業(yè)模型對(duì)不同源數(shù)據(jù)庫中的原始業(yè)務(wù)數(shù)據(jù)進(jìn)行抽取和聚集,形成一個(gè)多維視角,從而為用戶提供一個(gè)綜合的、面向分析的決策支持環(huán)境。這一過程的完成需要一套高效存儲(chǔ)和數(shù)據(jù)索引技術(shù)作為保證才能完成。隨著空間數(shù)據(jù)倉庫研究的不斷發(fā)展,基于數(shù)據(jù)倉庫的空間數(shù)據(jù)索引技術(shù)也將得到不斷的完善和發(fā)展。
5.結(jié)束語
空間數(shù)據(jù)索引是提高空間數(shù)據(jù)查詢最有效的方法,也最難全面掌握的技術(shù),因?yàn)檎_的索引機(jī)制可能使查詢效率提高一萬倍,而無效的索引可能會(huì)浪費(fèi)了數(shù)據(jù)庫空間,甚至大大降低查詢性能。采用不依賴于商用數(shù)據(jù)庫空間擴(kuò)展技術(shù)的空間數(shù)據(jù)引擎,具有良好的空間存儲(chǔ)和訪問效率,移植性好,靈活性高,更易于提高和完善,對(duì)于應(yīng)用模型的設(shè)計(jì)也更為有利。缺點(diǎn)是實(shí)現(xiàn)難度大,且不支持?jǐn)U展SQL查詢,數(shù)據(jù)維護(hù)復(fù)雜。商用空間數(shù)據(jù)庫的空間擴(kuò)展最大的優(yōu)點(diǎn)在于對(duì)象級(jí)的數(shù)據(jù)存儲(chǔ)機(jī)制和支持?jǐn)U展SQL的查詢。采用數(shù)據(jù)庫廠商提供的抽象數(shù)據(jù)類型存儲(chǔ)空間數(shù)據(jù),使得數(shù)據(jù)共享和互操作更有潛力。目前的各種商用空間數(shù)據(jù)庫引擎或空間擴(kuò)展技術(shù)有待于進(jìn)一步研究。
參考文獻(xiàn):
[1]談國新.一體化空間數(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ù)庫對(duì)象是一種邏輯結(jié)構(gòu)的集合,索引是供用戶快速查找到記錄的數(shù)據(jù)庫結(jié)構(gòu),在邏輯上和物理上都獨(dú)立于表的數(shù)據(jù)。索引可以在表內(nèi)創(chuàng)建一個(gè)或多個(gè)列的組合,當(dāng)建立索引以后表中數(shù)據(jù)會(huì)按照索引創(chuàng)建語句所定義的排序方式返回給用戶。索引有多種類型,除了標(biāo)準(zhǔn)索引外,還包括唯一索引、位圖索引、組合索引、基于函數(shù)的索引、反向鍵索引等。
建立索引能夠提高 SQL 語句執(zhí)行的性能,減少磁盤I/O。無索引查詢,通常是全表搜索后才會(huì)得到結(jié)果,全表搜索會(huì)讓數(shù)據(jù)庫服務(wù)程序遍歷表中的所有記錄然后返回結(jié)果;而建立索引后查詢,可以讓數(shù)據(jù)庫服務(wù)程序快速地定位到表中的確定行。當(dāng)表被刪除時(shí)所有與表相關(guān)的索引也將被刪除。
索引可以被創(chuàng)建、重建和刪除,索引建立語句:CREATE INDEX item_index ON itemfile (itemcode) TABLESPACE index_tbs;索引重建語句:ALTER INDEX item_index REBUILD;索引刪除語句:DROP INDEX item_index。
創(chuàng)建索引是為了提升數(shù)據(jù)庫查詢性能,在使用索引時(shí)需要注意以下情況:
1) 對(duì)于小表來說,使用索引對(duì)于性能不會(huì)有任何提高;
2) 當(dāng)索引列中有極多的不同的數(shù)據(jù)和空值時(shí)索引會(huì)使性能有極大的提高;
3) 經(jīng)常執(zhí)行更新、修改操作的字段需要謹(jǐn)慎創(chuàng)建索引,因?yàn)楦滤饕拈_銷會(huì)降低創(chuàng)建索引所期望獲得的性能;
4) 不要將索引與表存儲(chǔ)在同一個(gè)驅(qū)動(dòng)器上,分開存儲(chǔ)會(huì)去掉訪問的沖突從而使結(jié)果返回得更快。
1.2 索引對(duì)象優(yōu)化方法
在業(yè)務(wù)系統(tǒng)中針對(duì)索引對(duì)象的優(yōu)化,主要包括三種方式:一是重建過高的索引層次;二是清除無效的索引;三是對(duì)索引碎片的清理。
2.2 風(fēng)險(xiǎn)防范措施
針對(duì)數(shù)據(jù)庫對(duì)象的優(yōu)化,總體應(yīng)該遵循如下的風(fēng)險(xiǎn)防范原則:
1) 確保數(shù)據(jù)庫備份完整可用;
2) 所有操作和檢查環(huán)節(jié)都使用事前完成并預(yù)演通過的腳本,避免臨時(shí)修改腳本;
3) 每部分完成,通過檢查確認(rèn)無誤,再進(jìn)行其它部分,避免互相干擾;
4) 專家現(xiàn)場(chǎng)支持,及時(shí)處理突發(fā)問題。
在遵循上述原則的基礎(chǔ)之上,對(duì)索引對(duì)象的優(yōu)化需要注意以下風(fēng)險(xiǎn):
1) 監(jiān)測(cè)時(shí)間不夠,在一個(gè)監(jiān)測(cè)周期內(nèi)未操作過表,監(jiān)測(cè)過后又用到了這個(gè)表,需要索引,但此時(shí)此索引已被列為被優(yōu)化的對(duì)象;
2) 監(jiān)控過后,需要取消在用索引的監(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ù)庫級(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ù)庫的負(fù)載基本相同。數(shù)據(jù)庫的負(fù)載指標(biāo)一般以執(zhí)行的事務(wù)數(shù)、Redo size等指標(biāo)來表示。表1是某業(yè)務(wù)系統(tǒng)的這些指標(biāo)在索引對(duì)象優(yōu)化前后的對(duì)比數(shù)據(jù)。
通過索引對(duì)象的優(yōu)化,可以從對(duì)比表中明顯看出性能得到了大幅提升,影響較大的數(shù)據(jù)庫操作瓶頸主要集中在大表的查詢操作、關(guān)聯(lián)表的更新操作、大業(yè)務(wù)數(shù)據(jù)的統(tǒng)計(jì)分析操作等,在優(yōu)化后其操作響應(yīng)時(shí)間已經(jīng)能夠滿足用戶的業(yè)務(wù)需求。這些數(shù)據(jù)對(duì)比符合數(shù)據(jù)庫索引優(yōu)化方案的預(yù)期成效,也說明索引對(duì)象對(duì)數(shù)據(jù)庫性能的重要影響。
3 總結(jié)
企業(yè)的業(yè)務(wù)系統(tǒng)經(jīng)過長期的運(yùn)作,積累了大量的業(yè)務(wù)數(shù)據(jù),同時(shí)隨著業(yè)務(wù)增長、流程優(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)化,這樣才能滿足用戶不斷變化、業(yè)務(wù)不斷增長的需求。該文通過詳述數(shù)據(jù)庫索引對(duì)象的優(yōu)化方法、應(yīng)用案例,闡述了索引對(duì)象對(duì)系統(tǒng)性能影響的范圍和程度,并就優(yōu)化方案給出了應(yīng)遵循的原則和風(fēng)險(xiǎn)防范措施。在性能優(yōu)化中,針對(duì)數(shù)據(jù)庫性能瓶頸,索引對(duì)象優(yōu)化只是其中最常見的一種方案,具體優(yōu)化還需要根據(jù)對(duì)系統(tǒng)長時(shí)間監(jiān)測(cè)情況的分析,做出正確選擇。
參考文獻(xiàn):
[1] 羅海濱,范玉順,吳澄.工作流技術(shù)綜述[J].北京;軟件學(xué)報(bào),2000,11 (7).
[2] 蓋國強(qiáng).深入淺出Oracle數(shù)據(jù)庫——DBA入門、進(jìn)階與診斷案例[M].北京:人民郵電出版社,2006.
篇3
【關(guān)鍵詞】空間數(shù)據(jù)庫,索引,查詢優(yōu)化
中圖分類號(hào):G250文獻(xiàn)標(biāo)識(shí)碼: A
一、前言
近年來,OracleSpatial的空間數(shù)據(jù)庫正在不斷的完善,但依然存在一些問題和不足需要改進(jìn),在技術(shù)快速發(fā)展的新時(shí)期,不斷完善OracleSpatial的空間數(shù)據(jù)庫的索引與查詢優(yōu)化,對(duì)空間數(shù)據(jù)庫的發(fā)展有著重要意義。
二、查詢模型
OracleSpatial使用雙層查詢模型來解決空間查詢問題,即初級(jí)過濾操作和二級(jí)過濾操作。經(jīng)過兩次過濾,將返回精確的查詢結(jié)果集,在的級(jí)操作過濾步驟中,近似匹配滿足條件的一組候選對(duì)象,這些對(duì)象有可能滿足給定的空間查詢要求,其結(jié)果集是精確查詢的父集。
選擇近似表示的條件為:如果對(duì)象A與對(duì)象B的近似滿足一種關(guān)系,那么對(duì)象A與對(duì)象B就可能具有那種空間關(guān)系。例如,如果近似表示是分離的,那么對(duì)象A和對(duì)象B就將是分離的,但是如果近似表示非分離的,對(duì)象A和對(duì)象B仍可能是分離的。然后通過二次過濾,對(duì)初次過濾結(jié)果再次求精,就得到實(shí)體間的精確空間關(guān)系。使用這樣的二次過濾策略有幾項(xiàng)優(yōu)點(diǎn):空間對(duì)象一般都很大,因此要占用大量主內(nèi)存??臻g對(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ù)庫引擎,是一項(xiàng)重要特征。空間索引是根據(jù)空間準(zhǔn)則把搜索限制在各表(或數(shù)據(jù)空間)內(nèi)的一種機(jī)制。對(duì)于在與查詢區(qū)域重疊的數(shù)據(jù)空間中查找對(duì)象之類的查詢,要對(duì)其做出有效處理就需要索引。這由一個(gè)查詢多邊形(封閉定位)定義。第二種類型的查詢(空間連接)是從兩個(gè)數(shù)據(jù)空間內(nèi)找出對(duì)象對(duì),這兩個(gè)數(shù)據(jù)空間在空間范圍內(nèi)互動(dòng)。OracleSpatial為建立空間數(shù)據(jù)的索引提供了基于線性四叉樹的索引方案和基于參考樹的索引方案。
1、四叉樹索引
線性四叉樹索引把幾何對(duì)象映射到一組編號(hào)的“瓦片”(title)。二維空間中的一個(gè)瓦片就是一個(gè)方框,它的四邊形與兩條坐標(biāo)軸正交。所有幾何體得以存在的坐標(biāo)空間以一種規(guī)則的分級(jí)方式進(jìn)行分解。坐標(biāo)范圍(即坐標(biāo)空間)可視為一個(gè)矩形。在第一級(jí)分解中將此矩形沿每一坐標(biāo)方向分為兩半,形成四個(gè)“子瓦片”,被稱為“四分片”。在接下來的每一級(jí)分解中,每一個(gè)四分片由被沿每一坐標(biāo)方向分成兩半,再形成四個(gè)子瓦片。顧名思義,四叉樹的4葉結(jié)構(gòu)可以用來構(gòu)造索引樹。此過程持續(xù)進(jìn)行,直到某些終止條件(如瓦片的大小)得以滿足。這些瓦片可以用z-排序方案或等價(jià)方案進(jìn)行線性排序,從而產(chǎn)生線性四叉樹。
2、參考樹索引
除了提供四叉樹索引功能之外,OracleSpatial還提供了參考樹索引。參考樹索引既可以用來代替四叉樹索引,也可以與四叉樹索引并用。此外,參考樹索引還可用于對(duì)數(shù)據(jù)進(jìn)行三維和四維索引,這對(duì)于解決石油勘探、體系結(jié)構(gòu)、工程設(shè)計(jì)以及許多其他科學(xué)應(yīng)用中的問題至關(guān)重要。
3、可擴(kuò)展索引
應(yīng)用程序可在Oracle數(shù)據(jù)庫內(nèi)(以表的形式)或Oracle數(shù)據(jù)庫外(以文件形式)存儲(chǔ)索引數(shù)據(jù)。應(yīng)用程序通過管理、檢索和使用索引數(shù)據(jù)來計(jì)算用戶查詢。實(shí)質(zhì)上,應(yīng)用程序控制著域索引的結(jié)構(gòu)和語義內(nèi)容。數(shù)據(jù)庫系統(tǒng)通過與應(yīng)用程序交互來創(chuàng)建、維護(hù)和使用域索引。
域索引數(shù)據(jù)最好存儲(chǔ)在數(shù)據(jù)庫中,這樣,它就可以處理物理存儲(chǔ)。
四、空間查詢的優(yōu)化
1、空間查詢優(yōu)化的原理
我們已經(jīng)知道了Oracle在空間查詢過程中會(huì)采用雙重過濾的優(yōu)化方法,而在實(shí)際應(yīng)用的空間查詢中,查詢條件往往包含一些一維查詢的條件的限制。當(dāng)把查詢直接提交給Oracle數(shù)據(jù)庫進(jìn)行執(zhí)行時(shí),Oracle數(shù)據(jù)庫并不會(huì)區(qū)分一維查詢的條件和空間查詢的條件,直接進(jìn)行一次過濾與二次過濾,得到查詢的數(shù)據(jù),而在一次過濾時(shí),往往要過濾的數(shù)據(jù)量就可能會(huì)很大,因此會(huì)十分耗時(shí)。如果當(dāng)空間查詢中包含普通一維查詢條件時(shí),或許可以利用一維查詢條件使得執(zhí)行一次過濾時(shí)的數(shù)據(jù)量減少,從而減少空間查詢所需消耗的時(shí)間,提高空間查詢的效率。優(yōu)化原理也正是基于上個(gè)段落中提到的想法,當(dāng)空間查詢包含普通一維查詢時(shí),將空間查詢分兩步進(jìn)行:第一步,根據(jù)一維查詢的條件執(zhí)行普通一維查詢,將查詢得到的結(jié)果存入臨時(shí)表中;第二步,根據(jù)空間查詢的條件,對(duì)創(chuàng)建的臨時(shí)表進(jìn)行查詢,得到原查詢應(yīng)得到的結(jié)果。如果,當(dāng)根據(jù)一維查詢的條件執(zhí)行普通一維查詢的所得到的數(shù)據(jù)較原查詢一次過濾時(shí)需處理的數(shù)據(jù)量有明顯減少時(shí),便可起到減少時(shí)間、提高效率的優(yōu)化作用。
2、空間查詢優(yōu)化的技術(shù)支持
OCI是Oracle提供的調(diào)用接口,英文全稱為OracleCallInterface。它是Oracle數(shù)據(jù)庫的最底層數(shù)據(jù)訪問接口,在各類訪問接口中,功能最全、效率最高,卻也最復(fù)雜,但是OCI卻提供了很好的靈活性和高效性,為用戶的二次開發(fā)提供了很好的平臺(tái)。
3、空間查詢優(yōu)化程序的設(shè)計(jì)
(一)、程序流程
空間查詢優(yōu)化程序接收輸入的空間查詢SQL語句,判定其是否符合優(yōu)化程序的優(yōu)化條件。如果不符合優(yōu)化的條件,則直接執(zhí)行SQL語句,進(jìn)行空間查詢;如果需要優(yōu)化,則進(jìn)入優(yōu)化程序。首先,分析輸入的SQL語句,提取語句中要查詢的列、需要查詢的表格、查詢條件中關(guān)于空間查詢的限制以及關(guān)于普通一維查詢的限制;然后,根據(jù)已提取出的內(nèi)容,生成新的SQL語句;最后提交給Oracle數(shù)據(jù)庫執(zhí)行,將結(jié)果顯示出來并存入文件中。
(二)、可優(yōu)化的條件
當(dāng)查詢的條件中包含兩個(gè)或兩個(gè)以上的約束,并且約束條件中至少有一個(gè)為空間查詢的約束時(shí),即可實(shí)行優(yōu)化,否則的話,程序?qū)⒉粫?huì)進(jìn)行任何優(yōu)化,直接把SQL語句直接提交給Oracle數(shù)據(jù)庫執(zhí)行。
4、空間查詢優(yōu)化程序的實(shí)現(xiàn)
(一)、SQL語句的分析與優(yōu)化
由于SQL語句良好的語法結(jié)構(gòu)和空間查詢函數(shù)的結(jié)構(gòu)特點(diǎn),因此很容易將空間查詢的SQL語句進(jìn)行分析,例如,可以很清楚的知道所要查詢的內(nèi)容在select――from字段之間,所查詢的表在from――where之間,查詢的約束條件在where字段之后;而約束條件的區(qū)分則依靠空間查詢函數(shù)的特點(diǎn)――以“sdo_xxx”作為函數(shù)的開始。在分析過程中,由于要進(jìn)行字符串的匹配,為了提高匹配的效率,在匹配過程中采用了KMP算法。
(二)、優(yōu)化語句的生成
優(yōu)化語句的生成分兩步執(zhí)行。生成優(yōu)化語句的第一步是根據(jù)普通一維查詢的約束條件,將所要查詢的表的符合約束條件的所有內(nèi)容存入到臨時(shí)表中。
(三)、提交優(yōu)化后的SQL語句
優(yōu)化工作的最后一步為將優(yōu)化后的SQL語句提交給數(shù)據(jù)庫執(zhí)行,顯示查詢結(jié)果并將結(jié)果寫入到文件中。在輸出的過程中,必須知道每一列的類型才可以輸出結(jié)果。類型的明確通過調(diào)用OCI提供的OCIAttrGet函數(shù)實(shí)現(xiàn),將每一列的類型記錄到對(duì)應(yīng)的標(biāo)識(shí)列類型的數(shù)組中,在輸出時(shí),根據(jù)列的類型將相應(yīng)的值寫入用于輸出的變量中,顯示在屏幕上、存儲(chǔ)在文件中。整個(gè)優(yōu)化工作完成,結(jié)束會(huì)話,斷開與數(shù)據(jù)庫的連接,程序結(jié)束。
五、結(jié)束語
空間數(shù)據(jù)庫發(fā)展至關(guān)重要,因此,基于OracleSpatial的空間數(shù)據(jù)庫的索引與查詢優(yōu)化,要不斷提高技術(shù)水平,加強(qiáng)對(duì)空間數(shù)據(jù)庫的索引與查詢的重視,促進(jìn)OracleSpatial的空間數(shù)據(jù)庫應(yīng)用水平的提高。
參考文獻(xiàn)
[1]潘農(nóng)菲.基于OracleSpatial的GIS空間數(shù)據(jù)處理及應(yīng)用系統(tǒng)開發(fā)[J].計(jì)算機(jī)工程,2002
篇4
一、數(shù)據(jù)庫的優(yōu)化查詢方法
1、基于索引的優(yōu)化
數(shù)據(jù)庫的優(yōu)化方法多種多樣,不同的方法對(duì)提高數(shù)據(jù)庫查詢效率也不相同。
索引作為數(shù)據(jù)庫中的重要數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢的效率。而優(yōu)化查詢的重要方法就是建立索引,建立適合關(guān)系數(shù)據(jù)庫系統(tǒng)的索引,這樣就可以避免表掃描,并減少了因?yàn)椴樵兌斐傻妮斎胼敵鲩_銷。有效提高數(shù)據(jù)庫數(shù)據(jù)的查詢速度,優(yōu)化了數(shù)據(jù)庫性能。然而在創(chuàng)建索引時(shí)也增加了系統(tǒng)時(shí)間和空間的開銷。所以創(chuàng)建索引時(shí)應(yīng)該與實(shí)際查詢需求相結(jié)合,這樣才能實(shí)現(xiàn)真正的優(yōu)化查詢。
1.1判斷井建立必要的索引對(duì)所要?jiǎng)?chuàng)建的索引進(jìn)行正確的判斷,使所創(chuàng)建的索引對(duì)數(shù)據(jù)庫的工作效率提高有所幫助。為了實(shí)現(xiàn)這一點(diǎn)。我們應(yīng)做到以下要求:在熟記數(shù)據(jù)庫程序中的相關(guān)sQL語句的前提下,統(tǒng)計(jì)出常用且對(duì)性能有影響的語句,判斷數(shù)據(jù)庫系統(tǒng)中哪些表的哪些字段要建立索引。其次,對(duì)數(shù)據(jù)庫中操作頻繁的表。數(shù)據(jù)流量較大的表,經(jīng)常需要與其他表進(jìn)行連接的表等,要進(jìn)行重點(diǎn)關(guān)注。這些表上的索引將對(duì)SQL語句的性能產(chǎn)生重要的影響。
1.2對(duì)索引使用的一些規(guī)則索引的使用在一些大型數(shù)據(jù)庫系統(tǒng)中會(huì)經(jīng)常使用到。這樣可以有效的提高數(shù)據(jù)庫性能,使數(shù)據(jù)庫的訪問速度得到提高。但索引的使用要恰倒好處,所以我們?cè)谑褂盟饕龝r(shí)應(yīng)遵守使用原則:建立索引可以提高數(shù)據(jù)庫的查詢速度。但索引過多,不但不能實(shí)現(xiàn)優(yōu)化查詢,反而會(huì)影響到數(shù)據(jù)庫的整體性能。索g作為數(shù)據(jù)庫中實(shí)際存在的對(duì)象,每個(gè)索引都要占用一定的物理空間。所以對(duì)于索引的建立要考慮到物理空間容量,以及所建立索引的必要性和實(shí)用性。
1.3合理的索引對(duì)SQL語句的意義索引建壺之后,還要確保其得到了真正的使用,發(fā)揮了其應(yīng)有的作用。首先,可以通過SQL語句查詢來確定所建立的索引是否得到了使用,找出沒有使用到的索引。分析素引建立但沒有使用的原因,使其真正發(fā)揮作用。其次,索引得到使用以后,是否得到了預(yù)期的效果,對(duì)數(shù)據(jù)庫的性能是否實(shí)現(xiàn)了真正意義上的提高,只有合理的索引才能真正提高數(shù)據(jù)庫的性能。
2、優(yōu)化SQL語句
在使用索引時(shí)可以有效的提高查詢速度,但如果SQL語句使用不恰當(dāng)?shù)脑挘⒌乃饕筒荒馨l(fā)揮其作用。所以我們應(yīng)該做到不但會(huì)寫SQL,還要寫出性能優(yōu)良的SQL語句。下面,就如何優(yōu)化引用例子進(jìn)行說明。
首先,在進(jìn)行查詢時(shí),返回的值應(yīng)該是查詢所需要的。在查詢中應(yīng)該盡量減少對(duì)數(shù)據(jù)庫中的表的訪問行數(shù),使查詢的結(jié)果范圍最小,這就意味著在查詢時(shí),不能過多的使用通配符,如:selecf*fmm tablet語句,而應(yīng)該做到最小化查詢范圍,要查詢幾行幾列就選擇幾行幾列,如:selectcoil from tablel ;多數(shù)情況下,用戶并不需要查詢到的所有數(shù)據(jù),而只是部分或靠前的數(shù)據(jù)時(shí),我們也可以通過SQL語句來進(jìn)行限制查詢的結(jié)果,如:select top 50 coll from tablel。
其次,對(duì)于一些特殊的SQL語句,在使用時(shí)應(yīng)正確選擇。我們用一組例子來說明,如:EXISTS,NOT EXISTS。
語句一:select sum(tt,c1)from t1where((select count(*)from t2 where t2,c2=t1,c2)>0)
語句二:select sum“1,c1)from tl whereexists(select*from t2 where乜,c2=t1,c1)
兩個(gè)語句所得到的結(jié)果相同,但,語句二的效率要遠(yuǎn)高于語句一,因?yàn)檎Z句一在查詢中產(chǎn)生了大量的索引掃描。
在對(duì)數(shù)據(jù)庫查詢時(shí),所使用的語句多種多樣,但選擇恰當(dāng)?shù)牡淖志淠軌蛴行У奶岣卟樵冃省?/p>
最后,WHERE子句在使用時(shí)應(yīng)該注意的問題。
在WHERE子句中可以使用exist和not exist代替in和not in,應(yīng)該盡量避免使用in,not in,0r或者h(yuǎn)aving??梢允褂帽礞溄哟鎒xist。Having可以用where代替,如果無法代替可以分兩步處理。
二、數(shù)據(jù)庫系統(tǒng)的安全
數(shù)據(jù)庫系統(tǒng)的安全框架可分為三個(gè)層次:網(wǎng)絡(luò)系統(tǒng)層次、宿主操作系統(tǒng)層次和數(shù)據(jù)庫管理系統(tǒng)層次。由于數(shù)據(jù)庫系統(tǒng)在操作系統(tǒng)下都是以文件形式進(jìn)行管理的,因此入侵者可以直接利用操作系統(tǒng)的漏洞竊取數(shù)據(jù)庫文件,或者直接利用OS工具來非法偽造、篡改數(shù)據(jù)庫文件內(nèi)容。因此,數(shù)據(jù)庫系統(tǒng)的安壘性很大程度上依賴于數(shù)據(jù)庫管理系統(tǒng)。如果數(shù)據(jù)庫管理系統(tǒng)安全機(jī)制非常強(qiáng)大,則數(shù)據(jù)庫系統(tǒng)的安全性能就較好。根據(jù)數(shù)據(jù)庫安全的三個(gè)層次,筆者提出了一個(gè)數(shù)據(jù)庫入侵檢測(cè)系統(tǒng),其外層用基于網(wǎng)絡(luò)的入侵檢測(cè),中間層用基于主機(jī)的入侵檢測(cè),內(nèi)層采用人侵容忍。此系統(tǒng)采用系統(tǒng)整體安全策略,綜合多種安全措施,實(shí)現(xiàn)了系統(tǒng)關(guān)鍵功能的安全性和健壯性。
三、數(shù)據(jù)庫入侵檢測(cè)技術(shù)
數(shù)據(jù)庫入侵檢測(cè)系統(tǒng)的研究與設(shè)計(jì)借鑒了針對(duì)網(wǎng)絡(luò)和針對(duì)主機(jī)的入侵檢測(cè)技術(shù),在此基礎(chǔ)上,又考慮了數(shù)據(jù)庫自身的特點(diǎn)。按照檢測(cè)方法分為:誤用檢測(cè)和反常檢測(cè)。
(1)數(shù)據(jù)庫誤用檢測(cè)
誤用檢測(cè)是指將已知的攻擊特征存儲(chǔ)在誤用特征知識(shí)庫里面,然后根據(jù)用戶的當(dāng)前操作行為與知識(shí)庫里的誤用人侵規(guī)則進(jìn)行匹配檢驗(yàn),如果符合知識(shí)庫中的入侵特征,則說明發(fā)生了入侵。誤用特征知識(shí)庫中的入侵規(guī)則由安全專家定義,可以隨時(shí)添加、修改,然后保存在知識(shí)庫中,用來對(duì)審計(jì)數(shù)據(jù)進(jìn)行匹配比較。誤用檢測(cè)的優(yōu)點(diǎn)是檢測(cè)的準(zhǔn)確率高,缺點(diǎn)是只能對(duì)已知的攻擊特征進(jìn)行匹配檢驗(yàn),對(duì)未知的攻擊類型無法發(fā)現(xiàn),而對(duì)未知攻擊類型的檢測(cè)要依靠異常檢測(cè)。所以,誤用檢測(cè)常常與異常檢測(cè)結(jié)合起來使用。
(2)數(shù)據(jù)庫反常入侵檢測(cè)
篇5
關(guān)鍵詞: oracle數(shù)據(jù)庫;sql;數(shù)據(jù)庫索引;查詢優(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ù)庫常見的資源瓶頸類型
oracle9i數(shù)據(jù)庫運(yùn)行時(shí),常見的瓶頸現(xiàn)象有以下幾種類型:
內(nèi)存瓶頸:當(dāng)oracle9i進(jìn)程需要更大的內(nèi)存空間超過系統(tǒng)可提供時(shí)。
磁盤i/0瓶頸:由于內(nèi)存緩沖區(qū)的空間不足,或者表空間及其文件在硬件上的分配不合理而導(dǎo)致進(jìn)程對(duì)磁盤的頻繁i/0讀寫。
cpu瓶頸:盡管多數(shù)情況下,都是由操作系統(tǒng)的內(nèi)核來管理分配有效的cpu給oracle9i數(shù)據(jù)庫進(jìn)程使用,但是,仍然會(huì)出現(xiàn)過多的應(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ù)庫某一方面進(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ù)庫查詢優(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ì)該問題的解決中,主要是針對(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)程來說都是全局的可用的。圖1為sga結(jié)構(gòu)圖。緩沖區(qū)高速緩存是sga 中為所有用戶和系統(tǒng)進(jìn)程保存數(shù)據(jù)的區(qū)域,任何數(shù)據(jù)在傳遞給一個(gè)調(diào)用的應(yīng)用程序之前,都必須駐留在這片高速緩存中。
這片區(qū)域是共享的,所以多個(gè)進(jìn)程可以從這片高速緩存讀取同樣的數(shù)據(jù)塊,而不必每次都從物理磁盤中讀取。共享池是sga 中的另一個(gè)區(qū)域,其中保存著關(guān)于待執(zhí)行的sql語句的信息。他由兩部分組成:數(shù)據(jù)字典高速緩存,存放從數(shù)據(jù)字典中讀取的信息以用于處理sql請(qǐng)求;庫高速緩存,存放需要執(zhí)行的sql語句信息,包括每個(gè)sql語句的語法分析樹和執(zhí)行計(jì)劃。如果多個(gè)用戶要執(zhí)行同樣的sql語句,那么語法分析樹和執(zhí)行計(jì)劃就可以重復(fù)利用,省去了語法分析步驟的昂貴花費(fèi)。
2.2 調(diào)整sga 結(jié)構(gòu)
一般來講,在系統(tǒng)硬件支持的情況下,系統(tǒng)全局區(qū)越大越有利于數(shù)據(jù)庫高效的運(yùn)行。大的緩沖區(qū)高速緩存可以緩存更多的數(shù)據(jù)塊,這樣可以提高緩存命中率,節(jié)省物理磁盤讀取的高昂代價(jià);大的共享池意味著大的庫高速緩存。庫緩存的內(nèi)存結(jié)構(gòu)如圖2所示。
圖2 庫緩存的內(nèi)存結(jié)構(gòu)
庫緩存越大,可以保存的sql語法分析信息越多;此外,數(shù)據(jù)庫中的一些對(duì)象,如表、索引、過程、觸發(fā)器、軟件包等也在首次執(zhí)行后進(jìn)駐庫高速緩存。大的庫緩存可以保證對(duì)這些對(duì)象的高命中率,從而節(jié)省解析和載入代價(jià)。作為一個(gè)通用的優(yōu)化原則,我們?cè)诮鉀Q該問題時(shí),適當(dāng)增大了sga 的容量,從而保證oracle實(shí)例可以比較高效的運(yùn)行。設(shè)置緩沖區(qū)高速緩存的容量為32 m ,設(shè)置共享池的大小為56m。運(yùn)行rpt_lib.sql程序檢查庫高速緩存不足率(還沒有運(yùn)行該腳本),表明庫緩存足夠。
2.3 oracle數(shù)據(jù)庫的物理結(jié)構(gòu)和邏輯結(jié)構(gòu)
oracle數(shù)據(jù)庫的物理結(jié)構(gòu)從操作系統(tǒng)一級(jí)查看,就是由一個(gè)個(gè)的文件組成,從物理上可劃分為:數(shù)據(jù)文件、日志文件、控制文件和參數(shù)文件。數(shù)據(jù)文件中存放了所有的數(shù)據(jù)信息;日志文件存放數(shù)據(jù)庫運(yùn)行期間產(chǎn)生的日志信息,它被重復(fù)覆蓋使用,若不采用歸檔方式的話,已被覆蓋的日志信息將無法恢復(fù);控制文件記錄了整個(gè)數(shù)據(jù)庫的關(guān)鍵結(jié)構(gòu)信息,它若被破壞,整個(gè)數(shù)據(jù)庫將無法工作和恢復(fù);參數(shù)文件中設(shè)置了很多oracle數(shù)據(jù)庫的配置參數(shù),當(dāng)數(shù)據(jù)庫啟動(dòng)時(shí),會(huì)讀取這些信息。
oracle數(shù)據(jù)庫的邏輯結(jié)構(gòu)則是由一些數(shù)據(jù)庫對(duì)象組成,這也是數(shù)據(jù)庫管理員和應(yīng)用開發(fā)人員經(jīng)常用到和查看的邏輯對(duì)象,如:數(shù)據(jù)庫表空問、表、索引、段、視圖、存儲(chǔ)過程、觸發(fā)器等。數(shù)據(jù)庫的邏輯存儲(chǔ)結(jié)構(gòu)(表空間等)決定 7數(shù)據(jù)庫的物理空問是如髓使用的,其關(guān)系示意圖如圖3所示
3 查詢優(yōu)化的策略
3.1基于索引的優(yōu)化
索引是數(shù)據(jù)庫中一個(gè)常用而重要的數(shù)據(jù)庫對(duì)象,而優(yōu)化查詢重要的方法是建立索引,在關(guān)系數(shù)據(jù)庫系統(tǒng)的表上建立合適的索引,可以避免表掃描并減少因查詢而造成的i/o開銷,提高數(shù)據(jù)庫數(shù)據(jù)查詢的速度,改善數(shù)據(jù)庫性能。但是創(chuàng)建索引會(huì)增加系統(tǒng)的時(shí)間和空間的開銷。因此創(chuàng)建索引時(shí)必須要與實(shí)現(xiàn)應(yīng)用系統(tǒng)的查詢需求密切結(jié)合,才能達(dá)到優(yōu)化查詢的目的。
3.1.1建立必要的索引
判斷索引必要性的最終標(biāo)準(zhǔn)則是判斷這些索引是否對(duì)數(shù)據(jù)庫的工作效率有所幫助。在實(shí)際應(yīng)用的過程中,應(yīng)該為優(yōu)化工作做以下幾點(diǎn)準(zhǔn)備:
首先必須熟悉數(shù)據(jù)庫應(yīng)用程序中所有的sql語句,并從中統(tǒng)計(jì)出常用且可能對(duì)性能有影響的部分語句;然后分析、歸納出作為where條件子句的字段及其各種組合方式;在這一基礎(chǔ)上可以初步判斷出哪些表的哪些字段應(yīng)該建立索引。其次,必須熟悉應(yīng)用程序,要了解哪些表是數(shù)據(jù)操作頻繁的表;哪些表經(jīng)常與其他表進(jìn)行連接;哪些表中的數(shù)據(jù)量可能很大;數(shù)據(jù)量大的表中各個(gè)字段的數(shù)據(jù)分布情況如何等等。對(duì)于滿足上述條件的這些表,必須重點(diǎn)關(guān)注。因?yàn)榻⒃谶@些表上的索引,將對(duì)sql語句的性能產(chǎn)生舉足輕重的影響。
3.1.2 使用索引的一些規(guī)則
在大型應(yīng)用開發(fā)或表較大的情況下,使用索引可以極大減少數(shù)據(jù)庫讀寫次數(shù),從而提高數(shù)據(jù)庫訪問速度,所以,索引在應(yīng)用程序開發(fā)中經(jīng)常被使用,但如何正確使用索引以發(fā)揮它的優(yōu)勢(shì)需遵循以下原則:
在主鍵(primly key)的索引方面,不應(yīng)有超過25%的列成為主鍵,而只有很少的普通列,這會(huì)浪費(fèi)索引空間在索引的使用效率方面,當(dāng)選擇數(shù)據(jù)少于全表的20%,并且表的大小超過oracle的5個(gè)數(shù)據(jù)塊時(shí),使用索引才會(huì)有效,否則用于索引的i/o加上用于數(shù)據(jù)的i/o就會(huì)大于做一次全表掃描的i/o.
另外,在數(shù)據(jù)分布不均勻的特殊情況下,選擇性不高的索引也要建立。假設(shè)表someinfo中數(shù)據(jù)量很大,有一百萬行,其中有一個(gè)字段flag,取值范圍為枚舉值:[0,l,2,3,4,5,6,7]。按照前面所述索引建立的規(guī)則,該字段只有8種取值,索引值的重復(fù)率很高,索引選擇性明顯很低,通常被考慮為不必建立索引。然而,如果該字段上數(shù)據(jù)值的分布情況非常特殊,如表l所示:
假定常用的查詢中,查詢flag<6的情況既多又頻繁,毫無疑問,如果能夠建立索引,并且被應(yīng)用,那么必將大大提高這種情況的查詢效率。
使用索引尤其應(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子旬中,將條件語句按最少約束-最多約束排序。當(dāng)指向被除行的索引所占空間超過總索引空間的20%時(shí),就應(yīng)刪除并重建索引,以節(jié)省空間,提高性能。
3.1.3 讓sql語句用上合理的索引
建立必要的索引之后,并非意味著數(shù)據(jù)庫性能的提高已經(jīng)得到了令人滿意的結(jié)果,還要針對(duì)某些具體的sql語句進(jìn)行分析:
首先,確定索引是否真正得到了使用。不發(fā)揮作用的索引,正如建好的樓宇無人居住,這是對(duì)資源的浪費(fèi)。不允許有閑置的索引,應(yīng)竭力讓那些仍沒有使用索引的sql語句發(fā)揮作用。
其次,判斷索引是否利用得合理。特別是一些復(fù)雜的sql語句,當(dāng)其中where子句包含多個(gè)帶有索引的字段時(shí),更應(yīng)該注意索引的選擇是否合理。錯(cuò)誤的索引不會(huì)使數(shù)據(jù)庫性能得到預(yù)期的提高,往往還會(huì)產(chǎn)生一些與愿望背道而馳的負(fù)面影響。下面,就如何使用合理索引的問題,引用實(shí)例進(jìn)行說明
3.2 基于sql語句的優(yōu)化
由于oracle9i是關(guān)系型數(shù)據(jù)庫,sql語句是面向結(jié)果而不是面向過程的查詢語言,所以它包含一個(gè)基于開銷的優(yōu)化程序(cost based optimizer)及一個(gè)基于規(guī)則的優(yōu)化程序(rule based optimizer)來對(duì)用戶提交的及時(shí)查詢提供一個(gè)最佳的執(zhí)行策略,這個(gè)執(zhí)行策略就是執(zhí)行這個(gè)查詢所需的一系列步驟。
3.2.1 查詢優(yōu)化程序中sql語句的調(diào)整
要對(duì)查詢語句進(jìn)行優(yōu)化,一個(gè)簡單直接有效的方法是對(duì)sql語句進(jìn)行調(diào)整,減少計(jì)算量,提高查詢的響應(yīng)速度。對(duì)sql語句進(jìn)行調(diào)整時(shí)要遵循下列原則:
首先,選擇運(yùn)算盡可能先做,并在對(duì)同一個(gè)表進(jìn)行多個(gè)選擇運(yùn)算時(shí),選擇影響較大的語句放在前面。
其次,在執(zhí)行連接前對(duì)關(guān)系作適當(dāng)?shù)念A(yù)處理,預(yù)處理的方法有兩種,在連接屬性上建立索引和對(duì)關(guān)系進(jìn)行排序。
最后,應(yīng)避免相關(guān)子查詢。sql概念上將位于where子旬中的相關(guān)子查詢處理成獲取參數(shù)并且返回—個(gè)單獨(dú)的值或值的集合(也可能為空集)的函數(shù)。它是按以下方式執(zhí)行的:首先計(jì)算位于外層查詢的form子句中關(guān)系的笛卡爾積,然后對(duì)該笛卡爾積的每個(gè)元組用位于where子句中的謂詞進(jìn)行測(cè)試。這種執(zhí)行方式技術(shù)上稱為相關(guān)執(zhí)行,相關(guān)執(zhí)行方式效率不高,因?yàn)樽硬樵円獙?duì)應(yīng)位于外層查詢的每一個(gè)元組進(jìn)行單獨(dú)的計(jì)算,從而導(dǎo)致大量的隨機(jī)磁盤i/o操作。所以在實(shí)際應(yīng)用中,若可以用連接查詢代替的子查詢,則用連接查詢實(shí)現(xiàn);例如,有以下相關(guān)子查詢語句:
select sname
from student
where exists(
select *
from student_grade
where score>90 and student.sno =student_grade.sno)
用連接查詢實(shí)現(xiàn)以上子查詢?nèi)缦拢?/p>
select sname
from student,student_grade
where score>90 and student.sno =student_grade.sno)
如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。
3.2.2書寫sql的一些經(jīng)驗(yàn)
(1)不要在索引的字段上面進(jìn)行任何操作(包括函數(shù)操作),例如select *from emp where sal*12>10000;要寫成select * from emp where sal>10000/12:
(2)盡量使用union替換掉or的操作,如果可能,使用uni0n all
(3)如果能用連接操作處理的語句,最好不要使用嵌套子查詢
(4)如果返回的結(jié)果集超過表記錄的40%以上,最好使用全表掃描,而不要使用索引,因?yàn)槭褂盟饕送ㄟ^rowid對(duì)表進(jìn)行操作外,還增加了對(duì)索引的操作。
(5)如果不打算使用某個(gè)索引。對(duì)于字符類型的字段a(有索引),可以用aii代替,對(duì)于數(shù)字類型子段b(有索引),使用b+0就可以使基于開銷的優(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ǔ)過程
存儲(chǔ)過程是sql語句和可選控制流語句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理,創(chuàng)建后便可轉(zhuǎn)換為可執(zhí)行代碼,作為數(shù)據(jù)庫的一個(gè)對(duì)象存儲(chǔ)在數(shù)據(jù)庫中,存儲(chǔ)過程的代碼駐留在服務(wù)器端,因而執(zhí)行時(shí)不需要將應(yīng)用程序代碼向服務(wù)器端傳送,可以大大減輕網(wǎng)絡(luò)負(fù)載。同時(shí),由于存儲(chǔ)過程已編譯為可執(zhí)行代碼,不需要每次執(zhí)行時(shí)進(jìn)行分析和優(yōu)化工作,只需要從高速緩沖存儲(chǔ)器中調(diào)用存儲(chǔ)過程已編譯好的二進(jìn)制代碼來執(zhí)行,從而減少了預(yù)處理所花費(fèi)的時(shí)間,提高了系統(tǒng)的效率。另一方面,使用存儲(chǔ)過程還易于維護(hù),且表的結(jié)構(gòu)改變時(shí),不影響客戶端的應(yīng)用程序。
3.3.2避免相關(guān)子查詢
如果一個(gè)列的屬性名同時(shí)在主查詢和where子句查詢中出現(xiàn),那么很可能當(dāng)主查詢中的列值改變之后,子查詢必須重新查詢一次。查詢嵌套層次越深,效率越低,因此,應(yīng)盡量避免子查詢,如果不可避免,那么要在子查詢中過濾掉盡可能多的行。
3.3.3避免或簡化排序
應(yīng)當(dāng)簡化或避免對(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)排序的列來自不同的表。
為了避免不必要的排序,應(yīng)正確增建索引,合理合并數(shù)據(jù)庫表,在必要時(shí)對(duì)表進(jìn)行反規(guī)范化處理。如果排序不可避免,那么應(yīng)當(dāng)試圖簡化它,如縮小排序的列的范圍等。
4 結(jié)束語
數(shù)據(jù)庫應(yīng)用的性能調(diào)整是一個(gè)不斷摸索、總結(jié)的過程,涉及的方面很多。優(yōu)化數(shù)據(jù)庫整體的應(yīng)用性能是提高計(jì)算機(jī)系統(tǒng)處理速度的一種行之有效的辦法,本文從索引優(yōu)化,sql語句以及oracle10g的新特性的優(yōu)化等方面的優(yōu)化進(jìn)行討論,結(jié)果表明優(yōu)化后的數(shù)據(jù)庫性能有所提高,但在實(shí)際應(yīng)用中要根據(jù)系統(tǒng)的實(shí)際情況具體分析,對(duì)優(yōu)化的方法反復(fù)實(shí)驗(yàn),最后再確定最終的優(yōu)化方法,這樣才能達(dá)到較好的優(yōu)化效果。實(shí)現(xiàn)快速、高效的數(shù)據(jù)查詢和應(yīng)用分析,同時(shí)也使硬件資源得到最充分的發(fā)揮。在實(shí)踐中必須分析影響性能的各方面因素,針對(duì)不同的具體情況選擇合理的優(yōu)化措施;同時(shí)還需要不斷了解oracle提供的新技術(shù)并加以合理利用,從而更好地進(jìn)行數(shù)據(jù)庫的調(diào)優(yōu)。
參考文獻(xiàn):
[l](美)bulusu lakshman.oracle 9i pl/sql開發(fā)人員指南.清華大學(xué)出版社.2004.
[2](美)kevin loney marlene theriault.oraele9idba手冊(cè).機(jī)械工業(yè)出版社.2002.
[3]oracle91.6管理員指南.北京希望電子出版社.2003年1月.
篇6
關(guān)鍵詞:Oracle數(shù)據(jù)庫;數(shù)據(jù)庫配置優(yōu)化;SQL 語句優(yōu)化
中圖分類號(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ù)庫是現(xiàn)在使用最廣泛的大型數(shù)據(jù)庫之一,選用Oracle 作為數(shù)據(jù)庫的應(yīng)用系統(tǒng)一般規(guī)模比較大, 需要處理的用戶數(shù)目較多,對(duì)于這樣的數(shù)據(jù)庫系統(tǒng)來說,效率是最重要的指標(biāo)之一,在實(shí)際應(yīng)用中,隨著系統(tǒng)數(shù)據(jù)庫中數(shù)據(jù)的增加,訪問量的加大,數(shù)據(jù)庫系統(tǒng)性能將會(huì)下降,數(shù)據(jù)庫的優(yōu)化逐漸突顯出其重要作用。
1 影響Oracle 數(shù)據(jù)庫系統(tǒng)性能的因素
Oracle 數(shù)據(jù)庫系統(tǒng)性能受到數(shù)據(jù)庫運(yùn)行的諸多方面的影響與制約,包括數(shù)據(jù)庫服務(wù)器性能、數(shù)據(jù)庫配置、網(wǎng)絡(luò)I/O、應(yīng)用程序性能等。
1) 數(shù)據(jù)庫服務(wù)器性能
數(shù)據(jù)庫服務(wù)器是整個(gè)系統(tǒng)的核心,它的性能直接影響到整個(gè)系統(tǒng)的性能。數(shù)據(jù)庫服務(wù)器的性能主要取決于服務(wù)器上運(yùn)行的操作系統(tǒng)以及服務(wù)器的硬件配置。
2) 數(shù)據(jù)庫配置
數(shù)據(jù)庫的配置情況直接決定了數(shù)據(jù)庫的性能優(yōu)劣,是數(shù)據(jù)庫性能優(yōu)化的核心。[1]主要包括內(nèi)存區(qū)的設(shè)置、I/O 設(shè)置、參數(shù)設(shè)置、CPU 調(diào)整、回滾段設(shè)置以及碎片整理等。數(shù)據(jù)庫配置及其調(diào)整貫穿于數(shù)據(jù)庫設(shè)計(jì)、創(chuàng)建、運(yùn)行的各個(gè)階段。
3) 網(wǎng)絡(luò)I/O
應(yīng)用程序與數(shù)據(jù)庫服務(wù)器之間的交互需要通過網(wǎng)絡(luò)來進(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ù)庫性能也有很大的影響,特別是SQL 語句的應(yīng)用、數(shù)據(jù)庫連接方式的選擇、數(shù)據(jù)庫端程序設(shè)計(jì)以及數(shù)據(jù)庫對(duì)象的使用情況等,都影響系統(tǒng)的執(zhí)行效率。
2 Oracle10g數(shù)據(jù)庫系統(tǒng)性能優(yōu)化與調(diào)整策略
Oracle 數(shù)據(jù)庫的性能優(yōu)化,可以從數(shù)據(jù)庫的體系結(jié)構(gòu)、軟件結(jié)構(gòu)、模式對(duì)象以及具體的業(yè)務(wù)和技術(shù)實(shí)現(xiàn)出發(fā),進(jìn)行統(tǒng)籌考慮。優(yōu)化是有目的地更改系統(tǒng)的一個(gè)或多個(gè)組件,使其滿足一個(gè)或多個(gè)目標(biāo)的過程。下面從幾個(gè)不同方面介紹Oracle 數(shù)據(jù)庫優(yōu)化設(shè)計(jì)方案。
2.1 內(nèi)存區(qū)調(diào)整與優(yōu)化
Oracle 數(shù)據(jù)庫實(shí)例的內(nèi)存結(jié)構(gòu)主要由SGA 和PGA 構(gòu)成,其中SGA 主要包括數(shù)據(jù)緩沖區(qū)、共享池、日志緩沖區(qū),它們的分配是否合理直接決定了數(shù)據(jù)庫性能。
1) 數(shù)據(jù)緩沖區(qū)調(diào)整與優(yōu)化。數(shù)據(jù)緩沖區(qū)用于存儲(chǔ)從數(shù)據(jù)庫中檢索的數(shù)據(jù)。如果用戶請(qǐng)求的數(shù)據(jù)在數(shù)據(jù)緩沖區(qū)中,則數(shù)據(jù)從數(shù)據(jù)緩沖區(qū)中直接返回給用戶,查詢時(shí)間短。如果用戶請(qǐng)求的數(shù)據(jù)不在數(shù)據(jù)緩沖區(qū)中,則先由服務(wù)器進(jìn)程將數(shù)據(jù)從數(shù)據(jù)文件讀取到數(shù)據(jù)緩沖區(qū),然后再從數(shù)據(jù)緩沖區(qū)中將數(shù)據(jù)返回給用戶,查詢時(shí)間延長。因此,保證盡量多的用戶請(qǐng)求數(shù)據(jù)在緩沖區(qū)中,避免讀取數(shù)據(jù)文件,可以大大提高數(shù)據(jù)的操作性能。[2]
2) 共享池調(diào)整與優(yōu)化。設(shè)置共享池的目的為了緩存已經(jīng)被解析過的SQL,而使其能被重用,不再解析。[3]通過確保大多數(shù)語句能夠在共享池中查找到它們自己的一個(gè)已分析版本,就可以提高語句分析和執(zhí)行的效率,降低資源消耗。共享池中存放的信息是應(yīng)用程序需要經(jīng)常訪問的,因此需要保持這些信息的高命中率。共享池大小是否合適,主要體現(xiàn)在庫緩沖區(qū)和數(shù)據(jù)字典高速緩沖區(qū)的命中率上。
3) 日志緩沖區(qū)調(diào)整與優(yōu)化。日志緩沖區(qū)用于存放數(shù)據(jù)的修改信息。日志首先寫入日志緩沖區(qū),在一定條件下由L GWR 進(jìn)程將日志緩沖區(qū)的信息寫入日志文件。如果日志緩沖區(qū)已滿,但還沒有寫入日志文件,則日志寫入處于等待狀態(tài),即日志緩沖區(qū)寫入失敗。過多的日志寫入失敗,說明日志緩沖區(qū)偏小,影響數(shù)據(jù)庫性能。
4) PGA 區(qū)調(diào)整與優(yōu)化。PGA 區(qū)主要由私有會(huì)話區(qū)以及排序區(qū)構(gòu)成。其中,排序區(qū)設(shè)置是否合理對(duì)數(shù)據(jù)庫性能有一定的影響。在Oracle 數(shù)據(jù)庫中,排序可以在PGA 的排序區(qū)或臨時(shí)表空間的臨時(shí)段中進(jìn)行,由于使用臨時(shí)段時(shí)需要對(duì)磁盤進(jìn)行I/O 操作,降低的排序的效率,因此Oracle 建議盡量在排序區(qū)中進(jìn)行排序操作。
2.2 磁盤I/O 調(diào)整
對(duì)于數(shù)據(jù)庫系統(tǒng)來說,磁盤I/O 操作是數(shù)據(jù)庫性能最重要的方面,影響磁盤I/O性能的主要原因有磁盤競(jìng)爭(zhēng)、I/O次數(shù)過多和數(shù)據(jù)塊空間的分配管理。減少磁盤I/O操作的最根本的方法就是利用高速緩存存放頻繁使用的數(shù)據(jù)信息,最小化磁盤I/O,降低Oracle 服務(wù)器查找和返回行所花費(fèi)時(shí)間的最有效的方法之一就是利用索引、分區(qū)。
1) 索引Index 的優(yōu)化設(shè)計(jì)。索引是數(shù)據(jù)庫中重要的數(shù)據(jù)結(jié)構(gòu),是優(yōu)化的基礎(chǔ),索引把表中的邏輯值映射到RowID,因此索引能進(jìn)行快速定位數(shù)據(jù)的物理地址。索引必須充分利用才能加快數(shù)據(jù)庫訪問速度, 建立索引根本目的是提高查詢效率,利用索引行記錄定位,減少磁盤的讀寫次數(shù),從而達(dá)到提高查詢速度的目的。一個(gè)建有合理索引的數(shù)據(jù)庫應(yīng)用系統(tǒng)可能比一個(gè)沒有建立索引的數(shù)據(jù)庫應(yīng)用系統(tǒng)效率高幾十倍,但并不是索引越多越好,在那些經(jīng)常需要修改的數(shù)據(jù)列上建立索引,將導(dǎo)致系統(tǒng)性能的下降和存儲(chǔ)空間的浪費(fèi)。
2) 使用Oracle 分區(qū)技術(shù)。分區(qū)將數(shù)據(jù)在物理上分隔開,不同分區(qū)的數(shù)據(jù)可以制定保存在處于不同磁盤上的數(shù)據(jù)文件里。這樣,當(dāng)對(duì)這個(gè)表進(jìn)行查詢時(shí),只需要在表分區(qū)中進(jìn)行掃描,而不必進(jìn)行FTS(Full Table Scan,全表掃描),明顯縮短了查詢時(shí)間,另外處于不同磁盤的分區(qū)也將對(duì)這個(gè)表的數(shù)據(jù)傳輸分散在不同的磁盤I/O,一個(gè)精心設(shè)置的分區(qū)可以將數(shù)據(jù)傳輸對(duì)磁盤I/O競(jìng)爭(zhēng)均勻地分散開。
2.3 回滾段設(shè)置
回滾段用于保存回退條目,將被修改的數(shù)據(jù)的初始版本保存在回退條目中,利用該信息,用戶可以撤銷未提交的事務(wù),Oracle 可以維護(hù)數(shù)據(jù)庫的一致性,并從實(shí)例崩潰中恢復(fù)。因此,回滾段在數(shù)據(jù)庫事務(wù)處理中起著關(guān)鍵的作用,其設(shè)置是否合理直接影響到系統(tǒng)的性能。
在Oracle 10g 中,可以使用撤銷表空間自動(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ù)庫中數(shù)據(jù)庫對(duì)象不斷變化以及數(shù)據(jù)操作不斷進(jìn)行,導(dǎo)致磁盤碎片的產(chǎn)生。數(shù)據(jù)庫中碎片可分為表空間級(jí)、表級(jí)、索引級(jí)三類。
1) 表空間級(jí)碎片是由于段的建立、擴(kuò)展和刪除引起的??梢酝ㄟ^重組表空間、執(zhí)行AL TER TA2BL ESPACE . . . COAL ESCES 命令或先通過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ù)而形成的??梢酝ㄟ^設(shè)置合適大小的數(shù)據(jù)塊以及PCTFREE、PCTUSED 參數(shù)以盡量避免表碎片的產(chǎn)生。通常在創(chuàng)建數(shù)據(jù)庫時(shí),根據(jù)應(yīng)用中記錄的大小來設(shè)置標(biāo)準(zhǔn)數(shù)據(jù)塊大小,保證其可以存儲(chǔ)一條完整的記錄。
3) 索引級(jí)碎片是由于索引太多、索引值變化頻繁而導(dǎo)致B - TREE 結(jié)構(gòu)失衡、葉節(jié)點(diǎn)排序混亂引起的。可以通過減少表上索引數(shù)量,以及在數(shù)據(jù)變化頻率較低的列上創(chuàng)建索引或先進(jìn)行數(shù)據(jù)的插入操作,然后再為表創(chuàng)建索引等方法,減少索引表的變化,降低索引碎片的產(chǎn)生。
2.5 CPU 性能調(diào)整
服務(wù)器的CPU 使用情況對(duì)數(shù)據(jù)庫的性能影響很大,調(diào)整CPU 可以更有效地利用服務(wù)器的各種資源, 提高數(shù)據(jù)庫的運(yùn)行速度和效率。
1) 盡量利用多個(gè)CPU 處理器來執(zhí)行事務(wù)處理和查詢CPU 的快速發(fā)展使得Oracle 越來越重視對(duì)多CPU 的并行技術(shù)的應(yīng)用,只要可能,應(yīng)該將數(shù)據(jù)庫服務(wù)器和應(yīng)用程序的CPU 請(qǐng)求分開,或?qū)PU 請(qǐng)求從一個(gè)服務(wù)器移到另一個(gè)服務(wù)器。
2) 使用PQO 方式進(jìn)行數(shù)據(jù)查詢PQO 方式不僅可以在多個(gè)CPU 間分配SQL 語句的請(qǐng)求處理,當(dāng)所查詢的數(shù)據(jù)處于不同的磁盤時(shí),一個(gè)個(gè)獨(dú)立的進(jìn)程可以同時(shí)進(jìn)行數(shù)據(jù)讀取。
2.6 SQL 語句優(yōu)化
對(duì)數(shù)據(jù)庫進(jìn)行的各種操作(包括添加、刪除、查詢等等)最終都是通過數(shù)據(jù)庫的SQL 語句來執(zhí)行,因此SQL 語句的執(zhí)行效率最終決定了Oracle 數(shù)據(jù)庫的性能高低, SQL 語句的書寫,通常應(yīng)該遵循以下原則:
1) 盡量避免對(duì)全表掃描。
2) 對(duì)經(jīng)常查詢的表創(chuàng)建合理索引, 對(duì)大表的查詢應(yīng)在索引上進(jìn)行。
3) 在字符串查詢中盡可能少用通配符。
4) 如果多個(gè)表經(jīng)常被查詢,盡可能使其放在同一數(shù)據(jù)塊中。
5) 盡量使用(not)exists 的操作替代(not)in 這樣的操作。
6) 連接查詢時(shí), 要有充分的連接條件。
3 結(jié)束語
Oracle10g數(shù)據(jù)庫系統(tǒng)性能優(yōu)化與調(diào)整是一個(gè)復(fù)雜、繁瑣的系統(tǒng)工程,貫穿于數(shù)據(jù)庫系統(tǒng)開發(fā)的整個(gè)過程。數(shù)據(jù)庫系統(tǒng)的優(yōu)化和調(diào)整,包括內(nèi)存結(jié)構(gòu)調(diào)整、磁盤I/O 調(diào)整、磁盤碎片調(diào)整以及CPU 性能調(diào)整等,直接決定了整個(gè)數(shù)據(jù)庫系統(tǒng)的性能,應(yīng)該充分利用各種性能優(yōu)化與調(diào)整策略進(jìn)行反復(fù)的調(diào)整,以獲得系統(tǒng)的最優(yōu)性能。
參考文獻(xiàn):
[1] 藤永昌.Oracle數(shù)據(jù)庫管理員大全[M].北京:清華大學(xué)出版社,2004.
[2] 布萊拉,馬樹其.Oracle 10G 新特性學(xué)習(xí)指南[M].北京:電子工業(yè)出版社,2005.
[3] 王海亮.精通Oracle 10G系統(tǒng)管理[M].北京:中國水利水電出版社,2005.
篇7
【關(guān)鍵詞】性能優(yōu)化;性能調(diào)整;Oracle數(shù)據(jù)庫
0 前言
計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域應(yīng)用較為普遍的信息管理工具就是數(shù)據(jù)庫系統(tǒng),而Oracle數(shù)據(jù)庫是應(yīng)用最為廣泛的信息數(shù)據(jù)管理系統(tǒng),為計(jì)算機(jī)用戶帶來了極大的便利,為了達(dá)到數(shù)據(jù)庫系統(tǒng)能夠有效管理數(shù)據(jù)信息的目標(biāo),需要不斷調(diào)整優(yōu)化Oracle數(shù)據(jù)庫性能,為其安全穩(wěn)定運(yùn)行提高保障,保證Oracle數(shù)據(jù)庫的持久發(fā)展。
1 Oracle數(shù)據(jù)庫簡介
1.1 Oracle數(shù)據(jù)庫概述
Oracle數(shù)據(jù)庫功能相當(dāng)強(qiáng)大,起源較早,最開始出現(xiàn)的形式是關(guān)系型數(shù)據(jù)庫技術(shù),可以實(shí)現(xiàn)對(duì)數(shù)據(jù)之間的關(guān)系的了解,并通過信息庫的構(gòu)造將這些關(guān)系真實(shí)的反映出來。1984年Oracle數(shù)據(jù)庫實(shí)現(xiàn)了桌面計(jì)算機(jī)與關(guān)系數(shù)據(jù)庫的有效結(jié)合,隨著Oracle數(shù)據(jù)庫的不斷發(fā)展,其各項(xiàng)功能也不斷健全,并提供給企業(yè)類的、網(wǎng)絡(luò)工作組、高可靠性的、產(chǎn)業(yè)化的應(yīng)用可靠的技術(shù)支撐,實(shí)現(xiàn)對(duì)關(guān)系數(shù)據(jù)的高效處理[1]。
1.2 Oracle數(shù)據(jù)庫主要特點(diǎn)
Oracle數(shù)據(jù)庫的主要特點(diǎn)有支持多用戶和大數(shù)據(jù)的高性能事務(wù)處理、硬件環(huán)境獨(dú)立、對(duì)完整性和安全性的良好控制,同時(shí)Oracle數(shù)據(jù)庫還遵守網(wǎng)絡(luò)通信協(xié)議、數(shù)據(jù)存取語言等相關(guān)的工業(yè)標(biāo)準(zhǔn)。另外Oracle數(shù)據(jù)庫支持分布式數(shù)據(jù)庫和分布處理,擁有可連接性、可兼容性、可移植性的特征。實(shí)現(xiàn)不同型號(hào)的計(jì)算機(jī)和不同操作系統(tǒng)下可以運(yùn)行Oracle數(shù)據(jù)庫的需求,其自身獨(dú)有的特點(diǎn)滿足了不同用戶的不同要求,符合時(shí)展潮流。
2 Oracle數(shù)據(jù)庫性能調(diào)整
2.1 調(diào)整Oracle數(shù)據(jù)庫內(nèi)存參數(shù)
Oracle數(shù)據(jù)庫內(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)整的過程中要考慮數(shù)據(jù)庫的運(yùn)行模式、操作系統(tǒng)的內(nèi)存容量、系統(tǒng)的類型是裸設(shè)備還是文件系統(tǒng)、物理內(nèi)存的大小。系統(tǒng)全局區(qū)大約占數(shù)據(jù)庫物理內(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ù)庫內(nèi)存空間的大小,即寫入到重做日志文件中的通過緩沖區(qū)寫入的重做日志;SHARED_POOL_SIZE對(duì)數(shù)據(jù)庫共享內(nèi)存池其直接決定作用;DB_CACHE_SIZE對(duì)默認(rèn)緩沖池的大小產(chǎn)生決定效用;DB_BLOCK_SIZE對(duì)創(chuàng)建數(shù)據(jù)庫每個(gè)模塊的尺寸產(chǎn)生直接影響。對(duì)這些參數(shù)進(jìn)行調(diào)整有利于實(shí)現(xiàn)Oracle數(shù)據(jù)庫的內(nèi)部優(yōu)化,為Oracle數(shù)據(jù)庫的穩(wěn)定運(yùn)行提供可靠的后臺(tái)保障[2]。
2.2 調(diào)整Oracle數(shù)據(jù)庫操作系統(tǒng)資源
運(yùn)行服務(wù)器的操作系統(tǒng)對(duì)Oracle數(shù)據(jù)庫服務(wù)器產(chǎn)生直接影響,操作系統(tǒng)的性能若是出現(xiàn)故障,則無法進(jìn)行Oracle數(shù)據(jù)庫性能的有效調(diào)整。首先,需要對(duì)操作系統(tǒng)的換頁空間進(jìn)行適當(dāng)?shù)恼{(diào)整,優(yōu)化配置其內(nèi)存分配,通過數(shù)據(jù)庫的實(shí)際運(yùn)行情況的調(diào)查,相關(guān)的管理人員可以調(diào)整內(nèi)在資源,同時(shí)對(duì)操作系統(tǒng)的換頁空間也要做出相應(yīng)的調(diào)整。在換頁空間的大小檢查過程中,當(dāng)換頁空間的物理內(nèi)存大于2G時(shí),就需要對(duì)其進(jìn)行適當(dāng)?shù)恼{(diào)整,如果物理內(nèi)存小于2G,則需要將換頁空間的大小設(shè)定為物理內(nèi)存的1.5倍。另外在創(chuàng)建換頁空間的時(shí)候,應(yīng)盡量將換頁空間設(shè)置在不同的硬盤中,提高換頁空間的性能,通過smitty mpks增加換頁空間或者是利用smitty chps對(duì)原有的換頁空間的大小進(jìn)行修改,以此來調(diào)整其性能。其次,對(duì)數(shù)據(jù)庫的硬盤I/O進(jìn)行調(diào)整,在I/O的設(shè)計(jì)階段管理員就應(yīng)當(dāng)優(yōu)化調(diào)整其操作方式,管理員想要實(shí)現(xiàn)的系統(tǒng)類型與與I/O設(shè)計(jì)聯(lián)系密切,不同的數(shù)據(jù)庫系統(tǒng)需要不同的I/O設(shè)計(jì)方案和不同類型的I/O模式。當(dāng)創(chuàng)建系統(tǒng)之后就需要對(duì)系統(tǒng)的內(nèi)存進(jìn)行調(diào)整,將磁盤I/O調(diào)移,以此保證磁盤I/O調(diào)整工作順利進(jìn)行,簡化調(diào)整程序,不必考慮緩沖區(qū)命中率過低的問題。對(duì)于數(shù)據(jù)庫的性能來說磁盤I/O操作發(fā)揮了極大的作用。影響磁盤I/O性能的因素有I/O次數(shù)過多和磁盤競(jìng)爭(zhēng)等,對(duì)其調(diào)整時(shí)可以將組成同表的數(shù)據(jù)分置在不同的磁盤中,使硬盤之間的I/O負(fù)載達(dá)到均衡。最后是對(duì)數(shù)據(jù)庫的核心參數(shù)配置進(jìn)行調(diào)整,通常情況下設(shè)置系統(tǒng)核心參數(shù)時(shí)都會(huì)設(shè)置較低的參數(shù)值,需要在運(yùn)行的過程中不斷進(jìn)行調(diào)整,在運(yùn)行Oracle數(shù)據(jù)庫過程中將Default128增加到500,調(diào)整maxuproc來發(fā)揮效用,保證Oracle數(shù)據(jù)庫的穩(wěn)定運(yùn)行。
3 Oracle數(shù)據(jù)庫性能優(yōu)化
3.1 優(yōu)化Oracle數(shù)據(jù)庫索引
由于索引在用戶使用數(shù)據(jù)庫的過程中為用戶檢索提供了便利,所以O(shè)racle要優(yōu)化數(shù)據(jù)庫中的索引,索引出現(xiàn)問題直接影響Oracle數(shù)據(jù)庫的利用效率,為用戶的數(shù)據(jù)庫使用和查詢帶來不便。對(duì)Oracle數(shù)據(jù)庫索引進(jìn)行優(yōu)化主要有兩種方式,第一種是手動(dòng)優(yōu)化,在Oracle數(shù)據(jù)庫中通過手動(dòng)方法對(duì)其索引進(jìn)行優(yōu)化主要依靠Oracle數(shù)據(jù)庫的圖形性能工具Oracle Enterprise Manager Console,在相應(yīng)的Oracle數(shù)據(jù)庫中,通過用戶的登陸權(quán)限登陸到指定的索引界面,找出SYAPP數(shù)據(jù)庫中的位于索引區(qū)里的XTWHZDBMB_X功能菜單,點(diǎn)擊鼠標(biāo)右鍵選擇功能菜單中的“移去”選項(xiàng),將不正確的索引選中并刪除,或者將不符合數(shù)據(jù)庫實(shí)際信息內(nèi)容的索引進(jìn)行修改,及時(shí)更新數(shù)據(jù)庫的索引列表。第二種索引優(yōu)化的方法是命令行方法,根據(jù)Oracle數(shù)據(jù)庫提供的相關(guān)SQL環(huán)境,利用特有的命令語句,在索引命令設(shè)置時(shí)輸入DROP INDEX XTWHZDBMB_X命令語句,利用該命令執(zhí)行刪除不必要索引的的指令,或者輸入其他的命令將索引進(jìn)行索引替換、更新命令執(zhí)行語句,對(duì)Oracle數(shù)據(jù)庫的索引進(jìn)行優(yōu)化。通過這兩種方式實(shí)現(xiàn)Oracle數(shù)據(jù)庫索引的優(yōu)化,從而保證Oracle數(shù)據(jù)庫的安全運(yùn)行,為用戶數(shù)據(jù)利用和檢索查詢帶來便利。
3.2 優(yōu)化Oracle數(shù)據(jù)庫內(nèi)存
對(duì)Oracle數(shù)據(jù)庫的內(nèi)存進(jìn)行優(yōu)化主要是在SGA調(diào)整的基礎(chǔ)上進(jìn)行優(yōu)化,在使用Oracle數(shù)據(jù)庫過程中不斷檢查,首先,對(duì)共享池優(yōu)化,對(duì)其優(yōu)化的原因是它能夠高速緩存PL/SQL、SQL語句,通過最少算法進(jìn)行管理的功能程序,當(dāng)共享池內(nèi)的SQL語句超出額定值之后,該算法則除掉不常使用或很少訪問的語句,為新的SQL語句提供更多的空間。使用共享池的這項(xiàng)功能可以實(shí)現(xiàn)Oracle數(shù)據(jù)庫將用戶常用和流行的PL/SQL、SQL語句保存在數(shù)據(jù)庫中,逐步將不常用的語句更新?lián)Q代,優(yōu)化Oracle數(shù)據(jù)庫的內(nèi)存,得到最新的信息,以此來適應(yīng)用戶對(duì)數(shù)據(jù)庫不同的需求。其次,是對(duì)緩沖區(qū)高速緩沖存儲(chǔ)器進(jìn)行優(yōu)化工作,實(shí)現(xiàn)用戶對(duì)自己的PL/SQL和SQL語句緩存版本的檢索,還可以查找到請(qǐng)求的相關(guān)數(shù)據(jù)。充分發(fā)揮緩沖區(qū)高速緩沖存儲(chǔ)器的作用。用戶在使用的過程中常用LRU列表進(jìn)行管理,用戶對(duì)應(yīng)用程序的訪問模塊大多存放在最近使用端,通過全表掃描對(duì)對(duì)常訪問的表進(jìn)行優(yōu)化檢查,當(dāng)發(fā)現(xiàn)常用表較小的時(shí)候,就有很能全表掃描對(duì)該表進(jìn)行訪問。但當(dāng)全表掃描在LRU列表的最少使用端放置該表的緩沖區(qū),這些該緩沖區(qū)就容易被移走,只有程序用戶重新利用的時(shí)候,才會(huì)在內(nèi)存中看到,解決這一問題,采取的優(yōu)化方式就是在全表掃描的過程中,將緩沖區(qū)存儲(chǔ)在LUR列表的最多使用端,利用這種方式可以將內(nèi)存中的緩沖區(qū)留存的時(shí)間更久,便于用戶對(duì)其進(jìn)行有效訪問。提高Oracle數(shù)據(jù)庫的利用效率。
3.3 優(yōu)化Oracle數(shù)據(jù)庫分區(qū)
Oracle數(shù)據(jù)庫引用分區(qū)技術(shù)有效的解決了大索引、大表的可用性和相關(guān)性能的問題,通過對(duì)其拆分,在對(duì)操作資源的請(qǐng)求上進(jìn)行限制,分區(qū)變小就會(huì)加快系統(tǒng)的訪問速度,提高系統(tǒng)效率。Oracle數(shù)據(jù)庫的分區(qū)技術(shù)還可以有效的解決信息資源管理數(shù)據(jù)庫的其他檢索和相關(guān)表的使用問題,對(duì)Oracle數(shù)據(jù)庫分區(qū)進(jìn)行優(yōu)化同時(shí)可以實(shí)現(xiàn)對(duì)其他性能的優(yōu)化。Oracle數(shù)據(jù)庫雖然擁有分區(qū)技術(shù),但在實(shí)際應(yīng)用中仍存在缺陷,Oracle數(shù)據(jù)庫中已有的普通表無法實(shí)現(xiàn)直接修改屬性轉(zhuǎn)換為分區(qū)表,只有通過重建的方法才能進(jìn)行轉(zhuǎn)換,但是信息資源數(shù)據(jù)管理系統(tǒng)適用的時(shí)間較長,一旦投入使用其各項(xiàng)性能設(shè)計(jì)都已經(jīng)定型,很難通過重建對(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ù)庫分區(qū)的優(yōu)化。在線定義功能是指在保證數(shù)據(jù)的一致性的基礎(chǔ)上對(duì)操作表進(jìn)行命令指示,進(jìn)行DML操作,切換完成后可以不進(jìn)行其他額外管理程序。交換分區(qū)是修改表的定義,對(duì)數(shù)據(jù)不進(jìn)行任何操作行為,從而提高數(shù)據(jù)庫優(yōu)化的效率,準(zhǔn)確的檢查表中的數(shù)據(jù)的完整性。在對(duì)其分區(qū)轉(zhuǎn)化之后,就可以實(shí)現(xiàn)對(duì)Oracle數(shù)據(jù)庫的優(yōu)化,從而提高Oracle數(shù)據(jù)庫工作效率。
4 結(jié)論
綜上所述,通過對(duì)Oracle數(shù)據(jù)庫性能調(diào)整與優(yōu)化的分析研究,可以看出Oracle數(shù)據(jù)庫性能的調(diào)整和優(yōu)化意義重大,完善Oracle數(shù)據(jù)庫各項(xiàng)功能有助于實(shí)現(xiàn)Oracle數(shù)據(jù)庫的穩(wěn)定運(yùn)行,在使用過程中不斷的進(jìn)行優(yōu)化檢查,及時(shí)對(duì)性能進(jìn)行優(yōu)化,實(shí)現(xiàn)Oracle數(shù)據(jù)庫的持久發(fā)展,推動(dòng)數(shù)據(jù)庫技術(shù)的發(fā)展,為人們提供利用和服務(wù)。
【參考文獻(xiàn)】
篇8
【關(guān)鍵詞】MES;數(shù)據(jù)庫;中間件;優(yōu)化
1.問題的提出
包鋼寬厚板MES于2007年年底與生產(chǎn)同步上線,系統(tǒng)的投入運(yùn)行在生產(chǎn)質(zhì)量控制方面起著舉足輕重的作用,但隨著系統(tǒng)的的使用,新需求的提出和改進(jìn)再所難免,上下互聯(lián)的系統(tǒng)間的交互業(yè)務(wù)非常頻繁,用戶多,訪問量非常大。作為業(yè)務(wù)支撐的軟件系統(tǒng)也處于不斷的改進(jìn)和變化之中。該系統(tǒng)數(shù)據(jù)庫經(jīng)過一段時(shí)間的運(yùn)行以后,隨著數(shù)據(jù)庫表規(guī)模的不斷擴(kuò)大,數(shù)據(jù)量的不斷積累和增加,應(yīng)用程序訪問的改進(jìn)和變化,其性能隨著使用時(shí)間的延長而逐步呈現(xiàn)下降的趨勢(shì),所以對(duì)該系統(tǒng)數(shù)據(jù)庫的性能優(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ù)庫服務(wù)器,另一臺(tái)作為應(yīng)用服務(wù)器。每臺(tái)服務(wù)器配置4路1.65GHz CPU,內(nèi)存為8GB,內(nèi)置2塊73GB硬盤。兩臺(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ù)器之間用專用快速通道互連構(gòu)成Cluster集群系統(tǒng)的高速心跳線,并共享一套磁盤陣列,以保證應(yīng)用系統(tǒng)的高可用性。數(shù)據(jù)庫采用ORACLE公司的10g企業(yè)版數(shù)據(jù)庫,極大地提高了系統(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開發(fā),實(shí)現(xiàn)用戶UI畫面,操作簡便易行,前臺(tái)把用戶的請(qǐng)求轉(zhuǎn)化為與TUXEDO中間件的數(shù)據(jù)交互。中間件TUXEDO,它具有高可靠性,負(fù)載平衡等優(yōu)點(diǎn),它屏蔽了底層操作系統(tǒng)的復(fù)雜性,使程序開發(fā)人員變得簡單統(tǒng)一,大大減少程序設(shè)計(jì)的復(fù)雜性??蛻艉头?wù)器之間、服務(wù)器和服務(wù)器之間的通訊,異構(gòu)平臺(tái)之間的數(shù)據(jù)變換,以及服務(wù)器和數(shù)據(jù)庫之間的集成和事務(wù)控制都由TUXEDO來完成。數(shù)據(jù)庫后臺(tái)開發(fā)采用PROC C,采用固定模板針對(duì)業(yè)務(wù)邏輯進(jìn)行數(shù)據(jù)的轉(zhuǎn)換和處理,把獲取的數(shù)據(jù)傳遞給TUXEDO,來實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯功能。
3.服務(wù)器優(yōu)化
寬厚板MES系統(tǒng)初期使用了兩臺(tái)服務(wù)器,由于資金限制只購買了兩臺(tái)服務(wù)器,一臺(tái)運(yùn)行數(shù)據(jù)庫和應(yīng)用,另外一臺(tái)作為測(cè)試和開發(fā)平臺(tái)使用。自2007年上線后,隨著生產(chǎn)的穩(wěn)定運(yùn)行,信息數(shù)據(jù)量逐步增加,服務(wù)器的負(fù)荷也越來越大,在使用高峰時(shí)CPU使用率為55~78%左右,明顯感覺到應(yīng)用的遲滯不流暢,鑒于這種情況,我們?cè)?010年申請(qǐng)又購置了兩臺(tái)服務(wù)器,把應(yīng)用和數(shù)據(jù)庫徹底分離,新購服務(wù)器一臺(tái)替換原先的測(cè)試開發(fā)平臺(tái),另一臺(tái)則作為系統(tǒng)數(shù)據(jù)庫備份。分開后的的數(shù)據(jù)庫服務(wù)器和應(yīng)用服務(wù)器,其CPU在使用率上沒有超過50%,系統(tǒng)運(yùn)行效率明顯得到提高。
4.TUXEDO優(yōu)化
寬厚板MES系統(tǒng)在運(yùn)行某些占用時(shí)間較長的應(yīng)用時(shí),多個(gè)人同時(shí)操作,會(huì)出現(xiàn)長時(shí)間的等待后,前臺(tái)畫面會(huì)報(bào)一個(gè)“后臺(tái)程序調(diào)用失敗”的錯(cuò)誤,經(jīng)過我們分析,原來在中間件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)程,假如原來某個(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ù)庫結(jié)構(gòu)固定不變的情況下,前臺(tái)程序操作數(shù)據(jù)庫的優(yōu)化核心目標(biāo)是減少數(shù)據(jù)的返回量,主要措施是限制查詢條件來減少返回的數(shù)據(jù)量。由于系統(tǒng)代碼由多人完成,每個(gè)人的水平和編程習(xí)慣不同,造成我們后期使用中發(fā)現(xiàn)大量性能上的問題,對(duì)此我們做了大量修正。
比如:沒有采取后臺(tái)分頁技術(shù),直接在返回全部數(shù)據(jù)后再在前臺(tái)上做分頁,這樣導(dǎo)致數(shù)據(jù)庫和網(wǎng)絡(luò)負(fù)荷的增加,效率低下,操作時(shí)間一般在幾十秒以上,通過修改后操作時(shí)間基本是原時(shí)間的十分之一左右。還有就是經(jīng)常使用的一些數(shù)據(jù)字典小表,每次操作都要從后臺(tái)再獲取一遍,效率較低,改動(dòng)的辦法是當(dāng)進(jìn)入該UI畫面時(shí)只獲取一次,這樣也減少了系統(tǒng)負(fù)荷。另外針對(duì)一些多個(gè)數(shù)據(jù)表關(guān)聯(lián),大數(shù)據(jù)量操作的應(yīng)用,做了業(yè)務(wù)拆分,分畫面分步驟實(shí)現(xiàn)。
總之,前臺(tái)優(yōu)化總體把握就是減少數(shù)據(jù)量的操作和訪問的原則,在這個(gè)前提下的優(yōu)化工作基本上難度不大,且效果顯著。
6.數(shù)據(jù)庫SQL優(yōu)化
系統(tǒng)后臺(tái)程序的優(yōu)化工作主要是SQL語句的優(yōu)化,從獲取的大量資料來看,SQL語句的優(yōu)化是數(shù)據(jù)庫最有成效的一個(gè)手段,因此SQL語句的影響非常大,系統(tǒng)往往因?yàn)橐粋€(gè)小的SQL語句不夠優(yōu)化,導(dǎo)致數(shù)據(jù)庫性能急劇下降,應(yīng)用服務(wù)器斷連、超時(shí),嚴(yán)重影響業(yè)務(wù)的正常運(yùn)行。寬厚板MES系統(tǒng)中發(fā)生多次性能危機(jī)中,90%都是SQl語句使用不當(dāng)造成。
這里我們借助使用第三方Oracle工具TOAD,進(jìn)行系統(tǒng)問題的查找定位,具體方法如下:
首先通過數(shù)據(jù)庫系統(tǒng)性能的監(jiān)控,定位出現(xiàn)性能危機(jī)時(shí)的準(zhǔn)確時(shí)間。
根據(jù)時(shí)間段通過導(dǎo)出ORACLE的AWR報(bào)告,分析其中I/O、CPU占用較高的SQL語句
通過TOAD中執(zhí)行計(jì)劃具體分析SQL語句的cost,cost的高低決定數(shù)據(jù)庫執(zhí)行的效率,cost越小效率越高。
使用ORACLE中SQL優(yōu)化功能建議,結(jié)合實(shí)際情況,對(duì)后臺(tái)程序進(jìn)行優(yōu)化。
下面列舉一些常用的手段和方法。
6.1 建立必要的索引
必須熟悉數(shù)據(jù)庫應(yīng)用程序中的所有SQL語句,從中分析、歸納出作為Where條件子句的字段及其組合方式;在這一基礎(chǔ)上可以初步判斷出哪些表的哪些字段應(yīng)該建立索引,索引對(duì)SQL語句的性能會(huì)產(chǎn)生舉足輕重的影響。
建立索引常用的規(guī)則如下:
表的主鍵、外鍵必須有索引;
經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該建立索引;
經(jīng)常出現(xiàn)在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引;
索引應(yīng)該建在選擇性高的字段上;
索引應(yīng)該建在小字段上,對(duì)于大的文本字段甚至超長字段,不要建索引;
復(fù)合索引的建立需要進(jìn)行仔細(xì)分析;盡量考慮用單字段索引代替:
頻繁進(jìn)行數(shù)據(jù)操作的表,不要建立太多的索引;
刪除無用的索引,避免對(duì)執(zhí)行計(jì)劃造成負(fù)面影響;
由于許多索引未建,導(dǎo)致全表掃描,尤其當(dāng)數(shù)據(jù)量大時(shí),基本上查詢時(shí)間需要幾分鐘左右都不一定完成,所以,建立合適的索引非常重要。
6.2 提高使用索引的效率
雖然建立了索引,但實(shí)際編程過程中,不同的SQL語句的寫法,會(huì)導(dǎo)致索引無效。
避免對(duì)列的操作,任何對(duì)列的操作都可能導(dǎo)致全表掃描,這里所謂的操作包括數(shù)據(jù)庫函數(shù)、計(jì)算表達(dá)式等等,查詢時(shí)要盡可能將操作移至等式的右邊,甚至去掉函數(shù)。
增加查詢的范圍限制,避免全范圍的搜索。從而提高查詢效率。
盡量去掉“IN”、“OR”,對(duì)含有“N”、“OR”的Where子句常會(huì)使用工作表,使索引失效;如果不產(chǎn)生大量重復(fù)值,可以考慮把子句拆開;拆開的子句中應(yīng)該包含索引。然后再做一個(gè)簡單的加法,與原來的SQL語句相比,查詢速度更快。
分解復(fù)雜查詢,用常量代替變量,對(duì)于復(fù)雜的Where條件組合,Where中含有多個(gè)帶索引的字段,考慮用IF語句分情況進(jìn)行討論;同時(shí),去掉不必要的外來參數(shù)條件,減低復(fù)雜度,以便在不同情況下用不同字段上的索引。
like子句盡量前端匹配,因?yàn)閘ike參數(shù)使用的非常頻繁,因此如果能夠?qū)ike子句使用索引,將很高的提高查詢的效率。在做like查詢時(shí),應(yīng)該盡量使查詢的匹配端是具體值,例如使用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)系既存在一致性,也可能帶來沖突,當(dāng)沖突發(fā)生時(shí),需要根據(jù)實(shí)際情況進(jìn)行選擇,沒有固定的模式。
7.數(shù)據(jù)庫備份系統(tǒng)
寬厚板MES系統(tǒng)運(yùn)行到目前已經(jīng)有6年多了,數(shù)據(jù)隨著時(shí)間不斷增長,部分?jǐn)?shù)據(jù)表的量已達(dá)幾千萬,歷史數(shù)據(jù)的查詢使用由于數(shù)據(jù)量大會(huì)直接影響系統(tǒng)的正常穩(wěn)定運(yùn)行,原系統(tǒng)沒有歷史數(shù)據(jù)導(dǎo)出備份功能,因此,做為優(yōu)化系統(tǒng)性能重要一部分工作內(nèi)容,我們自主開發(fā)了歷史數(shù)據(jù)導(dǎo)出備份系統(tǒng),將其中的歷史數(shù)據(jù),按照合同關(guān)系的邏輯,從訂單開始到發(fā)貨結(jié)束進(jìn)行打包歸檔,減輕在線系統(tǒng)的負(fù)荷,目前備份系統(tǒng)已經(jīng)投入運(yùn)行。
8.結(jié)束語
應(yīng)用系統(tǒng)的性能調(diào)整與優(yōu)化是一個(gè)系統(tǒng)工程,涉及的方面很多,是一個(gè)長期不懈、不斷比較分析和調(diào)整的過程,需要全面系統(tǒng)地規(guī)劃考慮才能對(duì)數(shù)據(jù)庫運(yùn)行狀況做出一個(gè)綜合評(píng)估。只有深入領(lǐng)會(huì)和掌握Oracle數(shù)據(jù)庫系統(tǒng)所提供的強(qiáng)大功能,正確觀察和分析系統(tǒng)運(yùn)行中提供的各種信息,充分結(jié)合實(shí)際應(yīng)用特點(diǎn),才能合理制定出良好的優(yōu)化策略,目前,本系統(tǒng)數(shù)據(jù)庫經(jīng)過長期的研究開發(fā)、推敲測(cè)試和調(diào)整優(yōu)化,數(shù)據(jù)庫性能已有較大的提高,較好的滿足了本系統(tǒng)眾多軟件程序的訪問使用,本系統(tǒng)數(shù)據(jù)庫表現(xiàn)出了較高的穩(wěn)定性和較好的使用性能,從而驗(yàn)證了所述采取的若干優(yōu)化措施是切實(shí)可行有效的。
當(dāng)然存在的問題也不少,有一部分應(yīng)用由于業(yè)務(wù)邏輯復(fù)雜,優(yōu)化有一定的難度,光從SQL語句單一優(yōu)化已經(jīng)提高不了多少效率,將來只能從業(yè)務(wù)邏輯拆分,簡化分步流程來實(shí)現(xiàn)優(yōu)化的目的。
參考文獻(xiàn)
[1]王勇.基于SQL數(shù)據(jù)庫的性能優(yōu)化問題分析[J].電腦知識(shí)與技術(shù),2008,15:1004-1007.
[2]呂華,杜忠軍.數(shù)據(jù)庫性能優(yōu)化[J].計(jì)算機(jī)應(yīng)用,2003, 23(06).
篇9
關(guān)鍵詞:中文期刊,全文數(shù)據(jù)庫,數(shù)據(jù)庫系統(tǒng)
引言在追求快速、方便的網(wǎng)絡(luò)時(shí)代,只提供題錄、文摘數(shù)據(jù)庫已不能滿足讀者的要求,全文數(shù)據(jù)庫的建設(shè)是今后發(fā)展的方向。許多文獻(xiàn)數(shù)據(jù)庫都是通過網(wǎng)絡(luò)和提供檢索的,面對(duì)的是沒有檢索經(jīng)驗(yàn)的用戶和巨大的文獻(xiàn)處理的難題,如何建立一個(gè)有價(jià)值的、用戶滿意的、實(shí)用的全文數(shù)據(jù)庫就成為廣大圖書情報(bào)人員深入研究的課題。
全文數(shù)據(jù)庫除提供一般題錄數(shù)據(jù)庫的題名、分類等檢索途徑外,還提供全文檢索。全文檢索是利用了文獻(xiàn)中的自然語言作為一個(gè)檢索入口,這種自然語言的檢索方式比較符合用戶的易于利用的需求。
中文與西方國家的語言不同,由大量獨(dú)立漢字組成,因此在建設(shè)中文全文數(shù)據(jù)庫時(shí)要注意數(shù)據(jù)庫系統(tǒng)、編碼與開發(fā)工具的選擇。
1 全文數(shù)據(jù)庫系統(tǒng)軟件基本模塊的設(shè)計(jì)構(gòu)想由于全文數(shù)據(jù)庫是非結(jié)構(gòu)化的數(shù)據(jù),因此全文數(shù)據(jù)庫的結(jié)構(gòu)(記錄、字段、子字段等)的劃分及長度的確定,往往隨文獻(xiàn)本身的內(nèi)容特點(diǎn)而彼此有很大的差異。與之相對(duì)應(yīng),全文數(shù)據(jù)庫系統(tǒng)的軟件及其功能模塊也會(huì)有很大的不同。作為功能完備的全文數(shù)據(jù)庫系統(tǒng),應(yīng)該具有以下的結(jié)構(gòu)特點(diǎn)及全部或大部分功能模塊。
1.1 數(shù)據(jù)庫結(jié)構(gòu)定義模塊這一模塊主要是確定庫的記錄、字段(包括重復(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ù)庫的數(shù)據(jù)基本上來源于外部數(shù)據(jù),對(duì)不同格式的數(shù)據(jù)處理采用不同的方法。
電子排版文本。這種文本中含有排版符號(hào)。如果全文數(shù)據(jù)庫建立在這種排版軟件基礎(chǔ)上,則文本無需加工。但多數(shù)全文數(shù)據(jù)庫系統(tǒng)并非建立在這種排版文本基礎(chǔ)上的,因此有必要通過軟件一次全部刪除排版符號(hào),同時(shí)應(yīng)解決由于刪除排版符號(hào)而帶來的問題,如補(bǔ)字、數(shù)學(xué)公式、上下標(biāo)等等,使之成為完整的純文本文件。
網(wǎng)上下載的PDF文件、網(wǎng)頁文件、光盤上記錄的某些特殊格式的數(shù)據(jù)。如果全文系統(tǒng)采用純文本格式,則需對(duì)其轉(zhuǎn)換。
以上這些文件的轉(zhuǎn)換,需要編制工具軟件,或利用已有的轉(zhuǎn)換工具。
文本預(yù)處理還包括數(shù)據(jù)的批式標(biāo)引。這是建立全文數(shù)據(jù)庫之前特別是數(shù)據(jù)裝載之前,主要是利用文字處理軟件和專門自動(dòng)標(biāo)引軟件對(duì)數(shù)據(jù)進(jìn)行的標(biāo)引,或按自己建立的標(biāo)引詞表,對(duì)文本進(jìn)行的掃描標(biāo)引。
1.3 裝庫模塊裝庫就是將數(shù)據(jù)預(yù)處理后的文本數(shù)據(jù)導(dǎo)入已有的庫結(jié)構(gòu)之中。
有的全文庫要求將數(shù)據(jù)轉(zhuǎn)換成ISO2709(CNMARC)格式才能裝庫;有時(shí)可將有一定標(biāo)志的文本格式裝庫;有的則將文本按原格式導(dǎo)入庫結(jié)構(gòu);有的不實(shí)際裝庫,只在系統(tǒng)中建立指向文本文件地址的指針??梢愿鶕?jù)具體情況選擇裝庫方式,但最后一種方法不推薦使用。
1.4 標(biāo)引模塊全文庫正文的單字索引,不必建立,因?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)化,從而大大提高了建庫的效率。但單字索引也存在明顯的缺點(diǎn),即同義詞、相關(guān)詞無法控制,解決辦法可以通過在檢索匹配模塊設(shè)置后控詞表進(jìn)行后控檢索。
1.5 索引作業(yè)模塊索引作業(yè)就是按照庫結(jié)構(gòu)定義中的索引字段生成索引的過程,一般生成一個(gè)索引即可。為了區(qū)別不同字段的索引款目,可以在索引定義中加文字常量。這樣在混排索引中就可以把不同屬性的索引款目相對(duì)集中,在檢索時(shí),可以進(jìn)行按字順顯示。如要檢索作者為“高山”的著作,應(yīng)這樣輸入檢索式:“AU = 高山”,從而可以避免檢出作為關(guān)鍵詞的“高山”及正文中的“高山”。全文索引的主體應(yīng)該是正文的單字索引,借助這種索引可以使全文中的任何信息、中心主題信息與邊緣性信息都能被檢索出來,避免標(biāo)引中的遺漏和主觀武斷,從而實(shí)現(xiàn)檢索的徹底性。
1.6用戶輸入檢索式模塊這一模塊是全文數(shù)據(jù)庫系統(tǒng)與用戶之間最直接的接口,也是決定檢索結(jié)果好壞的關(guān)鍵。全文數(shù)據(jù)庫的使用者往往缺乏系統(tǒng)檢索經(jīng)驗(yàn),要查到一些信息容易,但查全、查準(zhǔn)信息較難。全文庫檢索主要是使用自然語言,缺乏詞匯的控制,因此隨意性較大,檢索效果的評(píng)價(jià)也缺乏明顯的驗(yàn)證標(biāo)準(zhǔn)。要引導(dǎo)用戶正確提出檢索式,一般來說有三種基本的引導(dǎo)用戶的模式:
詢問表方式。即在用戶檢索時(shí),系統(tǒng)提出一個(gè)詢問表格,檢索項(xiàng)目由用戶填寫。這些項(xiàng)目如:欲檢索的篇名、作者姓名、關(guān)鍵詞、分類號(hào)、單字等等。不必要求用戶每項(xiàng)都填,即使只填一、二項(xiàng)也可。詢問表方式引導(dǎo)用戶表達(dá)自己信息需求的方式,對(duì)無檢索經(jīng)驗(yàn)者較為有用。
詞典式檢索。此方法適用于一般用戶。按詞典檢索時(shí),應(yīng)能允許用戶從顯示詞表中用光標(biāo)選詞,并且可選一個(gè)以上的詞,被選中的詞以“或”方式連結(jié)。如果讀者要用“與”“非”方式,應(yīng)能從表下所附的AND、NOT中點(diǎn)出這些運(yùn)算符,使之形成檢索式??偟膩碚f,其目標(biāo)應(yīng)該是減少用戶自己輸入漢字和運(yùn)算符,以提高效率并減輕其負(fù)擔(dān)。
命令方式。這是供有一定檢索經(jīng)驗(yàn)的用戶使用的,功能最為強(qiáng)大。命令方式主要是布爾運(yùn)算、位置運(yùn)算、括號(hào)嵌套、截?cái)喾?hào)、字段限定等。
1.7 用戶檢索分析處理模塊系統(tǒng)對(duì)來自屏幕的用戶檢索式加以處理,使之形成便于運(yùn)算的檢索方式。論文參考。對(duì)于復(fù)雜的檢索式,需要進(jìn)行逆波蘭變換,確定各檢索項(xiàng)的運(yùn)算次序。對(duì)詢問表的檢索式也需根據(jù)用戶所填數(shù)據(jù)形成檢索式。對(duì)標(biāo)引詞表顯示中用戶光標(biāo)指定詞加以收集,并形成檢索式。
在這一模塊中,系統(tǒng)還應(yīng)該檢查用戶提問檢索式是否有錯(cuò)誤(如左右括號(hào)不配對(duì),數(shù)個(gè)運(yùn)算符連用,字段文字常量輸錯(cuò)等),如發(fā)現(xiàn)錯(cuò)誤,應(yīng)向用戶做出提示,并給出修改建議。
1.8 檢索匹配模塊這一模塊與一般檢索系統(tǒng)相同,但作為全文數(shù)據(jù)庫來說還應(yīng)具備下列功能:
較強(qiáng)的位置檢索功能。由于全文庫往往對(duì)正文字段單字索引,因此對(duì)單字的布爾檢索不大適用,而應(yīng)以位置檢索為主。位置檢索時(shí),應(yīng)對(duì)緊密相鄰的幾個(gè)字采用連寫方法,不必插入位置運(yùn)算符?;蛘哒f,字與字之間默認(rèn)的運(yùn)算符是彼此緊密相鄰。
全文庫或指定集合中的順序掃描匹配檢索。當(dāng)對(duì)正文作單字索引的情況下,允許用戶使用這種掃描匹配進(jìn)行檢索。用戶只需輸出一個(gè)字符串(詞或短語),計(jì)算機(jī)就開始對(duì)全庫或指定集合進(jìn)行檢索匹配。
1.9 檢索結(jié)果的處理模塊檢索結(jié)果的處理主要包括:顯示瀏覽有關(guān)記錄(段或句子)文本。排序:可由用戶指定排序鍵。排序鍵可以是年代、字順或命中頻率。排列次序可以是升或降序。聚類:在有屬性標(biāo)引的全文庫中可進(jìn)行聚類。打?。嚎蓪⒚薪Y(jié)果打印輸出。下載:可以提供文本格式或機(jī)內(nèi)數(shù)據(jù)格式兩種下載方式。
2 數(shù)據(jù)庫系統(tǒng)、開發(fā)工具及中文編碼的選擇2.1 數(shù)據(jù)庫系統(tǒng)的選擇理論上現(xiàn)在成熟的大型關(guān)系數(shù)據(jù)庫軟件均可作為中文期刊全文數(shù)據(jù)庫系統(tǒng),但從市場(chǎng)占有程度及成本和易用性考慮,用來存儲(chǔ)中文期刊全文的數(shù)據(jù)庫系統(tǒng)建議從以下幾種平臺(tái)中進(jìn)行選擇。如果服務(wù)器端操作系統(tǒng)為Unix或Linux,并且經(jīng)費(fèi)預(yù)算允許,建議選擇Oracle作為數(shù)據(jù)庫系統(tǒng)。Oracle數(shù)據(jù)庫是一種具有無限可伸縮性與高可用性,并可在集群環(huán)境中運(yùn)行商業(yè)軟件的互聯(lián)網(wǎng)數(shù)據(jù)庫,具有400多個(gè)領(lǐng)先的數(shù)據(jù)庫功能,在集群技術(shù)、高可用性、商業(yè)智能、安全性、系統(tǒng)管理等方面都實(shí)現(xiàn)了新的突破。如果從降低成本考慮,可以選擇MySQL作為數(shù)據(jù)庫系統(tǒng)。以上兩種數(shù)據(jù)庫還提供支持Windows操作系統(tǒng)的版本,具有跨平臺(tái)能力。
如果服務(wù)器端操作系統(tǒng)為Windows,則建議選擇SQL Server作為數(shù)據(jù)庫系統(tǒng)。SQL Server是一個(gè)全面的數(shù)據(jù)庫系統(tǒng),使用集成的商業(yè)智能(BI)工具提供了企業(yè)級(jí)的數(shù)據(jù)管理。SQL Server數(shù)據(jù)庫引擎為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了更安全可靠的存儲(chǔ)功能,可以構(gòu)建和管理用于業(yè)務(wù)的高可用和高性能的數(shù)據(jù)應(yīng)用程序。
2.2 開發(fā)工具的選擇如果系統(tǒng)需要跨平臺(tái)部署,在選擇Oracle或MySQL數(shù)據(jù)庫系統(tǒng)的基礎(chǔ)上,建議選擇Java為開發(fā)工具。Java是一種簡單的,面向?qū)ο蟮模植际降?,解釋型的,健壯安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線程的動(dòng)態(tài)語言。如果對(duì)跨平臺(tái)沒有要求,并選擇SQL Server數(shù)據(jù)庫系統(tǒng),則建議選擇Visual Studio為開發(fā)工具。Visual Studio 是微軟公司推出的開發(fā)環(huán)境。是目前最流行的 Windows 平臺(tái)應(yīng)用程序開發(fā)環(huán)境。目前已經(jīng)開發(fā)到 9.0 版本,也就是 Visual Studio 2008。Visual Studio 可以用來創(chuàng)建 Windows 平臺(tái)下的 Windows 應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也可以用來創(chuàng)建網(wǎng)絡(luò)服務(wù)、智能設(shè)備應(yīng)用程序和Office 插件。
2.3 中文編碼的選擇中文編碼主要有以下四種:
GB2312:簡體中文編碼,一個(gè)漢字占用2字節(jié),在大陸是主要編碼方式。當(dāng)文章中包含繁體中文、日文、韓文等等時(shí),這些內(nèi)容可能無法被正確編碼。
BIG5:繁體中文編碼。主要在臺(tái)灣地區(qū)采用。
GBK:支持簡體及繁體中文,但對(duì)其它國家非拉丁字母語言還是有問題。論文參考。
UTF-8:Unicode編碼的一種。Unicode用一些基本的保留字符制定了三套編碼方式,它們分別UTF-8,UTF-16和UTF-32。在UTF-8中,字符是以8位序列來編碼的,用一個(gè)或幾個(gè)字節(jié)來表示一個(gè)字符。論文參考。這種方式的最大好處,是UTF-8保留了ASCII字符的編碼作為它的一部分。UTF-8俗稱“萬國碼”,可以同屏顯示多語種,一個(gè)漢字占用3字節(jié)。
因此,為了保證全文數(shù)據(jù)的存儲(chǔ)和顯示不出現(xiàn)問題,建議選擇UTF-8為數(shù)據(jù)庫系統(tǒng)編碼,應(yīng)該在裝庫操作前對(duì)所有內(nèi)容進(jìn)行編碼轉(zhuǎn)換,統(tǒng)一轉(zhuǎn)換成UTF-8編碼。
結(jié)語全文數(shù)據(jù)庫以其內(nèi)容完整、直接提供一次文獻(xiàn)等特點(diǎn),越來越受到人們的關(guān)注。全文數(shù)據(jù)庫給網(wǎng)絡(luò)環(huán)境下的信息交流提供了更為方便快捷的途徑。在全文檢索技術(shù)日趨成熟的條件下,全文數(shù)據(jù)庫在供讀者利用方面表現(xiàn)出的優(yōu)勢(shì)是其它類型數(shù)據(jù)庫所無法替代的。因此,對(duì)中文全文數(shù)據(jù)庫的設(shè)計(jì)進(jìn)行研究,是信息服務(wù)發(fā)展的必然要求。
參考文獻(xiàn)[1]秦劍.我國數(shù)據(jù)庫建設(shè)的思考與展望[J]河南圖書館學(xué)刊,2002,(04).
[2]程文艷.數(shù)字圖書館——數(shù)字中國的開路先鋒[J]情報(bào)科學(xué),2002,(06).
[3]楊麗兵.淺談中文過刊編目數(shù)據(jù)庫建設(shè)工作[J]農(nóng)業(yè)圖書情報(bào)學(xué)刊,2004,(01).
[4]何凱文.我國高校圖書館數(shù)字資源建設(shè)的問題及發(fā)展途徑[J]圖書館建設(shè),2004,(05).
[5]曾莉紅.基于點(diǎn)擊率的全文數(shù)據(jù)庫檢索結(jié)果組織方法探討[J]情報(bào)雜志,2007,(06).
篇10
關(guān)鍵詞:Oracle數(shù)據(jù)庫;索引;硬解析
引言
Oracle數(shù)據(jù)庫以支持大數(shù)據(jù)量、多用戶、高并發(fā)事務(wù)處理等優(yōu)勢(shì),越來越多的被應(yīng)用在大型企業(yè),如電信、銀行、電力等部門,隨著高訪問量所帶來的壓力逐漸增大,系統(tǒng)會(huì)出現(xiàn)吞吐量低,響應(yīng)時(shí)間長等性能問題,為了解決這個(gè)問題有必要對(duì)數(shù)據(jù)庫進(jìn)行優(yōu)化,數(shù)據(jù)庫的優(yōu)化可從兩方面進(jìn)行分析研究,制定出優(yōu)化策略。
1 影響Oracle數(shù)據(jù)庫系統(tǒng)性能的因素
Oracle數(shù)據(jù)庫性能問題受到多方面因素影響,包括硬件環(huán)境,網(wǎng)絡(luò)I/O,應(yīng)用程序規(guī)范,數(shù)據(jù)庫參數(shù)配置,行遷移等
(1)數(shù)據(jù)庫服務(wù)器硬件環(huán)境:cpu,內(nèi)存,網(wǎng)絡(luò)傳輸狀況等方面均會(huì)影響oracle的性能。
(2)數(shù)據(jù)庫參數(shù)配置:Oracle數(shù)據(jù)庫為用戶提供了大量的參數(shù)配置,根據(jù)具體的應(yīng)用環(huán)境,調(diào)整參數(shù)配置,可以使數(shù)據(jù)庫達(dá)到更優(yōu),相反,錯(cuò)誤的參數(shù)配置可能令數(shù)據(jù)庫性能低下。
(3)網(wǎng)絡(luò)I/O:計(jì)算機(jī)的輸入輸出(I/O)是很耗時(shí)的系統(tǒng)行為,I/O優(yōu)化就是通過一定的措施減少I/O消耗時(shí)間。
(4)應(yīng)用程序的實(shí)現(xiàn):對(duì)于程序員而言,不合理的sql語句書寫直接影響到Oracle數(shù)據(jù)庫的性能,且后期更改難度大。如書寫sql語句不使用綁定變量,會(huì)使數(shù)據(jù)庫出現(xiàn)大量的硬解析,從而影響數(shù)據(jù)庫性能。
(5)行遷移:表中存在的數(shù)據(jù),在update操作過程中,行可能會(huì)變長,此時(shí),行會(huì)使用數(shù)據(jù)塊內(nèi)的剩余空間,當(dāng)數(shù)據(jù)塊內(nè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ù)庫的性能。
2 數(shù)據(jù)庫優(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ù)庫中,有些經(jīng)常被訪問的小表,可以將其常駐在內(nèi)存中,以避免對(duì)該表訪問時(shí)頻繁產(chǎn)生磁盤I/O,以空間換時(shí)間,使響應(yīng)速度增大。具體方法:
SQL> alter system set db_keep_cache_size = 200M;//開辟出200M的常駐區(qū)域;
SQL> alter table t1 storage (buffer_pool keep);//把表t1常駐在內(nèi)存中。
2.2 磁盤I/O調(diào)整
(1)分開存儲(chǔ)數(shù)據(jù)文件和索引文件。Oracle數(shù)據(jù)庫在提取數(shù)據(jù)的時(shí)候會(huì)去索引和數(shù)據(jù)文件里讀數(shù)據(jù),將這兩個(gè)文件分開存放在不同的硬盤上可以增加讀取速度以提高性能。
(2)日志文件的存放位置。日志文件寫操作比較頻繁,可以選擇存儲(chǔ)在固態(tài)硬盤等高速存儲(chǔ)上。
(3)使用分區(qū)來避免磁盤爭(zhēng)用。當(dāng)一個(gè)表很大的時(shí)候,如:1GB(具體和環(huán)境有關(guān)),可以考慮分區(qū),把一個(gè)表的分區(qū)存放在不同的磁盤上,吞吐量可以大大增加。分區(qū)的類型有多種,如范圍分區(qū)、哈希分區(qū)、組合分區(qū)、列表分區(qū)。
2.3 回滾段設(shè)置
回滾段保存著數(shù)據(jù)更新的前映像,當(dāng)事物回滾時(shí)會(huì)用到此前映像,原則上講,建議每個(gè)回滾段能同時(shí)進(jìn)行4個(gè)事物處理,但也應(yīng)該根據(jù)系統(tǒng)需求來設(shè)定回滾段的數(shù)目。
2.4 碎片整理
SQL> ALTER TABLE T1 ENABLE ROW MOVEMENT;//允許表T1 可以在線回收碎片
SQL> ALTER TABLE T1 SHRINK SPACE;//進(jìn)行空間回收
2.5 處理行遷移
利用移動(dòng)表的存放位置來消除行遷移,操作語句為:
SQL> ALTER TABLE T1 MOVE TABLESPACE tablespace_name;
此操作會(huì)使T1表在數(shù)據(jù)庫中重新碼放,但是索引會(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ù)庫系統(tǒng)中大量的sql語句并發(fā)執(zhí)行,速度飛快,內(nèi)存效率極高,綁定變量后會(huì)減少大量的sql語句解析消耗,從而減少數(shù)據(jù)庫壓力。
2.7 索引的建立與維護(hù)
索引是將無序的數(shù)據(jù)有序化,這樣可以在查詢數(shù)據(jù)的時(shí)候減少數(shù)據(jù)塊的讀取,實(shí)現(xiàn)快速定位數(shù)據(jù)。數(shù)據(jù)庫自動(dòng)維護(hù)索引,但隨著大量的增刪改操作,索引會(huì)產(chǎn)生許多空洞,可以采用合并或重建索引的方法進(jìn)行優(yōu)化,以提高訪問速度。操作命令為:
SQL> ALTER index index1 coalesce;//合并索引的空洞
SQL> ALTER index index1 rebuild;//索引的重建
合并并不釋放索引段所擁有的空間,不處理正在變化的行,重建只能在沒有事物的情況下進(jìn)行,如果有未提交的事物,則會(huì)報(bào)錯(cuò)。
3 Oracle常用優(yōu)化工具
(1)Oracle數(shù)據(jù)庫數(shù)據(jù)字典和動(dòng)態(tài)性能視圖,Oracle動(dòng)態(tài)性能視圖能反映出Oracle動(dòng)態(tài)運(yùn)行情況,對(duì)于數(shù)據(jù)庫的性能調(diào)整很有幫助。
(2)Oracle Statspack是DBA用來診斷數(shù)據(jù)庫的工具,在Oracle8i已經(jīng)被引入,并經(jīng)過多次調(diào)整增加的許多強(qiáng)有力功能,可以幫助DBA迅速定位數(shù)據(jù)庫瓶頸所在。此工具腳本存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,spcreate.sql為建立用戶和表腳本,以后采集的數(shù)據(jù)庫信息會(huì)放在這個(gè)用戶和表內(nèi)。spreport.sql為收集快照腳本。
(3)Oracle AWR(automatic workload repository自動(dòng)工作負(fù)載信息庫),Oracle建議用戶用這個(gè)取代statspack,AWR實(shí)質(zhì)是Oracle的一個(gè)內(nèi)置工具,它采集與性能相關(guān)的統(tǒng)計(jì)數(shù)據(jù),并從那些統(tǒng)計(jì)數(shù)據(jù)中導(dǎo)出性能量度,以跟蹤潛在問題。它產(chǎn)生兩種類型的輸出,文本格式和HTML格式,提供了非常友好的用戶報(bào)表。此工具腳本存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,名字為awrrpt.sql。在sqlplus下可以直接執(zhí)行,如:SQL>@$ORACLE_HOME/RDBMS/ADMIN/awrrpt.sql
(4)Oracle ASH(Active Session History),此工具從Oracle10gR2開始引入,和AWR相比,ASH側(cè)重于當(dāng)前活動(dòng)回話的信息分析,Oracle每秒鐘會(huì)對(duì)數(shù)據(jù)庫中活動(dòng)的回話信息進(jìn)行采樣,這些信息被存放在一個(gè)動(dòng)態(tài)循環(huán)使用的內(nèi)存區(qū)域中(位于SGA區(qū)),此區(qū)域是循環(huán)使用的,數(shù)據(jù)庫活動(dòng)越頻繁,老的數(shù)據(jù)越會(huì)被快速覆蓋掉。軟件包也存放在$ORACLE_HOME/RDBMS/ADMIN目錄下,名字為ashrpt.sql。
4 結(jié)束語
文章針對(duì)移動(dòng)渠道管理系統(tǒng)數(shù)據(jù)庫性能調(diào)整的實(shí)踐經(jīng)驗(yàn),總結(jié)了導(dǎo)致數(shù)據(jù)庫性能下降的原因和優(yōu)化方法,數(shù)據(jù)庫性能問題在最近幾年越來越受到DBA的關(guān)注,只有在實(shí)踐中反復(fù)實(shí)驗(yàn)調(diào)整,才能使數(shù)據(jù)庫系統(tǒng)獲得最優(yōu)性能。
參考文獻(xiàn)
[1][美]Richard J?Niemiec,Oracle 10g Performance Tuning Tips & Techniques[M].北京:清華大學(xué)出版社,2010.
熱門標(biāo)簽
數(shù)據(jù)分析論文 數(shù)據(jù)挖掘論文 數(shù)據(jù)安全論文 數(shù)據(jù)管理論文 數(shù)據(jù)庫論文 數(shù)據(jù)誤差 數(shù)據(jù)挖掘總結(jié) 數(shù)據(jù)采集 數(shù)據(jù)管理 數(shù)據(jù)統(tǒng)計(jì) 心理培訓(xùn) 人文科學(xué)概論
相關(guān)文章
1政務(wù)數(shù)據(jù)協(xié)同治理的分析
3建筑業(yè)統(tǒng)計(jì)數(shù)據(jù)質(zhì)量探討