熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORACLE性能調優遵循的基本原則

2013-11-13 16:11:47  來源: Oracle 

  任何事情都有它的源頭要解決問題也得從源頭開始影響ORACLE性能的源頭非常多主要包括如下方面
  
  數據庫的硬件配置CPU內存網絡條件
  CPU在任何機器中CPU的數據處理能力往往是衡量計算機性能的一個標志並且ORACLE是一個提供並行能力的數據庫系統在CPU方面的要求就更高了如果運行隊列數目超過了CPU處理的數目性能就會下降我們要解決的問題就是要適當增加CPU的數量了當然我們還可以將需要許多資源的進程KILL掉
  
  內存衡量機器性能的另外一個指標就是內存的多少了在ORACLE中內存和我們在建數據庫中的交換區進行數據的交換讀數據時磁盤I/O必須等待物理I/O操作完成在出現ORACLE的內存瓶頸時我們第一個要考慮的是增加內存由於I/O的響應時間是影響ORACLE性能的主要參數我將在這方面進行詳細的講解
  
  網絡條件NET*SQL負責數據在網絡上的來往大量的SQL會令網絡速度變慢比如M的網卡和的網卡就對NET*SQL有非常明顯的影響還有交換機集線器等等網絡設備的性能對網絡的影響很明顯建議在任何網絡中不要試圖用個集線器來將網段互聯
  
  OS參數的設置
  下表給出了OS的參數設置及說明DBA可以根據實際需要對這些參數進行設置
  

  用戶SQL質量
  以上講的都是硬件方面的東西在條件有限的條件下我們可以調整應用程序的SQL質量
  
  不要進行全表掃描(Full Table Scan)全表掃描導致大量的I/O
  
  盡量建好和使用好索引建索引也是有講究的在建索引時也不是索引越多越好當一個表的索引達到個以上時ORACLE的性能可能還是改善不了因為OLTP系統每表超過個索引即會降低性能而且在一個sql 中 Oracle 從不能使用超過 個索引當我們用到GROUP BY和ORDER BY時ORACLE就會自動對數據進行排序而ORACLE在INITORA中決定了sort_area_size區的大小當排序不能在我們給定的排序區完成時ORACLE就會在磁盤中進行排序也就是我們講的臨時表空間中排序 過多的磁盤排序將會令 free buffer waits 的值變高而這個區間並不只是用於排序的對於開發人員我提出如下忠告:
  
  )selectupdatedelete 語句中的子查詢應當有規律地查找少於%的表行如果一個語句查找的行數超過總行數的%它將不能通過使用索引獲得性能上的提高   
  
  索引可能產生碎片因為記錄從表中刪除時相應也從表的索引中刪除表釋放的空間可以再用而索引釋放的空間卻不能再用頻繁進行刪除操作的被索引的表應當階段性地重建索引以避免在索引中造成空間碎片影響性能在許可的條件下也可以階段性地truncate表truncate命令刪除表中所有記錄也刪除索引碎片
  
  在使用索引時一定要按索引對應字段的順序進行引用
  
  用(+)比用NOT IN更有效率
  
  降低ORACLE的競爭
  先講幾個ORACLE的幾個參數這幾個參數關系到ORACLE的競爭
  
  freelists 和 freelist 組他們負責ORACLE的處理表和索引的空間管理
  
  pctfree 及 pctused該參數決定了freelists 和 freelist 組的行為pctfree 和pctused 參數的唯一目的就是為了控制塊如何在 freelists 中進出
  
  設置好pctfree 及 pctused對塊在freelists的移走和讀取很重要
  
  其他參數的設置
  包括SGA區(系統全局區)系統全局區(SGA)是一個分配給Oracle 的包含一個 Oracle 實例的數據庫的控制信息內存段
  
  主要包括數據庫高速緩存(the database buffer cache)
  
  重演日志緩存(the redo log buffer)
  
  共享池(the shared pool)
  
  數據字典緩存(the data dictionary cache)以及其它各方面的信息
  
  db_block_buffers(數據高速緩沖區)訪問過的數據都放在這一片內存區域該參數越大Oracle在內存中找到相同數據的可能性就越大也即加快了查詢速度
  
  share_pool_size (SQL共享緩沖池)該參數是庫高速緩存和數據字典的高速緩存
  
  Log_buffer (重演日志緩沖區)
  
  sort_area_size(排序區)
  
  processes (同時連接的進程數)
  
  db_block_size (數據庫塊大小)Oracle默認塊為KB太小了因為如果我們有一個KB的數據KB塊的數據庫要讀次盤才能讀完KB塊的數據庫只要次就讀完了大大減少了I/O操作數據庫安裝完成後就不能再改變db_block_size的值了只能重新建立數據庫並且建庫時要選擇手工安裝數據庫
  
  open_links (同時打開的鏈接數)
  
  dml_locks
  
  open_cursors (打開光標數)
  
  dbwr_io_slaves (後台寫進程數)
From:http://tw.wingwit.com/Article/program/Oracle/201311/17955.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.