數據庫索引范文

時間:2023-03-23 20:48:59

導語:如何才能寫好一篇數據庫索引,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。

數據庫索引

篇1

【關鍵詞】空間數據庫索引技術;Web技術;高維空間

隨著空間數據應用的增加,存儲空間開銷的加大以及索引空間重疊的劇增,空間數據庫的索引性能下降。為提高空間查詢的效率,空間數據庫索引技術應運而生。下面我們將從四個方面來對空間數據庫索引技術進行探討。

1.高維空間索引技術

隨著三維地理信息系統、多媒體數據庫及時空數據庫的研究和發展,對多維空間目標的搜索及更新功能的要求越來越迫切。而目前常用的空間索引技術,主要是針對一維或二維空間中的空間數據。將這些索引技術運用于三維或更高維空間數據時,其查詢效率將大大降低,有時索引機制甚至不起到作用。因此,如何索引這些高維數據是一個很大的挑戰,有必要研究新的可擴展的高維索引技術,使之不但能有效地檢索一維或二維空間數據,而且能有效地檢索高維的空間數據。

高維空間數據索引的一種實現方法是降維,然后再降維后的子空間里運用一維或多維空間索引技術。其降維的方法包括空間填充曲線、奇異值分解、距離映射算法等。由于高維空間數據索引結構的復雜性,高維空間數據索引技術的研究仍然存在很多問題有待于進一步探討。

2.基于空間關系的索引技術

基于空間關系的數據索引技術在空間數據庫中占有十分重要的地位。這是因為,空間數據庫涉及對現實世界大量具有不規則幾何形狀空間目標的處理,這些目標之間存在著復雜的空間關系。很多查詢和分析操作都是基于目標間空間關系的。只有在相應的空間數據結構基礎上,依據目標間的空間關系建立良好的索引機制,才有可能有效地提高對空間數據的處理效率,尤其是空間查詢的效率。否則,查詢某個空間目標時,必須將該目標的特征值與空間數據庫中存儲的所有目標進行一一比較,以最終確定要查找的目標,這顯然是令人難以容忍的。由此可見,基于空間關系的空間索引技術研究具有十分重要的意義。

目前的空間索引技術都有其固定的優勢和不足,其共同特點是基于空間目標的空間位置來建立相應的索引結構,其主要目的是提高空間數據庫系統中區域查詢效率。然而目前的空間索引技術難以根據目標之間的空間關系來建立有效的檢索機制,從而極大地影響了系統的功能和效率。若能根據空間目標之間的某些空間關系來動態地相應的索引機制,使之能夠依據目標間的空間關系,快捷地查找到相關的目標,這必將極大地提高空間查詢和空間分析的效率,從而有效地擴充空間數據庫系統的數據組織、數據分析和數據維護功能。

3.基于Web技術的空間索引技術

與傳統的空間數據庫相比,基于Web的空間數據庫在體系結構上有了根本的轉變,它主要包括以下幾部分:(1)基于Internet/Ineranet環境,采用了TCP/IP通信協議,大大擴展了空間信息共享范圍。(2)在應用層采用了HTTP協議,客戶端只需要有通用的瀏覽器即可,不需要有特殊的軟件,大大增強了系統的性能。(3)應用的分布性。可以根據網絡帶寬、計算機性能等一系列資源狀況,將應用按照功能分布到不同的結點上,如分布到多臺服務器上或是將一部分簡單應用分布到客戶機上,復雜的應用仍交給服務器執行,這樣可以大大提高系統的性能。(4)空間數據的分布性。空間數據可以根據其本身具備的空間特征存儲在最適宜的位置上,從而大大簡化了對空間數據的管理。

基于Web的空間數據庫為信息的高度共享提供了可能,它改變了以往數據信息傳輸、、共享及應用的過程和方式,是空間信息系統發展的必然趨勢。基于Web的空間數據庫目前還處在發展階段,還存在著許多關鍵問題尚未突破,空間數據的存儲、檢索及相關索引技術結構的建立即為其中等待解決的難題之一。

4.基于空間數據倉庫的索引技術

隨著信息技術的飛速發展和空間數據庫業界對海量空間數據存儲、管理、分析和交換的需求,以面向事務處理為主的空間數據庫系統已不能滿足需要,空間信息系統開始從管理轉向決策處理,空間數據倉庫就是為滿足這種新的需求而提出的空間信息集成方案,它與傳統空間數據庫的主要差別為面向主題的數據組織和管理、數據的集成、數據的維護與管理及空間數據的時空序列變化這四個方面。

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

5.結束語

空間數據索引是提高空間數據查詢最有效的方法,也最難全面掌握的技術,因為正確的索引機制可能使查詢效率提高一萬倍,而無效的索引可能會浪費了數據庫空間,甚至大大降低查詢性能。采用不依賴于商用數據庫空間擴展技術的空間數據引擎,具有良好的空間存儲和訪問效率,移植性好,靈活性高,更易于提高和完善,對于應用模型的設計也更為有利。缺點是實現難度大,且不支持擴展SQL查詢,數據維護復雜。商用空間數據庫的空間擴展最大的優點在于對象級的數據存儲機制和支持擴展SQL的查詢。采用數據庫廠商提供的抽象數據類型存儲空間數據,使得數據共享和互操作更有潛力。目前的各種商用空間數據庫引擎或空間擴展技術有待于進一步研究。

參考文獻:

[1]談國新.一體化空間數據結構及其索引機制研究.測繪學報,1998,27(4):293299

[2]孫小燕,譚勇桂.空間索引技術―回顧與展望.計算機工程與應用.2002,24:197200

篇2

1.1 索引對象的概念

數據庫對象是一種邏輯結構的集合,索引是供用戶快速查找到記錄的數據庫結構,在邏輯上和物理上都獨立于表的數據。索引可以在表內創建一個或多個列的組合,當建立索引以后表中數據會按照索引創建語句所定義的排序方式返回給用戶。索引有多種類型,除了標準索引外,還包括唯一索引、位圖索引、組合索引、基于函數的索引、反向鍵索引等。

建立索引能夠提高 SQL 語句執行的性能,減少磁盤I/O。無索引查詢,通常是全表搜索后才會得到結果,全表搜索會讓數據庫服務程序遍歷表中的所有記錄然后返回結果;而建立索引后查詢,可以讓數據庫服務程序快速地定位到表中的確定行。當表被刪除時所有與表相關的索引也將被刪除。

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

創建索引是為了提升數據庫查詢性能,在使用索引時需要注意以下情況:

1) 對于小表來說,使用索引對于性能不會有任何提高;

2) 當索引列中有極多的不同的數據和空值時索引會使性能有極大的提高;

3) 經常執行更新、修改操作的字段需要謹慎創建索引,因為更新索引的開銷會降低創建索引所期望獲得的性能;

4) 不要將索引與表存儲在同一個驅動器上,分開存儲會去掉訪問的沖突從而使結果返回得更快。

1.2 索引對象優化方法

在業務系統中針對索引對象的優化,主要包括三種方式:一是重建過高的索引層次;二是清除無效的索引;三是對索引碎片的清理。

2.2 風險防范措施

針對數據庫對象的優化,總體應該遵循如下的風險防范原則:

1) 確保數據庫備份完整可用;

2) 所有操作和檢查環節都使用事前完成并預演通過的腳本,避免臨時修改腳本;

3) 每部分完成,通過檢查確認無誤,再進行其它部分,避免互相干擾;

4) 專家現場支持,及時處理突發問題。

在遵循上述原則的基礎之上,對索引對象的優化需要注意以下風險:

1) 監測時間不夠,在一個監測周期內未操作過表,監測過后又用到了這個表,需要索引,但此時此索引已被列為被優化的對象;

2) 監控過后,需要取消在用索引的監控;

3) 監控時如果rebuild index ,會取消監控,同時索引標記為已使用,這種情況下會影響監控效果;

4) 監控時如果在做統計分析時涉及到此索引,索引也會標記為已使用,同樣影響監控效果。

為避免上述風險發生,通常采用的措施是在監控期間停止database、schema、table、index等級別的索引收集,避免影響監控效果。

2.3 優化效果分析

