程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 籠統描述Oracle日志緩沖區

籠統描述Oracle日志緩沖區

編輯:Oracle數據庫基礎

Oracle有很多值得學習的地方,這裡我們主要介紹Oracle日志緩沖區,包括介紹建立優化索引等方面。Oracle日志緩沖區的爭用將完全抑制數據庫的性能,因此要設法減少它。日志空間請求反映了用戶進程等待Oracle日志緩沖區空間的次數。所以可通過查問動態性能表V$SYSSTAT(需有SELECT ANY TABLE特權)來確定是否爭用Oracle日志緩沖區空間。該查詢語句的格式如下:

  1. SQL>SELECT name, value  
  2. 2>FROM V$SYSSTAT  
  3. 3>WHERE name='redo log space requests'; 

日志空間的請求值應接近於0,否則需增加初始化參數LOG_BUFFER的值,以增加空間、減少爭用。減少Oracle日志緩沖區闩鎖的爭用對Oracle日志緩沖區的訪問由闩鎖(latches)調控。闩鎖分為日志分配闩鎖和日志拷貝闩鎖兩類。

當多個用戶同時頻繁地訪問Oracle日志緩沖區時,就可能引起對Oracle日志緩沖區闩鎖的爭用,從而降低性能。Oracle將所有闩鎖的活動記錄在動態性能表V$LATCH中。有SELECT ANY TABLE特權的用戶可以查詢它,以了解是否有爭用發生。查詢語句如下:

  1. SQL>SELECT name,gets,misses,iddediate_gets,iddediate_miss  
  2. 2>FROM V$LATCH l,V$LATCHMANE ln  
  3. 3>WHERE ln.nome IN('redo allocation','redo copv')AND ln.latch #=1.latch #; 

其中:
◆ willing_to_wait:對闩鎖的請求種類之一。
◆ iddediate:對闩鎖的請求種類之二。
◆ gets:表示對闩鎖的willing_to_wait請求成功的次數。
◆ misses:表示對闩鎖的willing_to_wait請求不成功的次數。
◆ iddediate_gets:表示對每個闩鎖立即請求成功的次數。
◆ iddediate_miss:表示對每個闩鎖立即請求不成功的次數。

要減少日志分配闩鎖的爭用就需使單個進程持有闩鎖的時間最短,要減少此時間又應減少在日志闩鎖上的拷貝,即減少參數LOG_SMALL_ENTRY_MAX_SIZE的值。要減少日志拷貝闩鎖的爭用,一是觀察其爭用情況,增加闩鎖,即增加LOG_SIMULTANEOUS_COPIES的值;二是減少持有闩鎖的時間,即在獲得日志拷貝闩鎖之前,就迫使Oracle用戶進程事先建立日志項。事先建立的所有日志項的大小都要小於參數 LOG_ENTRY_PREBUILD_THRESHOLD,要事先建立日志項就要增加參數LOG_ENTRY_PREBUILD_THRESSHOLD 的值。

排序是一項花銷很大的操作,而且對性能的影響程度也較大,因此使大部分排序在內存中完成,而不是在磁盤上進行,這是至關重要的。其中“sorts(memory)”選項表示不需要磁盤I/O,選項“sorts(disk)” 表示需要磁盤I/O。如果用戶認為在磁盤上的排序意義較大,可以增加init.ora文件SORT_AREA_SIZE參數的設置值。以上介紹Oracle日志緩沖區。

建立優化索引

當要改進查詢的性能時,索引是最便捷的,常常也是最好的技術。多數新應用程序的存取速度問題是由於缺少合適的索引。使用索引可以使性能發生巨大的變化,而且確定需要什麼樣的索引也相對簡單,只需要考察您的SQL語句,看WHERE子句中您用了什麼內容。

對待索引的建立要特別謹慎,因為索引要占用磁盤空間。如果索引同表本身的大小差不多,那就不能從索引得到多少好處。索引還要對表的更新、插入和刪除的性能產生影響。除了這幾點之外,索引是改進查詢性能的最簡單、最有效的方法,尤其是當您總是對幾個關鍵字字段進行搜索時,這種方法最合適。

索引建立要花費大量時間,可以使用ALTER INDEX REBUILD來創建新索引,這比其刪除和重建索引要迅速得多。如果用戶的數據已經排序,在構建索引時使用NOSORT選項,如:

  1. SQL>ALTER INDEX emp_primary_key REBUILD;  
  2. SQL>CREATE INDEX myindex ON emp(ename) NOSORT; 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved