籠統(tǒng)描述Oracle日志緩沖區(qū)
Oracle有很多值得學(xué)習(xí)的地方,這里我們主要介紹Oracle日志緩沖區(qū),包括介紹建立優(yōu)化索引等方面。Oracle日志緩沖區(qū)的爭用將完全抑制數(shù)據(jù)庫的性能,因此要設(shè)法減少它。日志空間請求反映了用戶進(jìn)程等待Oracle日志緩沖區(qū)空間的次數(shù)。所以可通過查問動態(tài)性能表V$SYSSTAT(需有SELECT ANY TABLE特權(quán))來確定是否爭用Oracle日志緩沖區(qū)空間。該查詢語句的格式如下:
- SQL>SELECT name, value
- 2>FROM V$SYSSTAT
- 3>WHERE name='redo log space requests';
日志空間的請求值應(yīng)接近于0,否則需增加初始化參數(shù)LOG_BUFFER的值,以增加空間、減少爭用。減少Oracle日志緩沖區(qū)閂鎖的爭用對Oracle日志緩沖區(qū)的訪問由閂鎖(latches)調(diào)控。閂鎖分為日志分配閂鎖和日志拷貝閂鎖兩類。
當(dāng)多個用戶同時頻繁地訪問Oracle日志緩沖區(qū)時,就可能引起對Oracle日志緩沖區(qū)閂鎖的爭用,從而降低性能。Oracle將所有閂鎖的活動記錄在動態(tài)性能表V$LATCH中。有SELECT ANY TABLE特權(quán)的用戶可以查詢它,以了解是否有爭用發(fā)生。查詢語句如下:
- SQL>SELECT name,gets,misses,iddediate_gets,iddediate_miss
- 2>FROM V$LATCH l,V$LATCHMANE ln
- 3>WHERE ln.nome IN('redo allocation','redo copv')AND ln.latch #=1.latch #;
其中:
◆ willing_to_wait:對閂鎖的請求種類之一。
◆ iddediate:對閂鎖的請求種類之二。
◆ gets:表示對閂鎖的willing_to_wait請求成功的次數(shù)。
◆ misses:表示對閂鎖的willing_to_wait請求不成功的次數(shù)。
◆ iddediate_gets:表示對每個閂鎖立即請求成功的次數(shù)。
◆ iddediate_miss:表示對每個閂鎖立即請求不成功的次數(shù)。
要減少日志分配閂鎖的爭用就需使單個進(jìn)程持有閂鎖的時間最短,要減少此時間又應(yīng)減少在日志閂鎖上的拷貝,即減少參數(shù)LOG_SMALL_ENTRY_MAX_SIZE的值。要減少日志拷貝閂鎖的爭用,一是觀察其爭用情況,增加閂鎖,即增加LOG_SIMULTANEOUS_COPIES的值;二是減少持有閂鎖的時間,即在獲得日志拷貝閂鎖之前,就迫使Oracle用戶進(jìn)程事先建立日志項(xiàng)。事先建立的所有日志項(xiàng)的大小都要小于參數(shù) LOG_ENTRY_PREBUILD_THRESHOLD,要事先建立日志項(xiàng)就要增加參數(shù)LOG_ENTRY_PREBUILD_THRESSHOLD 的值。
排序是一項(xiàng)花銷很大的操作,而且對性能的影響程度也較大,因此使大部分排序在內(nèi)存中完成,而不是在磁盤上進(jìn)行,這是至關(guān)重要的。其中“sorts(memory)”選項(xiàng)表示不需要磁盤I/O,選項(xiàng)“sorts(disk)” 表示需要磁盤I/O。如果用戶認(rèn)為在磁盤上的排序意義較大,可以增加init.ora文件SORT_AREA_SIZE參數(shù)的設(shè)置值。以上介紹Oracle日志緩沖區(qū)。
建立優(yōu)化索引
當(dāng)要改進(jìn)查詢的性能時,索引是最便捷的,常常也是最好的技術(shù)。多數(shù)新應(yīng)用程序的存取速度問題是由于缺少合適的索引。使用索引可以使性能發(fā)生巨大的變化,而且確定需要什么樣的索引也相對簡單,只需要考察您的SQL語句,看WHERE子句中您用了什么內(nèi)容。
對待索引的建立要特別謹(jǐn)慎,因?yàn)樗饕加么疟P空間。如果索引同表本身的大小差不多,那就不能從索引得到多少好處。索引還要對表的更新、插入和刪除的性能產(chǎn)生影響。除了這幾點(diǎn)之外,索引是改進(jìn)查詢性能的最簡單、最有效的方法,尤其是當(dāng)您總是對幾個關(guān)鍵字字段進(jìn)行搜索時,這種方法最合適。
索引建立要花費(fèi)大量時間,可以使用ALTER INDEX REBUILD來創(chuàng)建新索引,這比其刪除和重建索引要迅速得多。如果用戶的數(shù)據(jù)已經(jīng)排序,在構(gòu)建索引時使用NOSORT選項(xiàng),如:
- SQL>ALTER INDEX emp_primary_key REBUILD;
- SQL>CREATE INDEX myindex ON emp(ename) NOSORT;
【編輯推薦】