當前位置:成語大全網 - 書法字典 - 如何優化oracle數據庫

如何優化oracle數據庫

1,1,調整數據結構的設計。這部分是在開發信息系統之前完成的。程序員需要考慮是否使用ORACLE數據庫的分區功能,是否為頻繁訪問的數據庫表建立索引。

2、2、調整應用結構設計。這部分也是在信息系統開發之前完成的。程序員需要考慮應用使用什麽樣的架構,是使用傳統的客戶端/服務器兩層架構,還是瀏覽器/Web/數據庫三層架構。不同的應用程序架構需要不同的數據庫資源。

3、3、調整數據庫SQL語句。應用的執行最終會歸結到數據庫中SQL語句的執行,所以SQL語句的執行效率最終決定了ORACLE數據庫的性能。ORACLE建議使用ORACLE語句優化器和行級管理器來調整和優化SQL語句。

4,4,調整服務器內存分配。在信息系統運行過程中優化內存分配,數據庫管理員可以根據數據庫的運行情況,調整數據庫系統全局區(SGA區)的數據緩沖區、日誌緩沖區和* * *共享池的大小。您還可以調整程序全局區(PGA區)的大小。需要註意的是,SGA面積越大越好。如果SGA面積過大,會占用操作系統使用的內存,造成虛擬內存的頁面交換,使系統降低。

5、5、調整硬盤I/O,這壹步是在開發信息系統之前完成的。數據庫管理員可以將組成同壹個表空間的數據文件放在不同的硬盤上,以實現硬盤之間的I/O負載平衡。

6.調整操作系統參數,比如運行在UNIX操作系統上的ORACLE數據庫,可以調整UNIX數據緩沖池的大小和每個進程可以使用的內存大小。

事實上,上述數據庫優化措施是相互關聯的。ORACLE數據庫的性能惡化基本上是用戶響應時間長,需要用戶長時間等待。但是,性能惡化的原因是多種多樣的,有時多個因素* * *導致性能惡化,這就要求數據庫管理員具備全面的計算機知識,對影響數據庫性能的主要原因保持敏感。此外,壹個好的數據庫管理工具對於優化數據庫性能也非常重要。

ORACLE數據庫性能優化工具

常用的數據庫性能優化工具有:

1,1,ORACLE數據庫在線數據字典,ORACLE在線數據字典可以反映ORACLE的動態運行,對於調整數據庫性能很有幫助。

2.操作系統工具,如UNIX操作系統的vmstat和iostat,可以檢查系統級內存和硬盤I/O的使用情況,這些工具有時對於管理員發現系統瓶頸出現在哪裏很有用。

3.SQL跟蹤工具,可以記錄SQL語句的執行。管理員可以使用虛擬表來調整實例,並使用SQL語句跟蹤文件來調整應用程序性能。SQL語言跟蹤工具將結果輸出到操作系統文件,管理員可以使用TKPROF工具查看該文件。

4,4,ORACLE企業管理器(OEM),這是壹個圖形化的用戶管理界面,用戶可以用它方便地管理數據庫,而不必記住復雜的ORACLE數據庫管理命令。

5、5、解釋計劃——SQL語言優化命令,使用該命令可以幫助程序員寫出高效的SQL語言。

ORACLE數據庫的系統性能評估

不同類型的信息系統需要不同的數據庫參數。數據庫管理員需要根據自己的信息系統類型關註不同的數據庫參數。

1,1,聯機事務處理信息系統(OLTP)。這種類型的信息系統通常需要大量的插入和更新操作。典型的系統包括民航售票系統、銀行儲蓄系統等。OLTP系統需要保證數據庫終端用戶的並發性、可靠性和速度,這類系統使用的ORACLE數據庫需要主要考慮以下參數:

L l數據庫回滾段夠用嗎?

L l我需要對ORACLE數據庫進行索引、聚合和散列嗎?

l-l-l系統的全球面積(SGA)是否足夠?

l l SQL語句是否高效?

2,2,數據倉庫系統(Data Warehousing),這個信息系統的主要任務是從ORACLE的海量數據中進行查詢,得到數據之間的壹些規律。對於這種類型的ORACLE數據庫,數據庫管理員需要關註以下參數:

l l使用B*-索引還是位圖索引?

l l使用並行SQL查詢是為了提高查詢效率嗎?

l l用PL/SQL函數寫存儲過程嗎?

L l如有必要,需要建立並行數據庫,提高數據庫的查詢效率。

SQL語句的調整原則

SQL語言是壹種靈活的語言,同樣的功能可以通過不同的語句來實現,但是語句的執行效率卻大相徑庭。程序員可以使用EXPLAIN PLAN語句來比較各種實現方案,選擇最佳方案。壹般來說,程序員在編寫SQL語句時需要滿足以下規則:

1,1,盡量用索引。嘗試比較以下兩條SQL語句:

語句a: select dname,deptno from deptno not in