數據庫級別的性能數據主要是以下關鍵指標:響應時間、CPU時間、等待時間、物理讀,這些指標可以看出目前平均每事務的反應速度、每事務需要消耗的CPU與IO量。為了得到優化的效果,還需要保證進行數據對比的時間內,數據庫的負載基本相同。數據庫的負載指標一般以執行的事務數、Redo size等指標來表示。表1是某業務系統的這些指標在索引對象優化前后的對比數據。

通過索引對象的優化,可以從對比表中明顯看出性能得到了大幅提升,影響較大的數據庫操作瓶頸主要集中在大表的查詢操作、關聯表的更新操作、大業務數據的統計分析操作等,在優化后其操作響應時間已經能夠滿足用戶的業務需求。這些數據對比符合數據庫索引優化方案的預期成效,也說明索引對象對數據庫性能的重要影響。

3 總結

企業的業務系統經過長期的運作,積累了大量的業務數據,同時隨著業務增長、流程優化、人員變動等因素,會造成系統性能瓶頸。此時,需要運維和管理人員根據實際需求,按照系統優化原則,制定詳細、多番論證的優化方案,對系統實施優化,這樣才能滿足用戶不斷變化、業務不斷增長的需求。該文通過詳述數據庫索引對象的優化方法、應用案例,闡述了索引對象對系統性能影響的范圍和程度,并就優化方案給出了應遵循的原則和風險防范措施。在性能優化中,針對數據庫性能瓶頸,索引對象優化只是其中最常見的一種方案,具體優化還需要根據對系統長時間監測情況的分析,做出正確選擇。

參考文獻:

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

[2] 蓋國強.深入淺出Oracle數據庫——DBA入門、進階與診斷案例[M].北京:人民郵電出版社,2006.

篇3

【關鍵詞】空間數據庫,索引,查詢優化

中圖分類號:G250文獻標識碼: A

一、前言

近年來,OracleSpatial的空間數據庫正在不斷的完善,但依然存在一些問題和不足需要改進,在技術快速發展的新時期,不斷完善OracleSpatial的空間數據庫的索引與查詢優化,對空間數據庫的發展有著重要意義。

二、查詢模型

OracleSpatial使用雙層查詢模型來解決空間查詢問題,即初級過濾操作和二級過濾操作。經過兩次過濾,將返回精確的查詢結果集,在的級操作過濾步驟中,近似匹配滿足條件的一組候選對象,這些對象有可能滿足給定的空間查詢要求,其結果集是精確查詢的父集。

選擇近似表示的條件為:如果對象A與對象B的近似滿足一種關系,那么對象A與對象B就可能具有那種空間關系。例如,如果近似表示是分離的,那么對象A和對象B就將是分離的,但是如果近似表示非分離的,對象A和對象B仍可能是分離的。然后通過二次過濾,對初次過濾結果再次求精,就得到實體間的精確空間關系。使用這樣的二次過濾策略有幾項優點:空間對象一般都很大,因此要占用大量主內存。空間對象的近似表示在載入內存時占用的時間和空間要少的多。對空間對象的計算一般都很復雜,計算花費很大。對象越復雜,計算空間關系就越復雜。使用近似對象的計算一般會很快,需要的計算周期也要短的多。

三、空間索引

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

1、四叉樹索引

線性四叉樹索引把幾何對象映射到一組編號的“瓦片”(title)。二維空間中的一個瓦片就是一個方框,它的四邊形與兩條坐標軸正交。所有幾何體得以存在的坐標空間以一種規則的分級方式進行分解。坐標范圍(即坐標空間)可視為一個矩形。在第一級分解中將此矩形沿每一坐標方向分為兩半,形成四個“子瓦片”,被稱為“四分片”。在接下來的每一級分解中,每一個四分片由被沿每一坐標方向分成兩半,再形成四個子瓦片。顧名思義,四叉樹的4葉結構可以用來構造索引樹。此過程持續進行,直到某些終止條件(如瓦片的大小)得以滿足。這些瓦片可以用z-排序方案或等價方案進行線性排序,從而產生線性四叉樹。

2、參考樹索引

除了提供四叉樹索引功能之外,OracleSpatial還提供了參考樹索引。參考樹索引既可以用來代替四叉樹索引,也可以與四叉樹索引并用。此外,參考樹索引還可用于對數據進行三維和四維索引,這對于解決石油勘探、體系結構、工程設計以及許多其他科學應用中的問題至關重要。

3、可擴展索引

應用程序可在Oracle數據庫內(以表的形式)或Oracle數據庫外(以文件形式)存儲索引數據。應用程序通過管理、檢索和使用索引數據來計算用戶查詢。實質上,應用程序控制著域索引的結構和語義內容。數據庫系統通過與應用程序交互來創建、維護和使用域索引。

域索引數據最好存儲在數據庫中,這樣,它就可以處理物理存儲。

四、空間查詢的優化

1、空間查詢優化的原理

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

2、空間查詢優化的技術支持

OCI是Oracle提供的調用接口,英文全稱為OracleCallInterface。它是Oracle數據庫的最底層數據訪問接口,在各類訪問接口中,功能最全、效率最高,卻也最復雜,但是OCI卻提供了很好的靈活性和高效性,為用戶的二次開發提供了很好的平臺。

3、空間查詢優化程序的設計

(一)、程序流程

空間查詢優化程序接收輸入的空間查詢SQL語句,判定其是否符合優化程序的優化條件。如果不符合優化的條件,則直接執行SQL語句,進行空間查詢;如果需要優化,則進入優化程序。首先,分析輸入的SQL語句,提取語句中要查詢的列、需要查詢的表格、查詢條件中關于空間查詢的限制以及關于普通一維查詢的限制;然后,根據已提取出的內容,生成新的SQL語句;最后提交給Oracle數據庫執行,將結果顯示出來并存入文件中。

(二)、可優化的條件

當查詢的條件中包含兩個或兩個以上的約束,并且約束條件中至少有一個為空間查詢的約束時,即可實行優化,否則的話,程序將不會進行任何優化,直接把SQL語句直接提交給Oracle數據庫執行。

4、空間查詢優化程序的實現

(一)、SQL語句的分析與優化

由于SQL語句良好的語法結構和空間查詢函數的結構特點,因此很容易將空間查詢的SQL語句進行分析,例如,可以很清楚的知道所要查詢的內容在select――from字段之間,所查詢的表在from――where之間,查詢的約束條件在where字段之后;而約束條件的區分則依靠空間查詢函數的特點――以“sdo_xxx”作為函數的開始。在分析過程中,由于要進行字符串的匹配,為了提高匹配的效率,在匹配過程中采用了KMP算法。

(二)、優化語句的生成

優化語句的生成分兩步執行。生成優化語句的第一步是根據普通一維查詢的約束條件,將所要查詢的表的符合約束條件的所有內容存入到臨時表中。

(三)、提交優化后的SQL語句

優化工作的最后一步為將優化后的SQL語句提交給數據庫執行,顯示查詢結果并將結果寫入到文件中。在輸出的過程中,必須知道每一列的類型才可以輸出結果。類型的明確通過調用OCI提供的OCIAttrGet函數實現,將每一列的類型記錄到對應的標識列類型的數組中,在輸出時,根據列的類型將相應的值寫入用于輸出的變量中,顯示在屏幕上、存儲在文件中。整個優化工作完成,結束會話,斷開與數據庫的連接,程序結束。

五、結束語

空間數據庫發展至關重要,因此,基于OracleSpatial的空間數據庫的索引與查詢優化,要不斷提高技術水平,加強對空間數據庫的索引與查詢的重視,促進OracleSpatial的空間數據庫應用水平的提高。

參考文獻

[1]潘農菲.基于OracleSpatial的GIS空間數據處理及應用系統開發[J].計算機工程,2002

篇4

一、數據庫的優化查詢方法

1、基于索引的優化

數據庫的優化方法多種多樣,不同的方法對提高數據庫查詢效率也不相同。

索引作為數據庫中的重要數據結構,它的根本目的就是為了提高查詢的效率。而優化查詢的重要方法就是建立索引,建立適合關系數據庫系統的索引,這樣就可以避免表掃描,并減少了因為查詢而造成的輸入輸出開銷。有效提高數據庫數據的查詢速度,優化了數據庫性能。然而在創建索引時也增加了系統時間和空間的開銷。所以創建索引時應該與實際查詢需求相結合,這樣才能實現真正的優化查詢。

