Oracle資料庫參數優化參考

2020-12-11 中國軟體網

(中國軟體網訊)分析評價Oracle資料庫性能主要有資料庫吞吐量、資料庫用戶響應時間兩項指標。資料庫用戶響應時間又可以分為系統服務時間和用戶等待時間兩項,即:資料庫用戶響應時間=系統服務時間+用戶等待時間。

因此,獲得滿意的用戶響應時間有兩個途徑:一是減少系統服務時間,即提高資料庫的吞吐量;二是減少用戶等待時間,即減少用戶訪問同一資料庫資源的衝突率。

資料庫性能優化包括如下幾個部分:

1.調整數據結構的設計 這一部分在開發信息系統之前完成,程式設計師需要考慮是否使用Oracle資料庫的分區功能,對於經常訪問的資料庫表是否需要建立索引等。

2.調整應用程式結構設計 這一部分也是在開發信息系統之前完成的。程式設計師在這一步需要考慮應用程式使用什麼樣的體系結構,是使用傳統的Client/Server兩層體系結構,還是使用Browser/Web/Database的三層體系結構。不同的應用程式體系結構要求的資料庫資源

3.調整資料庫SQL語句 應用程式的執行最終將歸結為資料庫中的SQL語句執行,因此SQL語句的執行效率最終決定了Oracle資料庫的性能。Oracle公司推薦使用Oracle語句優化器(Oracle Optimizer)和行鎖管理器(Row-Level Manager)來調整優化SQL語句。

4.調整伺服器內存分配 內存分配是在信息系統運行過程中優化配置的。資料庫管理員根據資料庫的運行狀況不僅可以調整資料庫系統全局區(SGA區)的數據緩衝區、日誌緩衝區和共享池的大小,而且還可以調整程序全局區(PGA區)的大小。

5.調整硬碟I/O這一步是在信息系統開發之前完成的。資料庫管理員可以將組成同一個表空間的數據文件放在不同的硬碟上,做到硬碟之間I/O負載均衡。

6.調整作業系統參數 例如:運行在Unix作業系統上的Oracle資料庫,可以調整Unix數據緩衝區的大小、每個進程所能使用的內存大小等參數。

下面為一些參數調優參考:

一、db_file_multiblock_read_count:

oracle讀取數據有兩種方式:

1)通過rowid(即索引掃描)

2)通過全表掃描

如果是全表掃描時,oracle會一次讀取多個blocks,每次讀取的塊數將受初始化參數db_file_multiblock_read_count和作業系統的I/o緩衝區大小的限制。

設置DB_FILE_MULTIBLOCK_READ_COUNT以充分利用作業系統I/O緩衝區的大小。應考慮DB_FILE_MULTIBLOCK_READ_COUNT <=作業系統I/O緩衝區/ Oracle Block的大小,如果DB_FILE_MULTIBLOCK_READ_COUNT設置的太大,會使優化器認為全表掃描更有效而改變執行計劃,然後實際情況並非如此。

二、pga_aggregate_target:

Oracle9i中,PGA_AGGREGATE_TARGET參數僅對專用伺服器模式下(Dedicated Server)的專屬連接有效,對共享伺服器(Shared Server)連接無效;10g後對專用伺服器和共享伺服器都起作用,設置pga_aggregate_target,需要考慮最大並發連接後所需要的pga內存。

三、sga_max_size:

sga在32位的資料庫中最大不超過1.7G,而64位的資料庫則可以無限大,只要伺服器的物理內存足夠大。

設置sga大小需要考慮幾個問題:

1)物理內存多大

2)作業系統估計需要使用多少內存

3)資料庫是使用文件系統還是裸設備

4)有多少並發連接

5)應用是OLTP類型還是OLAP類型

有一個經驗公式:

OS使用內存+SGA+並發執行進程數*(sort_area_size+hash_ara_size+2M) < 0.7*總內存

四、log_buffer

對於日誌緩衝區的大小設置,通常我覺得沒有過多的建議,因為參考LGWR寫的觸發條件之後,我們會發現通常超過3M意義不是很大。作為一個正式系統,可能考慮先設置log_buffer=1~3M大小,然後針對具體情況再調整。

五、large_pool_size

