調(diào)整ORACLE性能性能調(diào)優(yōu)篇---Oracle基于CS的性能_第1頁
調(diào)整ORACLE性能性能調(diào)優(yōu)篇---Oracle基于CS的性能_第2頁
調(diào)整ORACLE性能性能調(diào)優(yōu)篇---Oracle基于CS的性能_第3頁
調(diào)整ORACLE性能性能調(diào)優(yōu)篇---Oracle基于CS的性能_第4頁
調(diào)整ORACLE性能性能調(diào)優(yōu)篇---Oracle基于CS的性能_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ORACLE性能調(diào)優(yōu)篇-Oracle基于C/S的性能調(diào)整通過探討和研究Oracle服務(wù)器和Client/Server的特點(diǎn)和原理,闡述了提高、調(diào)整Oracle應(yīng)用系統(tǒng)性能的一些原則和方法。關(guān)鍵詞:Oracle;客戶/服務(wù)器;系統(tǒng)全程區(qū);網(wǎng)絡(luò)I/O;回滾段Oracle Performance Tunign Based on Client/ServerZhang Dong Wang Hong Yao Yaowen【Abstract】In this paper discuses and studies the characteristic of Oracle service and theory a

2、bout Oracle service based on Client/Server.It also gives the way to improve and ture the performance of Oracle based on Client/Server【Key words】Oracle;Cclient/Server;SGA;Network I/O;Rollback SegmentOracle 數(shù)據(jù)庫廣泛應(yīng)用在社會的各個領(lǐng)域,特別是在Client/Server模式的應(yīng)用,但是應(yīng)用開發(fā)者往往碰到整個系統(tǒng)的性能隨著數(shù)據(jù)量的增大顯著下降的問題,為了解決這個問題,從以下幾個方面:數(shù)據(jù)庫服務(wù)

3、器、網(wǎng)絡(luò)I/O、應(yīng)用程序等對整個系統(tǒng)加以調(diào)整,充分發(fā)揮Oracle的效能,提高整個系統(tǒng)的性能。1 調(diào)整數(shù)據(jù)庫服務(wù)器的性能Oracle數(shù)據(jù)庫服務(wù)器是整個系統(tǒng)的核心,它的性能高低直接影響整個系統(tǒng)的性能,為了調(diào)整Oracle數(shù)據(jù)庫服務(wù)器的性能,主要從以下幾個方面考慮:1.1 調(diào)整操作系統(tǒng)以適合Oracle數(shù)據(jù)庫服務(wù)器運(yùn)行Oracle數(shù)據(jù)庫服務(wù)器很大程度上依賴于運(yùn)行服務(wù)器的操作系統(tǒng),如果操作系統(tǒng)不能提供最好性能,那么無論如何調(diào)整,Oracle數(shù)據(jù)庫服務(wù)器也無法發(fā)揮其應(yīng)有的性能。據(jù)已有計算機(jī)可用資源, 規(guī)劃分配給Oracle服務(wù)器資源原則是:盡可能使Oracle服務(wù)器使用資源最大化,特別在Client/

4、Server中盡量讓服務(wù)器上所有資源都來運(yùn)行Oracle服務(wù)。多數(shù)操作系統(tǒng)都用虛存來模擬計算機(jī)上更大的內(nèi)存,它實(shí)際上是硬盤上的一定的磁盤空間。當(dāng)實(shí)際的內(nèi)存空間不能滿足應(yīng)用軟件的要求時,操作系統(tǒng)就將用這部分的磁盤空間對內(nèi)存中的信息進(jìn)行頁面替換,這將引起大量的磁盤I/O操作,使整個服務(wù)器的性能下降。為了避免過多地使用虛存,應(yīng)加大計算機(jī)的內(nèi)存。不要在操作系統(tǒng)中調(diào)整Oracle進(jìn)程的優(yōu)先級,因?yàn)樵贠racle數(shù)據(jù)庫系統(tǒng)中,所有的后臺和前臺數(shù)據(jù)庫服務(wù)器進(jìn)程執(zhí)行的是同等重要的工作,需要同等的優(yōu)先級。所以在安裝時,讓所有的數(shù)據(jù)庫服務(wù)器進(jìn)程都使用缺省的優(yōu)先級運(yùn)行。1.2 調(diào)整內(nèi)存分配Oracle數(shù)據(jù)庫服務(wù)器保