1.1判斷井建立必要的索引對所要創建的索引進行正確的判斷,使所創建的索引對數據庫的工作效率提高有所幫助。為了實現這一點。我們應做到以下要求:在熟記數據庫程序中的相關sQL語句的前提下,統計出常用且對性能有影響的語句,判斷數據庫系統中哪些表的哪些字段要建立索引。其次,對數據庫中操作頻繁的表。數據流量較大的表,經常需要與其他表進行連接的表等,要進行重點關注。這些表上的索引將對SQL語句的性能產生重要的影響。

1.2對索引使用的一些規則索引的使用在一些大型數據庫系統中會經常使用到。這樣可以有效的提高數據庫性能,使數據庫的訪問速度得到提高。但索引的使用要恰倒好處,所以我們在使用索引時應遵守使用原則:建立索引可以提高數據庫的查詢速度。但索引過多,不但不能實現優化查詢,反而會影響到數據庫的整體性能。索g作為數據庫中實際存在的對象,每個索引都要占用一定的物理空間。所以對于索引的建立要考慮到物理空間容量,以及所建立索引的必要性和實用性。

1.3合理的索引對SQL語句的意義索引建壺之后,還要確保其得到了真正的使用,發揮了其應有的作用。首先,可以通過SQL語句查詢來確定所建立的索引是否得到了使用,找出沒有使用到的索引。分析素引建立但沒有使用的原因,使其真正發揮作用。其次,索引得到使用以后,是否得到了預期的效果,對數據庫的性能是否實現了真正意義上的提高,只有合理的索引才能真正提高數據庫的性能。

2、優化SQL語句

在使用索引時可以有效的提高查詢速度,但如果SQL語句使用不恰當的話,所建立的索引就不能發揮其作用。所以我們應該做到不但會寫SQL,還要寫出性能優良的SQL語句。下面,就如何優化引用例子進行說明。

首先,在進行查詢時,返回的值應該是查詢所需要的。在查詢中應該盡量減少對數據庫中的表的訪問行數,使查詢的結果范圍最小,這就意味著在查詢時,不能過多的使用通配符,如:selecf*fmm tablet語句,而應該做到最小化查詢范圍,要查詢幾行幾列就選擇幾行幾列,如:selectcoil from tablel ;多數情況下,用戶并不需要查詢到的所有數據,而只是部分或靠前的數據時,我們也可以通過SQL語句來進行限制查詢的結果,如:select top 50 coll from tablel。

其次,對于一些特殊的SQL語句,在使用時應正確選擇。我們用一組例子來說明,如: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)

兩個語句所得到的結果相同,但,語句二的效率要遠高于語句一,因為語句一在查詢中產生了大量的索引掃描。

在對數據庫查詢時,所使用的語句多種多樣,但選擇恰當的的字句能夠有效的提高查詢效率。

最后,WHERE子句在使用時應該注意的問題。

在WHERE子句中可以使用exist和not exist代替in和not in,應該盡量避免使用in,not in,0r或者having。可以使用表鏈接代替exist。Having可以用where代替,如果無法代替可以分兩步處理。

二、數據庫系統的安全

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

三、數據庫入侵檢測技術

數據庫入侵檢測系統的研究與設計借鑒了針對網絡和針對主機的入侵檢測技術,在此基礎上,又考慮了數據庫自身的特點。按照檢測方法分為:誤用檢測和反常檢測。

(1)數據庫誤用檢測

誤用檢測是指將已知的攻擊特征存儲在誤用特征知識庫里面,然后根據用戶的當前操作行為與知識庫里的誤用人侵規則進行匹配檢驗,如果符合知識庫中的入侵特征,則說明發生了入侵。誤用特征知識庫中的入侵規則由安全專家定義,可以隨時添加、修改,然后保存在知識庫中,用來對審計數據進行匹配比較。誤用檢測的優點是檢測的準確率高,缺點是只能對已知的攻擊特征進行匹配檢驗,對未知的攻擊類型無法發現,而對未知攻擊類型的檢測要依靠異常檢測。所以,誤用檢測常常與異常檢測結合起來使用。

(2)數據庫反常入侵檢測

篇5

關鍵詞: oracle數據庫;sql;數據庫索引;查詢優化 

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數據庫常見的資源瓶頸類型

oracle9i數據庫運行時,常見的瓶頸現象有以下幾種類型:

內存瓶頸:當oracle9i進程需要更大的內存空間超過系統可提供時。

磁盤i/0瓶頸:由于內存緩沖區的空間不足,或者表空間及其文件在硬件上的分配不合理而導致進程對磁盤的頻繁i/0讀寫。

cpu瓶頸:盡管多數情況下,都是由操作系統的內核來管理分配有效的cpu給oracle9i數據庫進程使用,但是,仍然會出現過多的應用進程對cpu使用周期激烈競爭的現象。

oracle9i資源瓶頸。

對以上各種資源瓶頸,通常可以從多個方面進行調整,但是,當對oracle9i數據庫某一方面進行調整后,必然會影響到其它方面的性能。所以,對oracle服務器進行性能優化調整,應該采取一種綜合優化調整策略,本文重點闡述對數據庫查詢優化方法。 

2  針對sga 內存區的調整

首先進行oracle實例調整。oracle實例涉及到sga 內存區和一組oracle后臺處理進程。對oracle實例的調整就是對sga 內存區和oracle后臺處理進程的調整。在對該問題的解決中,主要是針對sga 內存區的調整。

2.1 sga 內存區結構

sga就是系統全局區,是指內存中允許多個進程相互通信的區域。在oracle中,sga對所有進程來說都是全局的可用的。圖1為sga結構圖。緩沖區高速緩存是sga 中為所有用戶和系統進程保存數據的區域,任何數據在傳遞給一個調用的應用程序之前,都必須駐留在這片高速緩存中。

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

2.2 調整sga 結構

一般來講,在系統硬件支持的情況下,系統全局區越大越有利于數據庫高效的運行。大的緩沖區高速緩存可以緩存更多的數據塊,這樣可以提高緩存命中率,節省物理磁盤讀取的高昂代價;大的共享池意味著大的庫高速緩存。庫緩存的內存結構如圖2所示。

圖2  庫緩存的內存結構

庫緩存越大,可以保存的sql語法分析信息越多;此外,數據庫中的一些對象,如表、索引、過程、觸發器、軟件包等也在首次執行后進駐庫高速緩存。大的庫緩存可以保證對這些對象的高命中率,從而節省解析和載入代價。作為一個通用的優化原則,我們在解決該問題時,適當增大了sga 的容量,從而保證oracle實例可以比較高效的運行。設置緩沖區高速緩存的容量為32 m ,設置共享池的大小為56m。運行rpt_lib.sql程序檢查庫高速緩存不足率(還沒有運行該腳本),表明庫緩存足夠。

2.3 oracle數據庫的物理結構和邏輯結構

oracle數據庫的物理結構從操作系統一級查看,就是由一個個的文件組成,從物理上可劃分為:數據文件、日志文件、控制文件和參數文件。數據文件中存放了所有的數據信息;日志文件存放數據庫運行期間產生的日志信息,它被重復覆蓋使用,若不采用歸檔方式的話,已被覆蓋的日志信息將無法恢復;控制文件記錄了整個數據庫的關鍵結構信息,它若被破壞,整個數據庫將無法工作和恢復;參數文件中設置了很多oracle數據庫的配置參數,當數據庫啟動時,會讀取這些信息。

oracle數據庫的邏輯結構則是由一些數據庫對象組成,這也是數據庫管理員和應用開發人員經常用到和查看的邏輯對象,如:數據庫表空問、表、索引、段、視圖、存儲過程、觸發器等。數據庫的邏輯存儲結構(表空間等)決定 7數據庫的物理空問是如髓使用的,其關系示意圖如圖3所示

3 查詢優化的策略

3.1基于索引的優化

索引是數據庫中一個常用而重要的數據庫對象,而優化查詢重要的方法是建立索引,在關系數據庫系統的表上建立合適的索引,可以避免表掃描并減少因查詢而造成的i/o開銷,提高數據庫數據查詢的速度,改善數據庫性能。但是創建索引會增加系統的時間和空間的開銷。因此創建索引時必須要與實現應用系統的查詢需求密切結合,才能達到優化查詢的目的。

3.1.1建立必要的索引

