




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ORACLE性能調優篇-Oracle基于C/S的性能調整通過探討和研究Oracle服務器和Client/Server的特點和原理,闡述了提高、調整Oracle應用系統性能的一些原則和方法。關鍵詞:Oracle;客戶/服務器;系統全程區;網絡I/O;回滾段Oracle Performance Tunign Based on Client/ServerZhang Dong Wang Hong Yao Yaowen(1.Dep.of Computer Sciences and Engineering.South China University of Technology,Guangzhou 510
2、641;2.Dept.of Informatics,Guangzhou School of Finauce,Guangzhou 510521【Abstract】In this paper discuses and studies the characteristic of Oracle service and theory about Oracle service based on Client/Server.It also gives the way to improve and ture the performance of Oracle based on Client/Server【Ke
3、y words】Oracle;Cclient/Server;SGA;Network I/O;Rollback SegmentOracle 數據庫廣泛應用在社會的各個領域,特別是在Client/Server模式的應用,但是應用開發者往往碰到整個系統的性能隨著數據量的增大顯著下降的問題,為了解決這個問題,從以下幾個方面:數據庫服務器、網絡I/O、應用程序等對整個系統加以調整,充分發揮Oracle的效能,提高整個系統的性能。1 調整數據庫服務器的性能Oracle數據庫服務器是整個系統的核心,它的性能高低直接影響整個系統的性能,為了調整Oracle數據庫服務器的性能,主要從以下幾個方面考慮:1.1 調
4、整操作系統以適合Oracle數據庫服務器運行Oracle數據庫服務器很大程度上依賴于運行服務器的操作系統,如果操作系統不能提供最好性能,那么無論如何調整,Oracle數據庫服務器也無法發揮其應有的性能。1.1.1 為Oracle數據庫服務器規劃系統資源據已有計算機可用資源, 規劃分配給Oracle服務器資源原則是:盡可能使Oracle服務器使用資源最大化,特別在Client/Server中盡量讓服務器上所有資源都來運行Oracle服務。1.1.2 調整計算機系統中的內存配置多數操作系統都用虛存來模擬計算機上更大的內存,它實際上是硬盤上的一定的磁盤空間。當實際的內存空間不能滿足應用軟件的要求時,
5、操作系統就將用這部分的磁盤空間對內存中的信息進行頁面替換,這將引起大量的磁盤I/O操作,使整個服務器的性能下降。為了避免過多地使用虛存,應加大計算機的內存。1.1.3 為Oracle數據庫服務器設置操作系統進程優先級不要在操作系統中調整Oracle進程的優先級,因為在Oracle數據庫系統中,所有的后臺和前臺數據庫服務器進程執行的是同等重要的工作,需要同等的優先級。所以在安裝時,讓所有的數據庫服務器進程都使用缺省的優先級運行。1.2 調整內存分配Oracle數據庫服務器保留3個基本的內存高速緩存,分別對應3種不同類型的數據:庫高速緩存,字典高速緩存和緩沖區高速緩存。庫高速緩存和字典高速緩存一起
6、構成共享池,共享池再加上緩沖區高速緩存便構成了系統全程區(SGA。SGA是對數據庫數據進行快速訪問的一個系統全程區,若SGA本身需要頻繁地進行釋放、分配,則不能達到快速訪問數據的目的,因此應把SGA放在主存中,不要放在虛擬內存中。內存的調整主要是指調整組成SGA的內存結構的大小來提高系統性能,由于Oracle數據庫服務器的內存結構需求與應用密切相關,所以內存結構的調整應在磁盤I/O調整之前進行。1.2.1 庫緩沖區的調整庫緩沖區中包含私用和共享SQL和PL/SQL區,通過比較庫緩沖區的命中率決定它的大小。要調整庫緩沖區,必須首先了解該庫緩沖區的活動情況,庫緩沖區的活動統計信息保留在動態性能表v
7、$librarycache 數據字典中,可通過查詢該表來了解其活動情況,以決定如何調整。Select sum(pins,sum(reloads from v$librarycache;Pins列給出SQL語句,PL/SQL塊及被訪問對象定義的總次數;Reloads列給出SQL 和PL/SQL塊的隱式分析或對象定義重裝載時在庫程序緩沖區中發生的錯誤。如果sum(pins/sum(reloads 0,則庫緩沖區的命中率合適;若sum(pins/sum(reloads>1, 則需調整初始化參數shared_pool_size來重新調整分配給共享池的內存量。1.2.2 數據字典緩沖區的調整數據字
8、典緩沖區包含了有關數據庫的結構、用戶、實體信息。數據字典的命中率,對系統性能影響極大。數據字典緩沖區的使用情況記錄在動態性能表v$librarycache中,可通過查詢該表來了解其活動情況,以決定如何調整。Select sum(gets,sum(getmisses from v$rowcache;Gets列是對相應項請求次數的統計;Getmisses 列是引起緩沖區出錯的數據的請求次數。對于頻繁訪問的數據字典緩沖區,sum(getmisses/sum(gets并發事物(n回滾段數n2 調整Client/Server 模式下的網絡I/OClient/Server環境中的應用處理是分布在客戶應用程
9、序和數據庫服務程序之間的。在Client/Server環境中Client與Server之間的網絡I/O是整個系統性能提高的瓶頸,一個客戶應用程序引起的網絡I/O越少,應用及整個系統的性能越好。減少網絡I/O的最重要的一條原則:將應用邏輯集中在數據庫服務器中。2.1 使用Oracle數據庫的完整約束性當為應用建表時,應當為一些有特殊要求的數據加上適當的完整性約束,這樣就能實現由數據庫本身而不是應用程序來約束數據符合一定的條件。數據庫服務器端的完整約束的執行操作是在比SQL語句級別更低的系統機制上優化,它與客戶端無關,只在服務器中運行,不需在Client 端和Server端之間傳遞SQL 語句,有
10、效地減輕網絡I/O負擔。2.2 使用數據庫觸發器完整約束性只能實現一些較簡單的數據約束條件,對一些較復雜的事物處理規則就無能為力,這時最好不要在應用程序中實施復雜的程序控制,而是應當采用數據庫觸發器來實施復雜的事物規則。數據庫觸發器能實現由數據庫本身,而不是應用程序,來約束數據符合復雜的事物處理規則,并且容易創建,便于管理,避免大量的網絡I/O。例如:將當前表A中成為歷史的記錄從A表中轉儲到歷史表B中,表示為Lsbs。在應用程序中實現:用數據庫觸發器實現:Beign Create trigger delete1Update A set lsbs='T'After update
11、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;在應用程序中實現時,所有的SQL命令請求傳送的數據都要通過網絡在Client端和Server端進行交換,而不像數據庫觸發器一樣,SQL本身在Server端,不需要通過網
12、絡傳輸數據。當進行操作的數據量相當大時,并且多個用戶同時操作時,通過在應用程序中實現復雜的控制,必將增大網絡I/O的負荷,使整個系統的性能降低,而用數據庫觸發器能完全避免這種情況發生。2.3 使用存儲過程、存儲函數和包Oracle的存儲過程和存儲函數是命名的能完成一定功能并且存儲在Server端的PL/SQL的集合。包是一種把有關的過程和函數組織封裝成一個數據庫程序單元的方法。它們相對于應用程序的過程、函數而言,把SQL命令存儲在Server端。使用存儲過程和存儲函數,應用程序不必再包含多個網絡操作的SQL語句去執行數據庫服務器操作,而是簡單調用存儲過程和存儲函數,在網絡上傳輸的只是調用過程的
13、名字和輸出結果,這樣就可減少大量的網絡I/O。例如:基表A、B的定義:name char(20;detail char(10;A表100萬記錄,應用程序將從基表A 中檢索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 poin in cursor1 loop End loop;En
14、d loop;For con1 in 1.7 loop Commit;If substr(poin.detail ,con1,4=res1 then End;如果在Developer/2000 From中按鈕觸發器直接用PL/SQL實現和把它改寫為一個Oracle存儲過程,然后在From中調用此過程實現比較,后者性能顯著提高。在考慮使用上述3種方法時:首先考慮使用完整約束性。對于數據庫觸發器和存儲過程,如果需要所有訪問數據庫的程序自動實施一定規則或檢查,那么使用數據庫觸發器;如果只需對少數的程序實施一定的規則或檢查,則可創建一個過程,讓有關程序調用這個過程。3 應用程序的調整3.1 SQL語句
15、的優化SQL語句的執行速度,可以受很多因素的影響而變化。但主要的影響因素是:驅動表、執行操作的先后順序和索引的運用。可以由很多不同的方法間接地改變這些因素,以達到最優的執行速度。這里主要探討當對多個表進行連接查詢時應遵循的優化原則:(1 用于連接的子句的列應被索引、在Where子句中應盡量利用索引,而不是避開索引。(2 連接操作應從返回較少行上驅動。(3 如果所連接的表A和B,A表長度遠遠大于B表,建議從較大的A表上驅動。(4 如果Where子句中含有選擇性條件,Where No=20,將最具有選擇性部分放在表達式最后。(5 如果只有一個表有索引,另一表無索引,無索引的表通常作為驅動表。如A表
16、的No列以被索引,而B表的No 列沒被索引,則應當B表作為驅動表,A表作為被驅動表。(6 若用于連接的列和Where子句中其他選擇條件列均有索引,則按各個索引對查詢的有效性和選擇性分別定出級別,結合表中具體數據構成情況,從中選出優化路徑,一般需要考慮:子句中哪些列可以使用索引、哪些索引具有唯一性及被查詢表行數目等。3.2 建立和使用視圖、索引利用視圖可以將基表中的列或行進行裁減、隱藏一部分數據,并且能夠將涉及到多個表的復雜查詢以視圖的方式給出,使應用程序開發簡潔快速。利用索引可以提高查詢性能,減少磁盤I/O,優化對數據表的查詢,加速SQL語句的執行。但任何時候建立索引都能提高性能,何時建立索引應當遵循以下原則:該表常用來在索引列上查詢,該表不常更新、插入、刪除等操作,查詢出來的結果記錄數應控制在原表的2% 4% 。3.3 使用Oracle 的數組接口當一個客戶應用程序插入一行或用一個查詢來向服務器請求某行時,不是發送具有單個行的網絡包,而是采用數組處理,即把要插入的多個行或檢索出的多個行緩沖在數組中,然后通過很少的幾個包就可在網上傳送這些數組。例如,一個給定的Select語
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2021-2026年中國中頻熔煉電爐市場深度分析及投資戰略咨詢報告
- 2025年 昌吉州招聘中學教師筆試試題附答案
- 2025年中國云終端行業市場調查研究及投資前景預測報告
- 2025年電影放映項目深度研究分析報告
- 高性能絕緣材料項目可行性研究報告方案可用于立項及銀行貸款+201
- 1000噸年鋁基復合材料建設投資項目可行性實施報告
- 紗布底植絨布項目投資可行性研究分析報告(2024-2030版)
- 社區危舊房改造項目可行性研究報告
- 2025年中國分動器行業發展運行現狀及投資潛力預測報告
- 中國防縮無結針織紗行業市場發展前景及發展趨勢與投資戰略研究報告(2024-2030)
- DB32∕T 186-2015 建筑消防設施檢測技術規程
- 巡檢培訓課件.ppt
- 北師大版五下書法《第6課戈字旁》課件
- 二代征信系統數據采集規范釋義
- 軸承基礎知識PPT通用課件
- 蘇教版二年級(下冊)科學全冊單元測試卷含期中期末(有答案)
- 國家開放大學電大本科《設施園藝學》2023-2024期末試題及答案(試卷代號:1329)
- 數列求和(錯位相減法)
- 固廢中心廢氣處理方案
- 關于地理高考四大能力要求解讀
- 滅火救援作戰計劃圖例
評論
0/150
提交評論