(從emp中選擇deptno

語句b:從不存在的部門中選擇dname,deptno

(從emp中選擇deptno,其中dept . deptno = EMP . deptno);

這兩個查詢語句的結果是相同的,但是當執行語句A時,ORACLE將掃描整個emp表,而不使用在emp表上構建的deptno索引。執行語句B時,由於子查詢中使用了聯合查詢,ORACLE只掃描emp表中的部分數據,使用deptno列索引,所以語句B的效率比語句a高。

2.選擇聯合查詢的聯合順序。考慮下面的例子:

從taba a,tabb b,tabc c中選擇材料

其中a.acol介於:alow和:ahigh之間

和b.bcol之間:blow和:bhigh

以及介於:clow和:chigh之間的c.ccol

並且a.key1 = b.key1

AMD a . key 2 = c . key 2;

在這個SQL例子中,程序員首先需要選擇要查詢的主表,因為主表需要掃描整個表的數據,所以主表應該有最小的數據,所以例子中表A的acol列的範圍應該小於表B和表c對應列的範圍。

3.在子查詢的語句中謹慎使用IN或NOT,使用where (NOT) exists的效果要好得多。

4.謹慎使用視圖的聯合查詢,尤其是復雜視圖之間的聯合查詢。壹般把視圖的查詢分解成數據表的直接查詢比較好。

5.您可以在參數文件中設置SHARED_POOL_RESERVED_SIZE參數。該參數在SGA***共享池中保留連續的內存空間,這有利於存儲大型SQL包。

6.ORACLE公司提供的DBMS_SHARED_POOL程序可以幫助程序員將壹些經常使用的存儲過程“釘”進SQL區而不被換出內存,有利於程序員將經常使用的存儲過程和占用大量內存“釘”進內存,提高最終用戶的響應時間。

CPU參數的調整

CPU是服務器的重要資源,服務器良好的工作狀態是工作高峰時CPU的利用率在90%以上。如果空閑時間CPU利用率在90%以上,說明服務器缺乏CPU資源。如果在工作高峰時CPU利用率仍然較低,說明服務器CPU資源還是相對過剩的。

使用相同的命令查看CPU的使用情況。對於使用UNIX操作系統的服務器,可以使用SAR–U命令查看CPU的使用情況,對於使用NT操作系統的服務器,可以使用NT performance manager查看CPU的使用情況。

數據庫管理員可以通過查看v$sysstat數據字典中的統計項“本次會話使用的CPU”來了解ORACLE數據庫使用的CPU時間,通過查看統計項“OS用戶級CPU時間”來了解操作系統用戶模式下的CPU時間。看“OS系統調用CPU時間”的統計,可以知道操作系統的系統模式下的CPU時間。操作系統的總CPU時間是用戶模式和系統模式時間的總和。如果ORACLE數據庫使用的CPU時間占操作系統總CPU時間的90%以上,說明服務器CPU基本上被ORACLE數據庫使用,這是合理的。相反,這意味著服務器CPU被其他程序占用,ORACLE數據庫無法獲得更多的CPU時間。

數據庫管理員還可以通過查看v$sesstat數據字典,獲得當前連接到ORACLE數據庫的每個會話占用的CPU時間,從而知道哪個會話消耗的服務器CPU更多。

CPU資源不足的情況有很多:SQL語句的重解析、低效的SQL語句和鎖沖突都會造成CPU資源不足。

1.數據庫管理員可以執行以下語句來檢查SQL語句的解析:

SELECT * FROM V$SYSSTAT

名字在哪裏

('分析時間cpu ','分析時間已過','分析計數(硬)');

這裏的解析時間cpu是系統服務時間,解析時間是響應時間和用戶等待時間。

等待時間=經過的解析時間–解析時間cpu

由此我們可以得到用戶SQL語句的平均解析等待時間= waitetime/parsecount。這個平均等待時間應該接近於0。如果平均解析等待時間太長,數據庫管理員可以使用下面的語句。

SELECT SQL_TEXT,PARSE_CALLS,EXECUTIONS FROM V$SQLAREA

ORDER BY PARSE _ CALLS

找出哪些SQL語句解析效率低。程序員可以優化這些語句或增加ORACLE參數SESSION_CACHED_CURSORS的值。

2、數據庫管理員也可以通過以下語句:

SELECT BUFFER_GETS,EXECUTIONS,SQL _ TEXT FROM V $ SQLAREA

查看低效的SQL語句並優化這些語句也將有助於提高CPU利用率。

3.數據庫管理員可以通過v$system_event數據字典中的“無閂鎖”統計項來檢查ORACLE數據庫的沖突。如果沒有沖突,latch free將找不到結果。如果沖突太大,數據庫管理員可以減小spin_count參數的值,以消除高CPU利用率。

記憶參數的調整

內存參數的調整主要是指ORACLE數據庫的系統全局區(SGA)的調整。SGA主要由三部分組成:* *共享池、數據緩沖區和日誌緩沖區。

1、1和* * *共享池由兩部分組成:* *共享SQL區和數據字典緩沖區,* * *共享SQL區是存儲用戶SQL命令的區域,數據字典緩沖區存儲數據庫操作的動態信息。數據庫管理員執行以下語句:

從v$librarycache中選擇(sum(pins-reloads))/sum(pins)“Lib Cache”;

查看* * * SQL區域的使用率。這個利用率應該在90%以上,否則就需要增加* * *共享池的大小。數據庫管理員還可以執行以下語句:

select(sum(gets-get misses-usage-fixed))/sum(gets)“行緩存”from v $ rowcache

檢查數據字典緩沖區的利用率,也要在90%以上,否則需要增加* * *共享池的大小。

2,2,數據緩沖。數據庫管理員可以使用以下語句:

SELECT name,value FROM v $ sysstat WHERE name IN(' db block gets ',' consistent gets ',' physical reads ');

檢查數據庫數據緩沖區的使用情況。查詢結果可以用來計算數據緩沖區的命中率= 1-(物理讀取/(db塊獲取+壹致獲取))。

這個命中率應該在90%以上,否則需要增加數據緩沖區的大小。

3,3,日誌緩沖區。數據庫管理員可以執行以下語句:

select name,value from v$sysstat where name in('重做條目','重做日誌空間請求');檢查日誌緩沖區的使用情況。查詢結果可用於計算日誌緩沖區的應用程序失敗率:

應用失敗率= =請求數/條目數,應用失敗率應該接近於0。否則說明日誌緩沖區太小,需要在ORACLE數據庫中增加。