判斷索引必要性的最終標準則是判斷這些索引是否對數據庫的工作效率有所幫助。在實際應用的過程中,應該為優化工作做以下幾點準備:

首先必須熟悉數據庫應用程序中所有的sql語句,并從中統計出常用且可能對性能有影響的部分語句;然后分析、歸納出作為where條件子句的字段及其各種組合方式;在這一基礎上可以初步判斷出哪些表的哪些字段應該建立索引。其次,必須熟悉應用程序,要了解哪些表是數據操作頻繁的表;哪些表經常與其他表進行連接;哪些表中的數據量可能很大;數據量大的表中各個字段的數據分布情況如何等等。對于滿足上述條件的這些表,必須重點關注。因為建立在這些表上的索引,將對sql語句的性能產生舉足輕重的影響。

3.1.2 使用索引的一些規則

在大型應用開發或表較大的情況下,使用索引可以極大減少數據庫讀寫次數,從而提高數據庫訪問速度,所以,索引在應用程序開發中經常被使用,但如何正確使用索引以發揮它的優勢需遵循以下原則:

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

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

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

使用索引尤其應當注意的是,在表連接操作時的驅動表/被驅動表的關系。oracle核心使用至底向上、從右至左的規則,如:from 子句中的最后一個表才是oracle用傲為驅動表的表;where子句的最后一個條件中所臺的列,它所屬的表才是最先被引用的表。總之,在from子句中,將表名按被驅動表-驅動表排序,在where子旬中,將條件語句按最少約束-最多約束排序。當指向被除行的索引所占空間超過總索引空間的20%時,就應刪除并重建索引,以節省空間,提高性能。

3.1.3 讓sql語句用上合理的索引

建立必要的索引之后,并非意味著數據庫性能的提高已經得到了令人滿意的結果,還要針對某些具體的sql語句進行分析:

首先,確定索引是否真正得到了使用。不發揮作用的索引,正如建好的樓宇無人居住,這是對資源的浪費。不允許有閑置的索引,應竭力讓那些仍沒有使用索引的sql語句發揮作用。

其次,判斷索引是否利用得合理。特別是一些復雜的sql語句,當其中where子句包含多個帶有索引的字段時,更應該注意索引的選擇是否合理。錯誤的索引不會使數據庫性能得到預期的提高,往往還會產生一些與愿望背道而馳的負面影響。下面,就如何使用合理索引的問題,引用實例進行說明

3.2 基于sql語句的優化 

由于oracle9i是關系型數據庫,sql語句是面向結果而不是面向過程的查詢語言,所以它包含一個基于開銷的優化程序(cost based optimizer)及一個基于規則的優化程序(rule based optimizer)來對用戶提交的及時查詢提供一個最佳的執行策略,這個執行策略就是執行這個查詢所需的一系列步驟。

3.2.1 查詢優化程序中sql語句的調整

要對查詢語句進行優化,一個簡單直接有效的方法是對sql語句進行調整,減少計算量,提高查詢的響應速度。對sql語句進行調整時要遵循下列原則:

首先,選擇運算盡可能先做,并在對同一個表進行多個選擇運算時,選擇影響較大的語句放在前面。

其次,在執行連接前對關系作適當的預處理,預處理的方法有兩種,在連接屬性上建立索引和對關系進行排序。

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

select  sname

from student

where exists(

select *

from student_grade

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

用連接查詢實現以上子查詢如下:

select sname

from student,student_grade

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

如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。

3.2.2書寫sql的一些經驗

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

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

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

(4)如果返回的結果集超過表記錄的40%以上,最好使用全表掃描,而不要使用索引,因為使用索引除了通過rowid對表進行操作外,還增加了對索引的操作。

(5)如果不打算使用某個索引。對于字符類型的字段a(有索引),可以用aii代替,對于數字類型子段b(有索引),使用b+0就可以使基于開銷的優化程序(cbo)不使用索引。

(6)盡量不要在含有索引的字段里面添加null,因為對null的判斷將不使用索引。

(7)使用復合索引時要注意索引列在where 中的位置,只有當復合索引中的第一列出現在where 中時,才會成功的使用該復合索引。

3.3其它優化手段

3.3.1使用存儲過程

存儲過程是sql語句和可選控制流語句的預編譯集合,以一個名稱存儲并作為一個單元處理,創建后便可轉換為可執行代碼,作為數據庫的一個對象存儲在數據庫中,存儲過程的代碼駐留在服務器端,因而執行時不需要將應用程序代碼向服務器端傳送,可以大大減輕網絡負載。同時,由于存儲過程已編譯為可執行代碼,不需要每次執行時進行分析和優化工作,只需要從高速緩沖存儲器中調用存儲過程已編譯好的二進制代碼來執行,從而減少了預處理所花費的時間,提高了系統的效率。另一方面,使用存儲過程還易于維護,且表的結構改變時,不影響客戶端的應用程序。

3.3.2避免相關子查詢

如果一個列的屬性名同時在主查詢和where子句查詢中出現,那么很可能當主查詢中的列值改變之后,子查詢必須重新查詢一次。查詢嵌套層次越深,效率越低,因此,應盡量避免子查詢,如果不可避免,那么要在子查詢中過濾掉盡可能多的行。

3.3.3避免或簡化排序

應當簡化或避免對大型表中的數據進行重復排序,如果利用索引能以適當的次序自動產生輸出時,優化器就能避免這種排序。以下是一些主要的影響因素:

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

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

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

為了避免不必要的排序,應正確增建索引,合理合并數據庫表,在必要時對表進行反規范化處理。如果排序不可避免,那么應當試圖簡化它,如縮小排序的列的范圍等。

4 結束語

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

參考文獻:

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

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

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

篇6

關鍵詞:Oracle數據庫;數據庫配置優化;SQL 語句優化

中圖分類號:TP312文獻標識碼:A文章編號: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 數據庫是現在使用最廣泛的大型數據庫之一,選用Oracle 作為數據庫的應用系統一般規模比較大, 需要處理的用戶數目較多,對于這樣的數據庫系統來說,效率是最重要的指標之一,在實際應用中,隨著系統數據庫中數據的增加,訪問量的加大,數據庫系統性能將會下降,數據庫的優化逐漸突顯出其重要作用。

1 影響Oracle 數據庫系統性能的因素

Oracle 數據庫系統性能受到數據庫運行的諸多方面的影響與制約,包括數據庫服務器性能、數據庫配置、網絡I/O、應用程序性能等。

1) 數據庫服務器性能

數據庫服務器是整個系統的核心,它的性能直接影響到整個系統的性能。數據庫服務器的性能主要取決于服務器上運行的操作系統以及服務器的硬件配置。

2) 數據庫配置

數據庫的配置情況直接決定了數據庫的性能優劣,是數據庫性能優化的核心。[1]主要包括內存區的設置、I/O 設置、參數設置、CPU 調整、回滾段設置以及碎片整理等。數據庫配置及其調整貫穿于數據庫設計、創建、運行的各個階段。

3) 網絡I/O

應用程序與數據庫服務器之間的交互需要通過網絡來進行,網絡的性能,特別是網絡I/O 對整個系統性能有重要的影響。

4) 應用程序實現

應用程序的實現方法對數據庫性能也有很大的影響,特別是SQL 語句的應用、數據庫連接方式的選擇、數據庫端程序設計以及數據庫對象的使用情況等,都影響系統的執行效率。

2 Oracle10g數據庫系統性能優化與調整策略

Oracle 數據庫的性能優化,可以從數據庫的體系結構、軟件結構、模式對象以及具體的業務和技術實現出發,進行統籌考慮。優化是有目的地更改系統的一個或多個組件,使其滿足一個或多個目標的過程。下面從幾個不同方面介紹Oracle 數據庫優化設計方案。

2.1 內存區調整與優化

Oracle 數據庫實例的內存結構主要由SGA 和PGA 構成,其中SGA 主要包括數據緩沖區、共享池、日志緩沖區,它們的分配是否合理直接決定了數據庫性能。

1) 數據緩沖區調整與優化。數據緩沖區用于存儲從數據庫中檢索的數據。如果用戶請求的數據在數據緩沖區中,則數據從數據緩沖區中直接返回給用戶,查詢時間短。如果用戶請求的數據不在數據緩沖區中,則先由服務器進程將數據從數據文件讀取到數據緩沖區,然后再從數據緩沖區中將數據返回給用戶,查詢時間延長。因此,保證盡量多的用戶請求數據在緩沖區中,避免讀取數據文件,可以大大提高數據的操作性能。[2]

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