5、留3個基本的內(nèi)存高速緩存,分別對應(yīng)3種不同類型的數(shù)據(jù):庫高速緩存,字典高速緩存和緩沖區(qū)高速緩存。庫高速緩存和字典高速緩存一起構(gòu)成共享池,共享池再加上緩沖區(qū)高速緩存便構(gòu)成了系統(tǒng)全程區(qū)(SGA。SGA是對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行快速訪問的一個系統(tǒng)全程區(qū),若SGA本身需要頻繁地進(jìn)行釋放、分配,則不能達(dá)到快速訪問數(shù)據(jù)的目的,因此應(yīng)把SGA放在主存中,不要放在虛擬內(nèi)存中。內(nèi)存的調(diào)整主要是指調(diào)整組成SGA的內(nèi)存結(jié)構(gòu)的大小來提高系統(tǒng)性能,由于Oracle數(shù)據(jù)庫服務(wù)器的內(nèi)存結(jié)構(gòu)需求與應(yīng)用密切相關(guān),所以內(nèi)存結(jié)構(gòu)的調(diào)整應(yīng)在磁盤I/O調(diào)整之前進(jìn)行。庫緩沖區(qū)中包含私用和共享SQL和PL/SQL區(qū),通過比較庫緩沖區(qū)的命中率決定它

6、的大小。要調(diào)整庫緩沖區(qū),必須首先了解該庫緩沖區(qū)的活動情況,庫緩沖區(qū)的活動統(tǒng)計信息保留在動態(tài)性能表v$librarycache 數(shù)據(jù)字典中,可通過查詢該表來了解其活動情況,以決定如何調(diào)整。Select sum(pins,sum(reloads from v$librarycache;Pins列給出SQL語句,PL/SQL塊及被訪問對象定義的總次數(shù);Reloads列給出SQL 和PL/SQL塊的隱式分析或?qū)ο蠖x重裝載時在庫程序緩沖區(qū)中發(fā)生的錯誤。如果sum(pins/sum(reloads 0,則庫緩沖區(qū)的命中率合適;若sum(pins/sum(reloads>1, 則需調(diào)整初始化參數(shù)sh

7、ared_pool_size來重新調(diào)整分配給共享池的內(nèi)存量。數(shù)據(jù)字典緩沖區(qū)包含了有關(guān)數(shù)據(jù)庫的結(jié)構(gòu)、用戶、實(shí)體信息。數(shù)據(jù)字典的命中率,對系統(tǒng)性能影響極大。數(shù)據(jù)字典緩沖區(qū)的使用情況記錄在動態(tài)性能表v$librarycache中,可通過查詢該表來了解其活動情況,以決定如何調(diào)整。Select sum(gets,sum(getmisses from v$rowcache;Gets列是對相應(yīng)項(xiàng)請求次數(shù)的統(tǒng)計;Getmisses 列是引起緩沖區(qū)出錯的數(shù)據(jù)的請求次數(shù)。對于頻繁訪問的數(shù)據(jù)字典緩沖區(qū),sum(getmisses/sum(gets并發(fā)事物(n回滾段數(shù)n2 調(diào)整Client/Server 模式下的網(wǎng)絡(luò)

8、I/OClient/Server環(huán)境中的應(yīng)用處理是分布在客戶應(yīng)用程序和數(shù)據(jù)庫服務(wù)程序之間的。在Client/Server環(huán)境中Client與Server之間的網(wǎng)絡(luò)I/O是整個系統(tǒng)性能提高的瓶頸,一個客戶應(yīng)用程序引起的網(wǎng)絡(luò)I/O越少,應(yīng)用及整個系統(tǒng)的性能越好。減少網(wǎng)絡(luò)I/O的最重要的一條原則:將應(yīng)用邏輯集中在數(shù)據(jù)庫服務(wù)器中。2.1 使用Oracle數(shù)據(jù)庫的完整約束性當(dāng)為應(yīng)用建表時,應(yīng)當(dāng)為一些有特殊要求的數(shù)據(jù)加上適當(dāng)?shù)耐暾约s束,這樣就能實(shí)現(xiàn)由數(shù)據(jù)庫本身而不是應(yīng)用程序來約束數(shù)據(jù)符合一定的條件。數(shù)據(jù)庫服務(wù)器端的完整約束的執(zhí)行操作是在比SQL語句級別更低的系統(tǒng)機(jī)制上優(yōu)化,它與客戶端無關(guān),只在服務(wù)器中運(yùn)

9、行,不需在Client 端和Server端之間傳遞SQL 語句,有效地減輕網(wǎng)絡(luò)I/O負(fù)擔(dān)。2.2 使用數(shù)據(jù)庫觸發(fā)器完整約束性只能實(shí)現(xiàn)一些較簡單的數(shù)據(jù)約束條件,對一些較復(fù)雜的事物處理規(guī)則就無能為力,這時最好不要在應(yīng)用程序中實(shí)施復(fù)雜的程序控制,而是應(yīng)當(dāng)采用數(shù)據(jù)庫觸發(fā)器來實(shí)施復(fù)雜的事物規(guī)則。數(shù)據(jù)庫觸發(fā)器能實(shí)現(xiàn)由數(shù)據(jù)庫本身,而不是應(yīng)用程序,來約束數(shù)據(jù)符合復(fù)雜的事物處理規(guī)則,并且容易創(chuàng)建,便于管理,避免大量的網(wǎng)絡(luò)I/O。例如:將當(dāng)前表A中成為歷史的記錄從A表中轉(zhuǎn)儲到歷史表B中,表示為Lsbs。在應(yīng)用程序中實(shí)現(xiàn):用數(shù)據(jù)庫觸發(fā)器實(shí)現(xiàn):Beign Create trigger delete1Update A

10、set lsbs='T'After update of lsbs on AInsert into B For each rowSelect * from A where lsbs='T' Insert into BDelete A where lsbs='T'select * from A where :new.lsbs='T'End;Delete A where :new.lsbs='T'End delete1;在應(yīng)用程序中實(shí)現(xiàn)時,所有的SQL命令請求傳送的數(shù)據(jù)都要通過網(wǎng)絡(luò)在Client端和Server端進(jìn)行交換

11、,而不像數(shù)據(jù)庫觸發(fā)器一樣,SQL本身在Server端,不需要通過網(wǎng)絡(luò)傳輸數(shù)據(jù)。當(dāng)進(jìn)行操作的數(shù)據(jù)量相當(dāng)大時,并且多個用戶同時操作時,通過在應(yīng)用程序中實(shí)現(xiàn)復(fù)雜的控制,必將增大網(wǎng)絡(luò)I/O的負(fù)荷,使整個系統(tǒng)的性能降低,而用數(shù)據(jù)庫觸發(fā)器能完全避免這種情況發(fā)生。2.3 使用存儲過程、存儲函數(shù)和包Oracle的存儲過程和存儲函數(shù)是命名的能完成一定功能并且存儲在Server端的PL/SQL的集合。包是一種把有關(guān)的過程和函數(shù)組織封裝成一個數(shù)據(jù)庫程序單元的方法。它們相對于應(yīng)用程序的過程、函數(shù)而言,把SQL命令存儲在Server端。使用存儲過程和存儲函數(shù),應(yīng)用程序不必再包含多個網(wǎng)絡(luò)操作的SQL語句去執(zhí)行數(shù)據(jù)庫服務(wù)器

12、操作,而是簡單調(diào)用存儲過程和存儲函數(shù),在網(wǎng)絡(luò)上傳輸?shù)闹皇钦{(diào)用過程的名字和輸出結(jié)果,這樣就可減少大量的網(wǎng)絡(luò)I/O。例如:基表A、B的定義:name char(20;detail char(10;A表100萬記錄,應(yīng)用程序?qū)幕鞟 中檢索detail列符合給出條件的記錄,并將之插入基表B。DeclareCursor cursor1 is select*from A;poin cursor1%type;con1 number(2;res1 char(4='abcd'Begin Insert into B values(,poin.detail;end if;For

13、 poin in cursor1 loop End loop;End loop;For con1 in 1.7 loop Commit;If substr(poin.detail ,con1,4=res1 then End;如果在Developer/2000 From中按鈕觸發(fā)器直接用PL/SQL實(shí)現(xiàn)和把它改寫為一個Oracle存儲過程,然后在From中調(diào)用此過程實(shí)現(xiàn)比較,后者性能顯著提高。在考慮使用上述3種方法時:首先考慮使用完整約束性。對于數(shù)據(jù)庫觸發(fā)器和存儲過程,如果需要所有訪問數(shù)據(jù)庫的程序自動實(shí)施一定規(guī)則或檢查,那么使用數(shù)據(jù)庫觸發(fā)器;如果只需對少數(shù)的程序?qū)嵤┮欢ǖ囊?guī)則或檢查,則可創(chuàng)建一個

14、過程,讓有關(guān)程序調(diào)用這個過程。3 應(yīng)用程序的調(diào)整3.1 SQL語句的優(yōu)化SQL語句的執(zhí)行速度,可以受很多因素的影響而變化。但主要的影響因素是:驅(qū)動表、執(zhí)行操作的先后順序和索引的運(yùn)用。可以由很多不同的方法間接地改變這些因素,以達(dá)到最優(yōu)的執(zhí)行速度。這里主要探討當(dāng)對多個表進(jìn)行連接查詢時應(yīng)遵循的優(yōu)化原則:(1 用于連接的子句的列應(yīng)被索引、在Where子句中應(yīng)盡量利用索引,而不是避開索引。(2 連接操作應(yīng)從返回較少行上驅(qū)動。(3 如果所連接的表A和B,A表長度遠(yuǎn)遠(yuǎn)大于B表,建議從較大的A表上驅(qū)動。(4 如果Where子句中含有選擇性條件,Where No=20,將最具有選擇性部分放在表達(dá)式最后。(5 如

15、果只有一個表有索引,另一表無索引,無索引的表通常作為驅(qū)動表。如A表的No列以被索引,而B表的No 列沒被索引,則應(yīng)當(dāng)B表作為驅(qū)動表,A表作為被驅(qū)動表。(6 若用于連接的列和Where子句中其他選擇條件列均有索引,則按各個索引對查詢的有效性和選擇性分別定出級別,結(jié)合表中具體數(shù)據(jù)構(gòu)成情況,從中選出優(yōu)化路徑,一般需要考慮:子句中哪些列可以使用索引、哪些索引具有唯一性及被查詢表行數(shù)目等。3.2 建立和使用視圖、索引利用視圖可以將基表中的列或行進(jìn)行裁減、隱藏一部分?jǐn)?shù)據(jù),并且能夠?qū)⑸婕暗蕉鄠€表的復(fù)雜查詢以視圖的方式給出,使應(yīng)用程序開發(fā)簡潔快速。利用索引可以提高查詢性能,減少磁盤I/O,優(yōu)化對數(shù)據(jù)表的查詢,加速SQL語句的執(zhí)行。但任何時候建立索引都能提高性能,何時建立索引應(yīng)當(dāng)遵循以下原則:該表常用來在索引列上查詢,該表不常更新、插入、刪除等操作,查詢出來的結(jié)果記錄數(shù)應(yīng)控制在原表的2% 4% 。3.3 使用Oracle 的數(shù)組接口當(dāng)一個客戶應(yīng)用程序插入一行或用一個查詢來向服務(wù)器請求某行時,不是發(fā)送具有單個行的網(wǎng)絡(luò)包,而是采用數(shù)組處理,即把要插入的多個行或檢索出的多個行緩沖在數(shù)組中,然后通過很少的幾個包就可在網(wǎng)上傳送這些數(shù)組。例如,一個給定的Select語句返回2000行數(shù)據(jù),每行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論