對於大緩衝池的設置,假如不使用MTS,建議在20~30M足夠了。這部分主要用來保存並行查詢時候的一些信息,還有就是RMAN的備份的時候可能會使用到。如果設置了MTS,則由於UGA部分要移入這裡,則需要具體根據session最大數量和sort_ares_size等相關會話內存參數的設置來綜合考慮這部分大小的設置,一般可以考慮為session * (sort_area_size +2M)。這裡要提醒一點,不是必須使用MTS,我們都不主張使用MTS,尤其同時在線用戶數小於500的情況下。

六、java_pool_size:

假如資料庫沒有使用JAVA,我們通常認為保留10~20M大小足夠了。事實上可以更少,甚至最少只需要32k,但具體跟安裝資料庫的時候的組件相關(比如http server)。

七、shared_pool_size:

這是迄今為止最具有爭議的一部分內存設置。按照很多文檔的描述,這部分內容應該幾乎和數據緩衝區差不多大小。但實際上情況卻不是這樣的。首先我們要考究一個問題,那就是這部分內存的作用,它是為了緩存已經被解析過的SQL,而使其能被重用,不再解析。這樣做的原因是因為,對於一個新的SQL(shared_pool裡面不存在已經解析的可用的相同的SQL),資料庫將執行硬解析,這是一個很消耗資源的過程。而若已經存在,則進行的僅僅是軟分析(在共享池中尋找相同SQL),這樣消耗的資源大大減少。所以我們期望能多共享一些SQL,並且如果該參數設置不夠大,經常會出現ora-04031錯誤,表示為了解析新的SQL,沒有可用的足夠大的連續空閒空間,這樣自然我們期望該參數能大一些。但是該參數的增大,卻也有負面的影響,因為需要維護共享的結構,內存的增大也會使得SQL的老化的代價更高,帶來大量的管理的開銷,所有這些可能會導致CPU的嚴重問題。

在一個充分使用綁定變量的比較大的系統中,shared_pool_size的開銷通常應該維持在300M以內。除非系統使用了大量的存儲過程、函數、包,比如oracle erp這樣的應用,可能會達到500M甚至更高。於是我們假定一個1G內存的系統,可能考慮設置該參數為100M,2G的系統考慮設置為150M,8G的系統可以考慮設置為200~300M。對於一個沒有充分使用或者沒有使用綁定變量系統,這可能給我們帶來一個嚴重的問題。所謂沒有使用bind var的SQL,我們稱為Literal SQL。

八、Data buffer:

現在我們來談數據緩衝區,在確定了SGA的大小並分配完了前面部分的內存後,其餘的,都分配給這部分內存。通常,在允許的情況下,我們都嘗試使得這部分內存更大。這部分內存的作用主要是緩存DB BLOCK,減少甚至避免從磁碟上獲取數據,在8i中通常由db_block_buffers*db_block_size來決定大小的。如果我們設置了buffer_pool_keep和buffer_pool_recycle,則應該加上後面這兩部分內存的大小。

九、db_writer_processes:

在oracle中一個重要的後臺進程DBWO,這個進程負責將髒緩存塊寫回到數據文件中去,稱為資料庫書寫器進程(Database Writer Process),DB_WRITER_PROCESSES=MAX(1,TRUNC(CPU數/8))。也就是說,cpu數小於8時,DB_WRITER_PROCESSES為1,即只有一個寫進程DBWO。這對於一般的系統來說也是足夠用。當你的系統的修改數據的任務很重,並且已經影響到性能時,可以調整這個參數,這個參數不要超過cpu數,否則多出的進程也不會起作用,另外,它的最大值不能超過20。

十、parallel_min_server和parallel_max_server

parallel_min_server< cpu個數

parallel_max_server< 10*cpu個數,參數用於設置系統中允許的最大並行進程數

對於9i

如果PARALLEL_AUTOMATIC_TUNING=FALSE

PARALLEL_MAX_SERVERS=5

如果PARALLEL_AUTOMATIC_TUNING=TRUE

PARALLEL_MAX_SERVERS=CPU_COUNT x 10

9i中PARALLEL_AUTOMATIC_TUNING默認為FALSE,所以PARALLEL_MAX_SERVERS默認為5

對於10g

如果PGA_AGGREGATE_TARGET >0

PARALLEL_MAX_SERVERS=CPU_COUNT x PARALLEL_THREADS_PER_CPU x 10

如果PGA_AGGREGATE_TARGET=0

PARALLEL_MAX_SERVERS=CPU_COUNT x PARALLEL_THREADS_PER_CPU x 5