3) 日志緩沖區調整與優化。日志緩沖區用于存放數據的修改信息。日志首先寫入日志緩沖區,在一定條件下由L GWR 進程將日志緩沖區的信息寫入日志文件。如果日志緩沖區已滿,但還沒有寫入日志文件,則日志寫入處于等待狀態,即日志緩沖區寫入失敗。過多的日志寫入失敗,說明日志緩沖區偏小,影響數據庫性能。

4) PGA 區調整與優化。PGA 區主要由私有會話區以及排序區構成。其中,排序區設置是否合理對數據庫性能有一定的影響。在Oracle 數據庫中,排序可以在PGA 的排序區或臨時表空間的臨時段中進行,由于使用臨時段時需要對磁盤進行I/O 操作,降低的排序的效率,因此Oracle 建議盡量在排序區中進行排序操作。

2.2 磁盤I/O 調整

對于數據庫系統來說,磁盤I/O 操作是數據庫性能最重要的方面,影響磁盤I/O性能的主要原因有磁盤競爭、I/O次數過多和數據塊空間的分配管理。減少磁盤I/O操作的最根本的方法就是利用高速緩存存放頻繁使用的數據信息,最小化磁盤I/O,降低Oracle 服務器查找和返回行所花費時間的最有效的方法之一就是利用索引、分區。

1) 索引Index 的優化設計。索引是數據庫中重要的數據結構,是優化的基礎,索引把表中的邏輯值映射到RowID,因此索引能進行快速定位數據的物理地址。索引必須充分利用才能加快數據庫訪問速度, 建立索引根本目的是提高查詢效率,利用索引行記錄定位,減少磁盤的讀寫次數,從而達到提高查詢速度的目的。一個建有合理索引的數據庫應用系統可能比一個沒有建立索引的數據庫應用系統效率高幾十倍,但并不是索引越多越好,在那些經常需要修改的數據列上建立索引,將導致系統性能的下降和存儲空間的浪費。

2) 使用Oracle 分區技術。分區將數據在物理上分隔開,不同分區的數據可以制定保存在處于不同磁盤上的數據文件里。這樣,當對這個表進行查詢時,只需要在表分區中進行掃描,而不必進行FTS(Full Table Scan,全表掃描),明顯縮短了查詢時間,另外處于不同磁盤的分區也將對這個表的數據傳輸分散在不同的磁盤I/O,一個精心設置的分區可以將數據傳輸對磁盤I/O競爭均勻地分散開。

2.3 回滾段設置

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

在Oracle 10g 中,可以使用撤銷表空間自動進行回滾段的管理,也可以手動進行回滾段的管理。在手工管理中,應該根據事務大小不同建立不同大小的回滾段,并分散到不同的表空間中。回滾段的數量與事務的數量有關,假設有n 個并發事務,當n < 16 時,需要建立4 個回滾段,當16 ≤ n < 32 時,需要建立8 個回滾段;當n ≥32 時,需要建立n/ 4 個回滾段[4] 。

2.4 碎片整理

由于數據庫中數據庫對象不斷變化以及數據操作不斷進行,導致磁盤碎片的產生。數據庫中碎片可分為表空間級、表級、索引級三類。

1) 表空間級碎片是由于段的建立、擴展和刪除引起的。可以通過重組表空間、執行AL TER TA2BL ESPACE . . . COAL ESCES 命令或先通過EXPORT程序將數據先導出,然后利用TRUNCATE 刪除表中數據,最后利用IMPORT 程序將數據導入的方法消除表空間級碎片。[5]

2) 表級碎片是由于行遷移或行鏈接導致數據存儲不連續而形成的。可以通過設置合適大小的數據塊以及PCTFREE、PCTUSED 參數以盡量避免表碎片的產生。通常在創建數據庫時,根據應用中記錄的大小來設置標準數據塊大小,保證其可以存儲一條完整的記錄。

3) 索引級碎片是由于索引太多、索引值變化頻繁而導致B - TREE 結構失衡、葉節點排序混亂引起的。可以通過減少表上索引數量,以及在數據變化頻率較低的列上創建索引或先進行數據的插入操作,然后再為表創建索引等方法,減少索引表的變化,降低索引碎片的產生。

2.5 CPU 性能調整

服務器的CPU 使用情況對數據庫的性能影響很大,調整CPU 可以更有效地利用服務器的各種資源, 提高數據庫的運行速度和效率。

1) 盡量利用多個CPU 處理器來執行事務處理和查詢CPU 的快速發展使得Oracle 越來越重視對多CPU 的并行技術的應用,只要可能,應該將數據庫服務器和應用程序的CPU 請求分開,或將CPU 請求從一個服務器移到另一個服務器。

2) 使用PQO 方式進行數據查詢PQO 方式不僅可以在多個CPU 間分配SQL 語句的請求處理,當所查詢的數據處于不同的磁盤時,一個個獨立的進程可以同時進行數據讀取。

2.6 SQL 語句優化

對數據庫進行的各種操作(包括添加、刪除、查詢等等)最終都是通過數據庫的SQL 語句來執行,因此SQL 語句的執行效率最終決定了Oracle 數據庫的性能高低, SQL 語句的書寫,通常應該遵循以下原則:

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

2) 對經常查詢的表創建合理索引, 對大表的查詢應在索引上進行。

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

4) 如果多個表經常被查詢,盡可能使其放在同一數據塊中。

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

6) 連接查詢時, 要有充分的連接條件。

3 結束語

Oracle10g數據庫系統性能優化與調整是一個復雜、繁瑣的系統工程,貫穿于數據庫系統開發的整個過程。數據庫系統的優化和調整,包括內存結構調整、磁盤I/O 調整、磁盤碎片調整以及CPU 性能調整等,直接決定了整個數據庫系統的性能,應該充分利用各種性能優化與調整策略進行反復的調整,以獲得系統的最優性能。

參考文獻:

[1] 藤永昌.Oracle數據庫管理員大全[M].北京:清華大學出版社,2004.

[2] 布萊拉,馬樹其.Oracle 10G 新特性學習指南[M].北京:電子工業出版社,2005.

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

篇7

【關鍵詞】性能優化;性能調整;Oracle數據庫

0 前言

計算機網絡領域應用較為普遍的信息管理工具就是數據庫系統,而Oracle數據庫是應用最為廣泛的信息數據管理系統,為計算機用戶帶來了極大的便利,為了達到數據庫系統能夠有效管理數據信息的目標,需要不斷調整優化Oracle數據庫性能,為其安全穩定運行提高保障,保證Oracle數據庫的持久發展。

1 Oracle數據庫簡介

1.1 Oracle數據庫概述

Oracle數據庫功能相當強大,起源較早,最開始出現的形式是關系型數據庫技術,可以實現對數據之間的關系的了解,并通過信息庫的構造將這些關系真實的反映出來。1984年Oracle數據庫實現了桌面計算機與關系數據庫的有效結合,隨著Oracle數據庫的不斷發展,其各項功能也不斷健全,并提供給企業類的、網絡工作組、高可靠性的、產業化的應用可靠的技術支撐,實現對關系數據的高效處理[1]。

1.2 Oracle數據庫主要特點

Oracle數據庫的主要特點有支持多用戶和大數據的高性能事務處理、硬件環境獨立、對完整性和安全性的良好控制,同時Oracle數據庫還遵守網絡通信協議、數據存取語言等相關的工業標準。另外Oracle數據庫支持分布式數據庫和分布處理,擁有可連接性、可兼容性、可移植性的特征。實現不同型號的計算機和不同操作系統下可以運行Oracle數據庫的需求,其自身獨有的特點滿足了不同用戶的不同要求,符合時展潮流。

2 Oracle數據庫性能調整

2.1 調整Oracle數據庫內存參數

Oracle數據庫內存參數的調整主要是針對其系統全局區進行的。其主要組成部分有日志緩沖區、數據緩沖區、共享池。系統全局區伴隨著環境的變化做出相應改變,在對其進行調整的過程中要考慮數據庫的運行模式、操作系統的內存容量、系統的類型是裸設備還是文件系統、物理內存的大小。系統全局區大約占數據庫物理內存的40%-60%,系統全局區大小直接受初始化參數的決定性影響,主要參數有WORK

