Oracle學習應用之徹底地優化策略

tolywang發表於2008-02-23
資料庫系統和作業系統一樣,在計算機上安裝成功後,還需要進一步配置和優化,從而使其具有更強大的功能和執行在最佳狀態。如果在設計階段因為各種因素沒有進行較為合理的配置和計劃,那麼就需要在後期對資料庫系統進行優化。[@more@]   資料庫系統效能的優化,除了在設計階段對其邏輯儲存結構和物理儲存結構設計進行優化,使之在滿足需求條件下,時空開銷效能最佳外,還可在執行階段,採取一些優化措施,使系統效能最佳。本專題所討論的效能優化主要指執行階段的效能優化,即討論如何使用Oracle所提供的優化手段來提高系統效能。大多數效能問題並不是一種孤立的症狀,而是系統設計的結果,因此效能優化就集中在那些導致不可接受特徵的同一的、固定的和潛在的問題上。優化是資料庫設計中“計劃”、“設計”、“監視”和“優化”四大步驟的最後一步。 除了用Oracle優化器來優化資料庫的效能外,DBA還可通過優化Oracle的引數設定等手段來優化資料庫的效能,對引數的細微優化便能影響系統整體效能。
  
   為了有目的優化系統效能,首先應明確優化目標,然後再根據目標優化各種初始引數的設定,以達到更好效果。可有如下幾個優化目標:
  
  ◆ 應用程式設計的優化
  
  ◆ 指定型別SQL語句的優化
  
  ◆ 記憶體使用的優化
  
  ◆ 資料儲存、物理儲存和邏輯儲存的優化
  
  ◆ 網路通訊量的優化
  
  DBA可選定上述一個或多個目標來實施優化。效能優化主要是通過優化初始化引數來實現。本專題從以下幾個方面來談談如何優化Oracle資料庫,使其具有最佳效能。
  
  (1)優化初始引數
  
  (2)優化記憶體
  
  (3)優化I/O
  
  (4)優化資源爭用
  
  (5)其它引數優化
  
  可變引數的優化
  
  在對Oracle資料庫進行優化時,需要用到許多的引數,其中有一部分引數對系統效能影響較大,這部分引數叫可變引數。可變引數按其作用可以分為兩大類,一大類是起限制作用的,如OPEN_CURSORS;另一大類是影響系統效能的,如DB_BLOCK_BUFFERS。
  
  在進行資料庫系統效能優化時,需要熟練掌握和了解一些可變引數。本文討論了一些對系統效能有較大影響的引數。
  
  限制類可變引數
  
  (1)DML_LOCKS
  
  該參數列明多少個使用者,可同時能修改多少張表。例如:有三個使用者同時修改二張表,則要求表上的總數為6。若置為0,則組織佇列不起作用,其效能會稍有提高。使用該引數時不能用DROP TABLE、CREATE INDEX或顯式封鎖。
  
  (2)LICENSE_MAX_SESSION
  
  該引數指出允許併發使用者會話的最大數。若此引數為0,則不能實施併發。若併發的使用者會話數已達到此極限,則只有具有RESTRICTED SESSION許可權的使用者才能連線到伺服器。
  
  (3)LICENSE_MAX_USERS
  
  該引數指出在一個資料庫上可建立的最大使用者數。當達到最大值時,便不能再建新使用者,可改變此值以放鬆限制。在LICENSE_MAX_SESSION或LICENSE_MAX_USER為0時,則併發會話或任何使用者都不能用。若對不同的例項,此引數不同時,則以第一個登入的資料庫例項的引數為準。
  
  (4)MAX_DUMP_FILE_SIZE
  
  該引數指定作業系統中寫跟蹤檔案的塊的最大值。可用此值來限制跟蹤檔案的空間。
  
  (5)OPEN_CURSORS
  
  該引數指明一個使用者程式能同時開啟游標的最大數,它能限制每個使用者程式佔用的記憶體空間量。
  
  (6)OPEN_LINKS
  
  該引數指定併發連線到遠端資料庫的最大使用者程式數。若同時引用多個資料庫,則應該增大該值。例如:同時交替訪問A、B和C三個資料庫時,若OPEN_LINKS設定為2,則需花費等待連線時間。此引數只用於分佈事務。若該引數設定為0,則不允許進行分佈事務處理。
  
  (7)PROCESS
  
  該引數指定同時連線到Oracle伺服器上的最大使用者程式數。該引數值包括6個後臺程式和一個登入,因此,該引數值為20,則只能有13或14個併發使用者連線到伺服器。
  
  (8)ROW_LOCKING
  
  該引數指定行封鎖方式。若設定為“ALWAYS”,則在修改表時只實施行封鎖。若設定為“INTENT”時,則行封鎖只適用於SELECT FOR UPDATE,而在修改時實施表封鎖。
  
  影響系統效能類可變引數
  
  (1)CHECKPOINT_PROCESS
  
  該引數根據是否要求檢查點而設定成TRUE或者FALSE。當所有緩衝區的資訊寫到磁碟時,檢查點程式(CHPT)建立一個靜態的點。在歸檔日誌檔案中做一個記號表示有一個檢查點發生。檢查點發生在歸檔日誌轉換的時候或當達到log_checkpoint_interval定義的塊數的時候。當設定此引數為TRUE時,後臺程式CHPT便可工作。在檢查點期間內,若日誌寫程式(LGWR)的效能減低,則可用CHPT程式加以改善。
  
  (2)DB_BLOCK_CHECKPOINT_BATCH
  
  該引數的值設定得較大時,可加速檢查點的完成。當指定的值比引數DB_BLOCK_CHECKPOINT_BATCH大時,其效果和指定最大值相同。
  
  (3)DB_BLOCK_BUFFERS
  
  該引數是在SGA中可作緩衝用的資料庫塊數。該引數決定SGA的大小,對資料庫效能具有決定性因素。若取較大的值,則可減少I/O次數,但要求記憶體空間較大。每個緩衝區的大小由引數DB_BLOCK_SIZE決定。
  
  (4)DB_BLOCK_SIZE
  
  該參數列示Oracle資料庫塊的大小,以位元組為單位,典型值為2048或4096。該值一旦設定則不能改變。它影響表及索引的FREELISTS引數的最大值。
  
  (5)DB_FILES
  
  該引數為資料庫執行時可開啟的資料檔案最大數目。
  
  (6)DB_FILE_MULTIBLOCK_READ_COUNT
  
  該參數列示在順序掃描時一次I/O操作可讀的最大塊數,該最大塊數取決於作業系統,其值在4至16或者32是比較好。
  
  (7)D1SCRETE_TRANSACTION_ENABLED
  
  該引數實現一個更簡單、更快的回滾機制,以改進某些事務型別的效能。 當設定為TRUE時,可改善某些型別的事務效能。
  
  (8)LOG_ARCHIVE_BUFFER_SIZE
  
  此引數的值依賴於作業系統,它與LOG_ARCHIVE_BUFFER 引數一起用於調整有歸檔日誌的執行,使其執行速度儘量加快,但不能快到降低效能。僅當直接歸檔到磁帶裝置時才需要增加這些引數的值,重做日誌緩衝區要等待歸檔日誌緩衝區變得可用。
  
  (9) LOG_ARCHIVE_BUFFER
  
  該引數指定用於歸檔的日誌時的緩衝區數。
  
  (10) LOG_BUFFER
  
  該引數指明分配給SGA中的日誌緩衝區的位元組數,該引數值較大時,可減少日誌I/O的次數。對於繁忙的系統不宜採用大於或等於64K的值。預設值—般為資料庫塊的4倍。
  
  (11)LOG_CHECKPOINT_TIMEOUT
  
  該引數指明兩個檢查點之間的時間間隔,若指定為0時,則說明不允許進行基於時間的檢查點。
  
  (12)LOG_CHECKPOINT_INTERVAL
  
  該引數用來確定檢查點程式的執行頻率。這個數值設定成取檢查點之前處理的重做緩衝區塊的數量。
  
  (13)LOG_FILES
  
  該引數指定執行期間資料庫可開啟的日誌檔案數。若需要較大的SGA空間,而不需多個日誌檔案,則可減少該值。
  
  (14)LOG_SIMULTANEOUS_COPIES
  
  該引數是日誌緩衝區副本閂鎖的最大數,為同時寫日誌項所用。為提高效能,可設定此引數為兩倍的CPU數,對單程式系統,該值多數設定為0,此時斷開閂鎖。
  
  (15)LOG_SMALL_ENTRY_MAX_SIZE
  
  該引數與LOG_SIMULTANEOUS_COPIES引數配合使用。若日誌項大於此項,則在給緩衝區分配空間並獲得日誌複製閂鎖之後,使用者程式釋放日誌複製閂鎖。
  
  (16)OPTIMIZRER_MODE
  
  若該引數的值為RULE,則ORACLE優化器選擇基於規則的優化;若設定為COST,並且在資料字典中存在有統計資訊,則優化器選擇基於代價的優化方法進行優化。
  
  (17)SEQUENCE_CACHE_ENTRIES
  
  該引數指明在SGA中可進行快取記憶體的序列數,用於直接存取。該快取記憶體區是基於最近最少使用(LRU)的演算法進行管理的。若此值設定得較高,則可達到較高的併發性。
  
  (18)SEQUENCE_CACHE_HASH_BUCKETS
  
  該引數用於加速檢視高速緩衝區最近請求的最新序列的桶式地址數,每個桶式地址佔8個位元組。高速緩衝區以雜湊表排列,該引數應為質數。
  
  (19)SERIALIZEABLE
  
  此引數用於保證重複讀的一致性。當它設定為TRUE時,查詢可保證表級讀一致,以防止在此查詢提交之前的修改。
  
  (20)SHARED_POOL_SIZE
  
  該引數指定共享池的大小,其中包括共享游標及儲存過程。在多使用者系統中,較大的SHARED_POOL_SIZE值可改善SQL語句的執行效能,但較小的值可節省記憶體。
  
  (21)SMALL_TABLE_THRESHOLD
  
  該引數決定SGA中用於掃描的緩衝區的數目,若表的數目小於該值,則該表可整個地讀入快取記憶體區。若表大於該值,則立即重用該緩衝區。一般用預設值可使效能最好。
  
  (22)SORT_AREA_TETAINED_SIZE
  
  這是會話記憶體的最大數量,用於記憶體排序。當從排序空間提出最後—行時,便釋放該記憶體。若排序要較大的記憶體,則分配一臨時段,排序便可在盤上進行。用於排序的最大總量可由SORT_AREA_SIZE指定,而不用此引數。可以分配同樣大小的多個排序空間,不過一般對於複雜的查詢才需要。
  
  (23) SORT_AREA_SIZE
  
  該引數用於指定進行外排序(磁碟)時所需PGA記憶體的最大數量,以位元組為單位。當排序

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-999839/,如需轉載,請註明出處,否則將追究法律責任。

相關文章