parallel_execution_message_size:信息的發送大小,改善並發時的等待時間,最大不超過64k。

說明:

利用oracle的alter system set ……scope=spfile參數修改後,必須重新啟動資料庫,修改設置才能生效。

從oracle9i開始,alter system命令增加了一個新的選項,scope,這個參數有3個可選值,分別是:

Memory:只改變當前運行的實例,重啟數據後失效。

Spfile:只改變當前運行的實例,重啟資料庫後失效。

Both:同時改變實例以及spfile文件,當前更改立即生效,重啟資料庫後仍然有效,這個選項相當於不帶參數的alter s ystem語句

設置oracle客戶端中文顯示:

nls_lang_z AMERICAN_AMERICA.ZHS16GBK

nls_lang AMERICAN_AMERICA.us7ascii 




免責聲明:

本站系本網編輯轉載,會儘可能註明出處,但不排除無法註明來源的情況,轉載目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請在30日內與本網聯繫, 來信: liujun@soft6.com 我們將在收到郵件後第一時間刪除內容!

[聲明]本站文章版權歸原作者所有,內容為作者個人觀點,不代表本網站的觀點和對其真實性負責,本站擁有對此聲明的最終解釋權。

相關焦點

  • Oracle資料庫優化的一些建議
    1、ORACLE 優化內容根據業務分析人員、設計人員、應用程式開發人員、資料庫管理員、系統管理員幾個不同的角色,針對每個不同角色,進行針對性的內容優化。from bdc_zc_qs;● 儘量少嵌套子查詢,這種查詢會消耗大量的CPU資源;● 比較多or運算的查詢能使用union all 替換 or運算,建議分成多個查詢,用union all聯結起來;● 多表查詢選擇最有效率的表名順序;oracle
  • 分享一個有意思的oracle19c資料庫監聽異常
    2、查看資料庫狀態資料庫狀態正常3、查看監聽狀態發現沒有資料庫服務..排查日誌沒有明顯異常6、查看資料庫中listener相關參數對比正常和異常資料庫的listener相關參數..7、修改資料庫監聽參數ps:動態註冊默認只註冊到默認的監聽器上(名稱是LISTENER、埠是1521、協議是TCP),因為pmon只會動態註冊port等於1521的監聽,否則pmon不能動態註冊listener,如果需要向非默認監聽註冊,則需要配置local_listener參數。監聽的信息添加到tnsnames.ora文件中。
  • Oracle性能優化之優化排序操作
    【IT168技術文檔】 Oracle性能優化:資料庫配置和IO問題 Oracle性能優化經驗分享之系統參數設置      概念     伺服器首先在sort_area_size指定大小的內存區域裡排序,如果所需的空間超過sort_area_size
  • Oracle 資料庫備份與恢復總結-exp/imp (導出與導入裝庫與卸庫)
    (2)命令行方式$ exp user/pwd@dbname file=/oracle/test.dmp full=y    //  命令行中輸入所需的參數> (3)參數文件方式$ exp parfile=username.par    //  在參數文件中輸入所需的參數
  • Oracle資料庫監控中如果用到了dual,一定需要規避這個坑
    $ ls -lrt|head -5-rw-r. 1 oracle oinstall 1717 Oct 29 23:01 statdb1_ora_6057_b.aud-rw-r. 1 oracle oinstall 3609 Oct 29 23:01 statdb1_ora_6085_12.aud-rw-r. 1 oracle oinstall 2390 Oct 29 23:01 statdb1_ora
  • DB2與Oracle資料庫SQL寫法的主要區別
    DB2作為眾多國際大客戶的選擇(據說世界500強80%用DB2,前100強更是全部採用DB2),在國內真的很不流行,屬於小眾資料庫,但是沒辦法,現在的項目要用DB2,所以不得不面對熟悉Oracle的開發同事們寫出的「Oracle版代碼」,眾多的兼容性問題搞得很是頭大,遂整理了一份經常遇到的兼容性問題列表供大家參考,貌似最近問題少了些,但願這個勢頭能繼續下去。
  • Oracle 資料庫遷移-百家號 - 百度經驗
    Oracle 資料庫遷移需求分析:資料庫所有文件(數據文件、日誌文件、臨時文件、控制文件)都存放在光纖存儲中,但是光纖存儲使用時間過長,超過3年,經常出現一些問題,而且光纖存儲需要廠家維護,維護方面不是很方便,需要將資料庫文件遷移到nas存儲中。
  • Oracle 21c新特性——DG相關
    結果緩存極大地提升了重複查詢的性能表現,並能夠最大程度地降低對primary資料庫和standby資料庫的性能影響。通過將結果緩存保留在備庫上,這樣備庫上運行的查詢性能,包括報告類查詢,以及其他只讀應用等,都不會受到資料庫角色切換的影響。
  • 零基礎學Oracle之1:Oracle體系架構
    :規定了oracle instance的參數,如SGA和SGA內各組件分配內存的大小。4、database文件1)datafile:存儲實際數據的文件2)control file:操縱數據文件,維護和驗證資料庫完整信息3)redo log file:記錄資料庫的改變信息,在資料庫出錯時可以用於恢復。
  • 甲骨文免費開放Oracle自治資料庫和Oracle雲基礎設施線上課程及認證
    甲骨文公司近日免費開放了有關Oracle自治資料庫和Oracle 雲基礎設施的線上課程及認證。從2020年3月30日到5月15日,任何用戶都可以登錄甲骨文大學,免費訪問超過50個小時的在線培訓,參加認證考試並獲得6項免費的認證。
  • ​PHP處理Oracle資料庫方法與技巧(六)
    文件名:19UseOracleTransactiong.php----在PHP中使用oracle事務<!
  • 將函數索引從Oracle遷移到PostgreSQL
    我們使用AWSSchema ConversionTool(SCT)來轉換資料庫的元數據。
  • Oracle 21c新特性之番外篇——APEX簡介及配置
    環境作業系統:OEL7.7中間件:ORDS standalone模式資料庫版本:Oracle database 19.2目標容器:CDB架構, pdb為 orclpdbPDB sys用戶的密碼為 oracle官方參考文檔:https://docs.oracle.com/en/database/oracle
  • Oracle資料庫刪除重複數據的情況!
    【IT168 論壇採風】在對資料庫進行操作過程中我們可能會遇到這種情況,表中的數據可能重複出現,使我們對資料庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重複沒有用的數據呢?
  • 【DB筆試面試538】在Oracle中, 資料庫的參數分為哪幾類?
    題目部分在Oracle中, 資料庫的參數分為哪幾類?答案部分Oracle資料庫根據SPFILE或PFILE中設置的參數來啟動資料庫。靜態參數(Static parameters):影響實例或整個資料庫,只能通過更改init.ora或SPFILE的內容來修改。靜態參數要求關閉資料庫後再重新啟動資料庫才能生效。無法對當前實例更改靜態參數。
  • 如何減少oracle資料庫死鎖
    今天中午oracle系統死鎖,在30多萬行代碼裡面排查半天,原來是有段代碼的事務沒有提交。#程式設計師# 很多時候漏提交時務,就會造成災難性的後果,因此寫完代碼再檢查一遍,還是有必要的。tryif not dbMain.InTransaction then dbMain.StartTransaction;∥操作資料庫代碼if dmdatapublic.dbMain.InTransaction then dmdatapublic.dbMain.Commit
  • [摘要]今天帶來關於oracle自帶資料庫使用。
    (中國軟體網訊)今天帶來關於oracle自帶資料庫使用:1、oracle安裝時,自帶的人事資料庫是默認安裝的2、人事資料庫管理員scott/tiger默認是鎖定的,我們首先需要解鎖:#sqlplus scott/tiger 如果提示帳號被鎖定,可以先用sys用戶進去之後解鎖 #sqlplus /
  • 時過境遷:Oracle跨平臺遷移之XTTS方案與實踐
    、性能優化和故障診斷。檢查源端 Compatible 參數source 端不可以是 windows P7,source 端的 COMPATIBLE.RDBMS 必須大於 10.2.0,且不大於目標端 COMPATIBLE.RDBMSshow parameter compatible 如果目標端資料庫版本是 11.2.0.3 或更低。
  • 零基礎學Oracle之9:Oracle redo log file實驗
    上一節描述了oracle redo log文件的理論,這一節來演示redo log 文件的操作。1,3 '/u01/app/oracle/oradata/orcl/redo02a.log' to group 2,4 '/u01/app/oracle/oradata/orcl/redo03a.log' to group 3;Database altered.
  • 聊聊oracle+hint 的使用
    Oracle擁有非常好的優化算法,尤其是在8i版本之後引入CBO,很多的sql oracle都可以幫我們選擇非常好的執行計劃,但是有些時候