AREASIZEPOLICY、LOGBBUFFER、SHARED_POOL_SIZE、DB_CACHE_

SIZE、DB_BLOCK_SIZE。WORKAREASIZEPOLICY參數的有MANUAL和AUTO兩種可選值,可根據實際情況進行選擇;LOGBBUFFER能夠指定Oracle數據庫內存空間的大小,即寫入到重做日志文件中的通過緩沖區寫入的重做日志;SHARED_POOL_SIZE對數據庫共享內存池其直接決定作用;DB_CACHE_SIZE對默認緩沖池的大小產生決定效用;DB_BLOCK_SIZE對創建數據庫每個模塊的尺寸產生直接影響。對這些參數進行調整有利于實現Oracle數據庫的內部優化,為Oracle數據庫的穩定運行提供可靠的后臺保障[2]。

2.2 調整Oracle數據庫操作系統資源

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

3 Oracle數據庫性能優化

3.1 優化Oracle數據庫索引

由于索引在用戶使用數據庫的過程中為用戶檢索提供了便利,所以Oracle要優化數據庫中的索引,索引出現問題直接影響Oracle數據庫的利用效率,為用戶的數據庫使用和查詢帶來不便。對Oracle數據庫索引進行優化主要有兩種方式,第一種是手動優化,在Oracle數據庫中通過手動方法對其索引進行優化主要依靠Oracle數據庫的圖形性能工具Oracle Enterprise Manager Console,在相應的Oracle數據庫中,通過用戶的登陸權限登陸到指定的索引界面,找出SYAPP數據庫中的位于索引區里的XTWHZDBMB_X功能菜單,點擊鼠標右鍵選擇功能菜單中的“移去”選項,將不正確的索引選中并刪除,或者將不符合數據庫實際信息內容的索引進行修改,及時更新數據庫的索引列表。第二種索引優化的方法是命令行方法,根據Oracle數據庫提供的相關SQL環境,利用特有的命令語句,在索引命令設置時輸入DROP INDEX XTWHZDBMB_X命令語句,利用該命令執行刪除不必要索引的的指令,或者輸入其他的命令將索引進行索引替換、更新命令執行語句,對Oracle數據庫的索引進行優化。通過這兩種方式實現Oracle數據庫索引的優化,從而保證Oracle數據庫的安全運行,為用戶數據利用和檢索查詢帶來便利。

3.2 優化Oracle數據庫內存

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

3.3 優化Oracle數據庫分區

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

4 結論

綜上所述,通過對Oracle數據庫性能調整與優化的分析研究,可以看出Oracle數據庫性能的調整和優化意義重大,完善Oracle數據庫各項功能有助于實現Oracle數據庫的穩定運行,在使用過程中不斷的進行優化檢查,及時對性能進行優化,實現Oracle數據庫的持久發展,推動數據庫技術的發展,為人們提供利用和服務。

【參考文獻】

篇8

【關鍵詞】MES;數據庫;中間件;優化

1.問題的提出

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

2.MES系統構成

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

3.服務器優化

寬厚板MES系統初期使用了兩臺服務器,由于資金限制只購買了兩臺服務器,一臺運行數據庫和應用,另外一臺作為測試和開發平臺使用。自2007年上線后,隨著生產的穩定運行,信息數據量逐步增加,服務器的負荷也越來越大,在使用高峰時CPU使用率為55~78%左右,明顯感覺到應用的遲滯不流暢,鑒于這種情況,我們在2010年申請又購置了兩臺服務器,把應用和數據庫徹底分離,新購服務器一臺替換原先的測試開發平臺,另一臺則作為系統數據庫備份。分開后的的數據庫服務器和應用服務器,其CPU在使用率上沒有超過50%,系統運行效率明顯得到提高。

4.TUXEDO優化

寬厚板MES系統在運行某些占用時間較長的應用時,多個人同時操作,會出現長時間的等待后,前臺畫面會報一個“后臺程序調用失敗”的錯誤,經過我們分析,原來在中間件TUXEDDO系統中每個服務SERVER默認只啟動了一個進程,這樣導致當多個請求同時發起時,一些請求會因為超時導致調用失敗,查找資料,我們發現服務SERVER可以啟動多個進程,假如原來某個SERVER所啟動的進程數較少,可適當增加它的進程數,以下所示:

"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

我們針對使用頻度較高的服務SERVER這樣更改之后,出現調用失敗的幾率大大降低。

5.前臺程序優化

當數據庫結構固定不變的情況下,前臺程序操作數據庫的優化核心目標是減少數據的返回量,主要措施是限制查詢條件來減少返回的數據量。由于系統代碼由多人完成,每個人的水平和編程習慣不同,造成我們后期使用中發現大量性能上的問題,對此我們做了大量修正。

比如:沒有采取后臺分頁技術,直接在返回全部數據后再在前臺上做分頁,這樣導致數據庫和網絡負荷的增加,效率低下,操作時間一般在幾十秒以上,通過修改后操作時間基本是原時間的十分之一左右。還有就是經常使用的一些數據字典小表,每次操作都要從后臺再獲取一遍,效率較低,改動的辦法是當進入該UI畫面時只獲取一次,這樣也減少了系統負荷。另外針對一些多個數據表關聯,大數據量操作的應用,做了業務拆分,分畫面分步驟實現。

總之,前臺優化總體把握就是減少數據量的操作和訪問的原則,在這個前提下的優化工作基本上難度不大,且效果顯著。

6.數據庫SQL優化

系統后臺程序的優化工作主要是SQL語句的優化,從獲取的大量資料來看,SQL語句的優化是數據庫最有成效的一個手段,因此SQL語句的影響非常大,系統往往因為一個小的SQL語句不夠優化,導致數據庫性能急劇下降,應用服務器斷連、超時,嚴重影響業務的正常運行。寬厚板MES系統中發生多次性能危機中,90%都是SQl語句使用不當造成。

這里我們借助使用第三方Oracle工具TOAD,進行系統問題的查找定位,具體方法如下:

首先通過數據庫系統性能的監控,定位出現性能危機時的準確時間。

根據時間段通過導出ORACLE的AWR報告,分析其中I/O、CPU占用較高的SQL語句

通過TOAD中執行計劃具體分析SQL語句的cost,cost的高低決定數據庫執行的效率,cost越小效率越高。

使用ORACLE中SQL優化功能建議,結合實際情況,對后臺程序進行優化。

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

6.1 建立必要的索引

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

建立索引常用的規則如下:

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

經常與其他表進行連接的表,在連接字段上應該建立索引;

經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;

索引應該建在選擇性高的字段上;

索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;

復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:

頻繁進行數據操作的表,不要建立太多的索引;

刪除無用的索引,避免對執行計劃造成負面影響;

由于許多索引未建,導致全表掃描,尤其當數據量大時,基本上查詢時間需要幾分鐘左右都不一定完成,所以,建立合適的索引非常重要。

6.2 提高使用索引的效率

雖然建立了索引,但實際編程過程中,不同的SQL語句的寫法,會導致索引無效。

避免對列的操作,任何對列的操作都可能導致全表掃描,這里所謂的操作包括數據庫函數、計算表達式等等,查詢時要盡可能將操作移至等式的右邊,甚至去掉函數。

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

盡量去掉“IN”、“OR”,對含有“N”、“OR”的Where子句常會使用工作表,使索引失效;如果不產生大量重復值,可以考慮把子句拆開;拆開的子句中應該包含索引。然后再做一個簡單的加法,與原來的SQL語句相比,查詢速度更快。

分解復雜查詢,用常量代替變量,對于復雜的Where條件組合,Where中含有多個帶索引的字段,考慮用IF語句分情況進行討論;同時,去掉不必要的外來參數條件,減低復雜度,以便在不同情況下用不同字段上的索引。

like子句盡量前端匹配,因為like參數使用的非常頻繁,因此如果能夠對like子句使用索引,將很高的提高查詢的效率。在做like查詢時,應該盡量使查詢的匹配端是具體值,例如使用like‘512%’。

應盡量避免在where子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。

在使用索引字段作為條件時,如果該索引是復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,并且應盡可能的,讓字段順序與索引順序相一致。

索引并不是越多越好,索引固然可以提高相應的select的效率,但同時也降低了insert及update的效率,因為insert或update時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。

任何地方都不要使用select*from t,用具體的字段列表代替“*”,數據的提取速度就會有相應的提升。

盡量避免大事務操作,提高系統并發能力。

以上的方法,是完全可以相互結合同時運用的。而且各種方法之間相互影響,緊密聯系。這種聯系既存在一致性,也可能帶來沖突,當沖突發生時,需要根據實際情況進行選擇,沒有固定的模式。

7.數據庫備份系統

寬厚板MES系統運行到目前已經有6年多了,數據隨著時間不斷增長,部分數據表的量已達幾千萬,歷史數據的查詢使用由于數據量大會直接影響系統的正常穩定運行,原系統沒有歷史數據導出備份功能,因此,做為優化系統性能重要一部分工作內容,我們自主開發了歷史數據導出備份系統,將其中的歷史數據,按照合同關系的邏輯,從訂單開始到發貨結束進行打包歸檔,減輕在線系統的負荷,目前備份系統已經投入運行。

8.結束語

應用系統的性能調整與優化是一個系統工程,涉及的方面很多,是一個長期不懈、不斷比較分析和調整的過程,需要全面系統地規劃考慮才能對數據庫運行狀況做出一個綜合評估。只有深入領會和掌握Oracle數據庫系統所提供的強大功能,正確觀察和分析系統運行中提供的各種信息,充分結合實際應用特點,才能合理制定出良好的優化策略,目前,本系統數據庫經過長期的研究開發、推敲測試和調整優化,數據庫性能已有較大的提高,較好的滿足了本系統眾多軟件程序的訪問使用,本系統數據庫表現出了較高的穩定性和較好的使用性能,從而驗證了所述采取的若干優化措施是切實可行有效的。

當然存在的問題也不少,有一部分應用由于業務邏輯復雜,優化有一定的難度,光從SQL語句單一優化已經提高不了多少效率,將來只能從業務邏輯拆分,簡化分步流程來實現優化的目的。

參考文獻

[1]王勇.基于SQL數據庫的性能優化問題分析[J].電腦知識與技術,2008,15:1004-1007.

[2]呂華,杜忠軍.數據庫性能優化[J].計算機應用,2003, 23(06).

篇9

關鍵詞:中文期刊,全文數據庫,數據庫系統

 

引言在追求快速、方便的網絡時代,只提供題錄、文摘數據庫已不能滿足讀者的要求,全文數據庫的建設是今后發展的方向。許多文獻數據庫都是通過網絡和提供檢索的,面對的是沒有檢索經驗的用戶和巨大的文獻處理的難題,如何建立一個有價值的、用戶滿意的、實用的全文數據庫就成為廣大圖書情報人員深入研究的課題。

全文數據庫除提供一般題錄數據庫的題名、分類等檢索途徑外,還提供全文檢索。全文檢索是利用了文獻中的自然語言作為一個檢索入口,這種自然語言的檢索方式比較符合用戶的易于利用的需求。

中文與西方國家的語言不同,由大量獨立漢字組成,因此在建設中文全文數據庫時要注意數據庫系統、編碼與開發工具的選擇。

1 全文數據庫系統軟件基本模塊的設計構想由于全文數據庫是非結構化的數據,因此全文數據庫的結構(記錄、字段、子字段等)的劃分及長度的確定,往往隨文獻本身的內容特點而彼此有很大的差異。與之相對應,全文數據庫系統的軟件及其功能模塊也會有很大的不同。作為功能完備的全文數據庫系統,應該具有以下的結構特點及全部或大部分功能模塊。

1.1 數據庫結構定義模塊這一模塊主要是確定庫的記錄、字段(包括重復字段或子字段),確定相應記錄或字段的索引方式。字段設計之目的在于:增加正文之外的信息項,增加檢索的切入點;提高檢索的查準性,借以進行字段限定檢索,并提高檢索速度;索引方式的確定,以字段為單位。索引方式有四種:全字段作為一個完整單位作索引;以< >標引符號內字符串作索引;以%分割的重復字段作索引;每個字作索引(單字索引,主要用于正文字段)。在一條記錄中,字段的個數應不限,一般最多能達到數百個字段。

1.2 數據預處理模塊由于全文數據庫的數據基本上來源于外部數據,對不同格式的數據處理采用不同的方法。

電子排版文本。這種文本中含有排版符號。如果全文數據庫建立在這種排版軟件基礎上,則文本無需加工。但多數全文數據庫系統并非建立在這種排版文本基礎上的,因此有必要通過軟件一次全部刪除排版符號,同時應解決由于刪除排版符號而帶來的問題,如補字、數學公式、上下標等等,使之成為完整的純文本文件。

網上下載的PDF文件、網頁文件、光盤上記錄的某些特殊格式的數據。如果全文系統采用純文本格式,則需對其轉換。

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

文本預處理還包括數據的批式標引。這是建立全文數據庫之前特別是數據裝載之前,主要是利用文字處理軟件和專門自動標引軟件對數據進行的標引,或按自己建立的標引詞表,對文本進行的掃描標引。

1.3 裝庫模塊裝庫就是將數據預處理后的文本數據導入已有的庫結構之中。

有的全文庫要求將數據轉換成ISO2709(CNMARC)格式才能裝庫;有時可將有一定標志的文本格式裝庫;有的則將文本按原格式導入庫結構;有的不實際裝庫,只在系統中建立指向文本文件地址的指針。可以根據具體情況選擇裝庫方式,但最后一種方法不推薦使用。

1.4 標引模塊全文庫正文的單字索引,不必建立,因為系統有識別每個漢字和其他符號或外文字串索引功能。

在以單字為基礎的索引中,以布爾邏輯為手段進行檢索,誤檢率極高,需以位置檢索手段進行檢索,用以提高查準率。以單字為基礎的索引的優點在于不需要人工標引,可實現索引的自動化,從而大大提高了建庫的效率。但單字索引也存在明顯的缺點,即同義詞、相關詞無法控制,解決辦法可以通過在檢索匹配模塊設置后控詞表進行后控檢索。

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

1.6用戶輸入檢索式模塊這一模塊是全文數據庫系統與用戶之間最直接的接口,也是決定檢索結果好壞的關鍵。全文數據庫的使用者往往缺乏系統檢索經驗,要查到一些信息容易,但查全、查準信息較難。全文庫檢索主要是使用自然語言,缺乏詞匯的控制,因此隨意性較大,檢索效果的評價也缺乏明顯的驗證標準。要引導用戶正確提出檢索式,一般來說有三種基本的引導用戶的模式:

詢問表方式。即在用戶檢索時,系統提出一個詢問表格,檢索項目由用戶填寫。這些項目如:欲檢索的篇名、作者姓名、關鍵詞、分類號、單字等等。不必要求用戶每項都填,即使只填一、二項也可。詢問表方式引導用戶表達自己信息需求的方式,對無檢索經驗者較為有用。

詞典式檢索。此方法適用于一般用戶。按詞典檢索時,應能允許用戶從顯示詞表中用光標選詞,并且可選一個以上的詞,被選中的詞以“或”方式連結。如果讀者要用“與”“非”方式,應能從表下所附的AND、NOT中點出這些運算符,使之形成檢索式。總的來說,其目標應該是減少用戶自己輸入漢字和運算符,以提高效率并減輕其負擔。

命令方式。這是供有一定檢索經驗的用戶使用的,功能最為強大。命令方式主要是布爾運算、位置運算、括號嵌套、截斷符號、字段限定等。

1.7 用戶檢索分析處理模塊系統對來自屏幕的用戶檢索式加以處理,使之形成便于運算的檢索方式。論文參考。對于復雜的檢索式,需要進行逆波蘭變換,確定各檢索項的運算次序。對詢問表的檢索式也需根據用戶所填數據形成檢索式。對標引詞表顯示中用戶光標指定詞加以收集,并形成檢索式。

在這一模塊中,系統還應該檢查用戶提問檢索式是否有錯誤(如左右括號不配對,數個運算符連用,字段文字常量輸錯等),如發現錯誤,應向用戶做出提示,并給出修改建議。

1.8 檢索匹配模塊這一模塊與一般檢索系統相同,但作為全文數據庫來說還應具備下列功能:

較強的位置檢索功能。由于全文庫往往對正文字段單字索引,因此對單字的布爾檢索不大適用,而應以位置檢索為主。位置檢索時,應對緊密相鄰的幾個字采用連寫方法,不必插入位置運算符。或者說,字與字之間默認的運算符是彼此緊密相鄰。

全文庫或指定集合中的順序掃描匹配檢索。當對正文作單字索引的情況下,允許用戶使用這種掃描匹配進行檢索。用戶只需輸出一個字符串(詞或短語),計算機就開始對全庫或指定集合進行檢索匹配。

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

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

如果服務器端操作系統為Windows,則建議選擇SQL Server作為數據庫系統。SQL Server是一個全面的數據庫系統,使用集成的商業智能(BI)工具提供了企業級的數據管理。SQL Server數據庫引擎為關系型數據和結構化數據提供了更安全可靠的存儲功能,可以構建和管理用于業務的高可用和高性能的數據應用程序。

2.2 開發工具的選擇如果系統需要跨平臺部署,在選擇Oracle或MySQL數據庫系統的基礎上,建議選擇Java為開發工具。Java是一種簡單的,面向對象的,分布式的,解釋型的,健壯安全的,結構中立的,可移植的,性能優異、多線程的動態語言。如果對跨平臺沒有要求,并選擇SQL Server數據庫系統,則建議選擇Visual Studio為開發工具。Visual Studio 是微軟公司推出的開發環境。是目前最流行的 Windows 平臺應用程序開發環境。目前已經開發到 9.0 版本,也就是 Visual Studio 2008。Visual Studio 可以用來創建 Windows 平臺下的 Windows 應用程序和網絡應用程序,也可以用來創建網絡服務、智能設備應用程序和Office 插件。

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

GB2312:簡體中文編碼,一個漢字占用2字節,在大陸是主要編碼方式。當文章中包含繁體中文、日文、韓文等等時,這些內容可能無法被正確編碼。

BIG5:繁體中文編碼。主要在臺灣地區采用。

GBK:支持簡體及繁體中文,但對其它國家非拉丁字母語言還是有問題。論文參考。

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

因此,為了保證全文數據的存儲和顯示不出現問題,建議選擇UTF-8為數據庫系統編碼,應該在裝庫操作前對所有內容進行編碼轉換,統一轉換成UTF-8編碼。

結語全文數據庫以其內容完整、直接提供一次文獻等特點,越來越受到人們的關注。全文數據庫給網絡環境下的信息交流提供了更為方便快捷的途徑。在全文檢索技術日趨成熟的條件下,全文數據庫在供讀者利用方面表現出的優勢是其它類型數據庫所無法替代的。因此,對中文全文數據庫的設計進行研究,是信息服務發展的必然要求。

參考文獻[1]秦劍.我國數據庫建設的思考與展望[J]河南圖書館學刊,2002,(04).

[2]程文艷.數字圖書館——數字中國的開路先鋒[J]情報科學,2002,(06).

[3]楊麗兵.淺談中文過刊編目數據庫建設工作[J]農業圖書情報學刊,2004,(01).

[4]何凱文.我國高校圖書館數字資源建設的問題及發展途徑[J]圖書館建設,2004,(05).

[5]曾莉紅.基于點擊率的全文數據庫檢索結果組織方法探討[J]情報雜志,2007,(06).

篇10

關鍵詞:Oracle數據庫;索引;硬解析

引言

Oracle數據庫以支持大數據量、多用戶、高并發事務處理等優勢,越來越多的被應用在大型企業,如電信、銀行、電力等部門,隨著高訪問量所帶來的壓力逐漸增大,系統會出現吞吐量低,響應時間長等性能問題,為了解決這個問題有必要對數據庫進行優化,數據庫的優化可從兩方面進行分析研究,制定出優化策略。

1 影響Oracle數據庫系統性能的因素

Oracle數據庫性能問題受到多方面因素影響,包括硬件環境,網絡I/O,應用程序規范,數據庫參數配置,行遷移等

(1)數據庫服務器硬件環境:cpu,內存,網絡傳輸狀況等方面均會影響oracle的性能。

(2)數據庫參數配置:Oracle數據庫為用戶提供了大量的參數配置,根據具體的應用環境,調整參數配置,可以使數據庫達到更優,相反,錯誤的參數配置可能令數據庫性能低下。

(3)網絡I/O:計算機的輸入輸出(I/O)是很耗時的系統行為,I/O優化就是通過一定的措施減少I/O消耗時間。

(4)應用程序的實現:對于程序員而言,不合理的sql語句書寫直接影響到Oracle數據庫的性能,且后期更改難度大。如書寫sql語句不使用綁定變量,會使數據庫出現大量的硬解析,從而影響數據庫性能。

(5)行遷移:表中存在的數據,在update操作過程中,行可能會變長,此時,行會使用數據塊內的剩余空間,當數據塊內沒有剩余空間的時候,數據會選擇新的數據塊進行存放,行頭會保留在原數據塊中,指針指向新的數據塊內的行,造成讀取數據的時候產生兩次I/O,下降了數據庫的性能。

2 數據庫優化

2.1 內存區調整

(1)在Oracle 10g以及以上版本,提供了內存的自動管理,Oracle會根據應用的特點和服務器本身環境自動調整內存,SGA_TARGET參數就決定了是否使用SGA自動管理,該參數不為0時為自動管理,該參數為動態管理。

(2)將數據常駐內存:在生產數據庫中,有些經常被訪問的小表,可以將其常駐在內存中,以避免對該表訪問時頻繁產生磁盤I/O,以空間換時間,使響應速度增大。具體方法:

SQL> alter system set db_keep_cache_size = 200M;//開辟出200M的常駐區域;

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

2.2 磁盤I/O調整

(1)分開存儲數據文件和索引文件。Oracle數據庫在提取數據的時候會去索引和數據文件里讀數據,將這兩個文件分開存放在不同的硬盤上可以增加讀取速度以提高性能。

(2)日志文件的存放位置。日志文件寫操作比較頻繁,可以選擇存儲在固態硬盤等高速存儲上。

(3)使用分區來避免磁盤爭用。當一個表很大的時候,如:1GB(具體和環境有關),可以考慮分區,把一個表的分區存放在不同的磁盤上,吞吐量可以大大增加。分區的類型有多種,如范圍分區、哈希分區、組合分區、列表分區。

2.3 回滾段設置

回滾段保存著數據更新的前映像,當事物回滾時會用到此前映像,原則上講,建議每個回滾段能同時進行4個事物處理,但也應該根據系統需求來設定回滾段的數目。

2.4 碎片整理

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

SQL> ALTER TABLE T1 SHRINK SPACE;//進行空間回收

2.5 處理行遷移

利用移動表的存放位置來消除行遷移,操作語句為:

SQL> ALTER TABLE T1 MOVE TABLESPACE tablespace_name;

此操作會使T1表在數據庫中重新碼放,但是索引會失效,注意要重建索引。

2.6 綁定變量

移動渠道管理系統是OLTP(On-Line Transaction Processing聯機事務處理)系統,綁定變量是OLTP很受關注的一個技術點,OLTP數據庫系統中大量的sql語句并發執行,速度飛快,內存效率極高,綁定變量后會減少大量的sql語句解析消耗,從而減少數據庫壓力。

2.7 索引的建立與維護

索引是將無序的數據有序化,這樣可以在查詢數據的時候減少數據塊的讀取,實現快速定位數據。數據庫自動維護索引,但隨著大量的增刪改操作,索引會產生許多空洞,可以采用合并或重建索引的方法進行優化,以提高訪問速度。操作命令為:

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

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

合并并不釋放索引段所擁有的空間,不處理正在變化的行,重建只能在沒有事物的情況下進行,如果有未提交的事物,則會報錯。

3 Oracle常用優化工具

(1)Oracle數據庫數據字典和動態性能視圖,Oracle動態性能視圖能反映出Oracle動態運行情況,對于數據庫的性能調整很有幫助。

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

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

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

4 結束語

文章針對移動渠道管理系統數據庫性能調整的實踐經驗,總結了導致數據庫性能下降的原因和優化方法,數據庫性能問題在最近幾年越來越受到DBA的關注,只有在實踐中反復實驗調整,才能使數據庫系統獲得最優性能。

參考文獻

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