oracle如何調(diào)優(yōu) oracle簡(jiǎn)單優(yōu)化必做的調(diào)整

oracle數(shù)據(jù)庫(kù)的性能優(yōu)化有哪些方法?

你最好買(mǎi)一本專(zhuān)門(mén)講ORACLE性能優(yōu)化的書(shū),好好看看\x0d\x0a1、調(diào)整數(shù)據(jù)庫(kù)服務(wù)器的性能\x0d\x0aOracle數(shù)據(jù)庫(kù)服務(wù)器是整個(gè)系統(tǒng)的核心,它的性能高低直接影響整個(gè)系統(tǒng)的性能,為了調(diào)整Oracle數(shù)據(jù)庫(kù)服務(wù)器的性能,主要從以下幾個(gè)方面考慮: \x0d\x0a1.1、調(diào)整操作系統(tǒng)以適合Oracle數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行\(zhòng)x0d\x0aOracle數(shù)據(jù)庫(kù)服務(wù)器很大程度上依賴(lài)于運(yùn)行服務(wù)器的操作系統(tǒng),如果操作系統(tǒng)不能提供最好性能,那么無(wú)論如何調(diào)整,Oracle數(shù)據(jù)庫(kù)服務(wù)器也無(wú)法發(fā)揮其應(yīng)有的性能。 \x0d\x0a1.1.1、為Oracle數(shù)據(jù)庫(kù)服務(wù)器規(guī)劃系統(tǒng)資源 \x0d\x0a據(jù)已有計(jì)算機(jī)可用資源, 規(guī)劃分配給Oracle服務(wù)器資源原則是:盡可能使Oracle服務(wù)器使用資源最大化,特別在Client/Server中盡量讓服務(wù)器上所有資源都來(lái)運(yùn)行Oracle服務(wù)。 \x0d\x0a1.1.2、調(diào)整計(jì)算機(jī)系統(tǒng)中的內(nèi)存配置 \x0d\x0a多數(shù)操作系統(tǒng)都用虛存來(lái)模擬計(jì)算機(jī)上更大的內(nèi)存,它實(shí)際上是硬盤(pán)上的一定的磁盤(pán)空間。當(dāng)實(shí)際的內(nèi)存空間不能滿(mǎn)足應(yīng)用軟件的要求時(shí),操作系統(tǒng)就將用這部分的磁盤(pán)空間對(duì)內(nèi)存中的信息進(jìn)行頁(yè)面替換,這將引起大量的磁盤(pán)I/O操作,使整個(gè)服務(wù)器的性能下降。為了避免過(guò)多地使用虛存,應(yīng)加大計(jì)算機(jī)的內(nèi)存。 \x0d\x0a1.1.3、為Oracle數(shù)據(jù)庫(kù)服務(wù)器設(shè)置操作系統(tǒng)進(jìn)程優(yōu)先級(jí) \x0d\x0a不要在操作系統(tǒng)中調(diào)整Oracle進(jìn)程的優(yōu)先級(jí),因?yàn)樵贠racle數(shù)據(jù)庫(kù)系統(tǒng)中,所有的后臺(tái)和前臺(tái)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程執(zhí)行的是同等重要的工作,需要同等的優(yōu)先級(jí)。所以在安裝時(shí),讓所有的數(shù)據(jù)庫(kù)服務(wù)器進(jìn)程都使用缺省的優(yōu)先級(jí)運(yùn)行。 \x0d\x0a1.2、調(diào)整內(nèi)存分配\x0d\x0aOracle數(shù)據(jù)庫(kù)服務(wù)器保留3個(gè)基本的內(nèi)存高速緩存,分別對(duì)應(yīng)3種不同類(lèi)型的數(shù)據(jù):庫(kù)高速緩存,字典高速緩存和緩沖區(qū)高速緩存。庫(kù)高速緩存和字典高速緩存一起構(gòu)成共享池,共享池再加上緩沖區(qū)高速緩存便構(gòu)成了系統(tǒng)全程區(qū)(SGA)。SGA是對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行快速訪(fǎng)問(wèn)的一個(gè)系統(tǒng)全程區(qū),若SGA本身需要頻繁地進(jìn)行釋放、分配,則不能達(dá)到快速訪(fǎng)問(wèn)數(shù)據(jù)的目的,因此應(yīng)把SGA放在主存中,不要放在虛擬內(nèi)存中。內(nèi)存的調(diào)整主要是指調(diào)整組成SGA的內(nèi)存結(jié)構(gòu)的大小來(lái)提高系統(tǒng)性能,由于Oracle數(shù)據(jù)庫(kù)服務(wù)器的內(nèi)存結(jié)構(gòu)需求與應(yīng)用密切相關(guān),所以?xún)?nèi)存結(jié)構(gòu)的調(diào)整應(yīng)在磁盤(pán)I/O調(diào)整之前進(jìn)行。 \x0d\x0a1.2.1、庫(kù)緩沖區(qū)的調(diào)整 \x0d\x0a庫(kù)緩沖區(qū)中包含私用和共享SQL和PL/SQL區(qū),通過(guò)比較庫(kù)緩沖區(qū)的命中率決定它的大小。要調(diào)整庫(kù)緩沖區(qū),必須首先了解該庫(kù)緩沖區(qū)的活動(dòng)情況,庫(kù)緩沖區(qū)的活動(dòng)統(tǒng)計(jì)信息保留在動(dòng)態(tài)性能表v$librarycache數(shù)據(jù)字典中,可通過(guò)查詢(xún)?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect sum(pins),sum(reloads) from v$librarycache; \x0d\x0a \x0d\x0aPins列給出SQL語(yǔ)句,PL/SQL塊及被訪(fǎng)問(wèn)對(duì)象定義的總次數(shù);Reloads列給出SQL 和PL/SQL塊的隱式分析或?qū)ο蠖x重裝載時(shí)在庫(kù)程序緩沖區(qū)中發(fā)生的錯(cuò)誤。如果sum(pins)/sum(reloads) ≈0,則庫(kù)緩沖區(qū)的命中率合適;若sum(pins)/sum(reloads)1, 則需調(diào)整初始化參數(shù) shared_pool_size來(lái)重新調(diào)整分配給共享池的內(nèi)存量。 \x0d\x0a1.2.2、數(shù)據(jù)字典緩沖區(qū)的調(diào)整 \x0d\x0a數(shù)據(jù)字典緩沖區(qū)包含了有關(guān)數(shù)據(jù)庫(kù)的結(jié)構(gòu)、用戶(hù)、實(shí)體信息。數(shù)據(jù)字典的命中率,對(duì)系統(tǒng)性能影響極大。數(shù)據(jù)字典緩沖區(qū)的使用情況記錄在動(dòng)態(tài)性能表v$librarycache中,可通過(guò)查詢(xún)?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect sum(gets),sum(getmisses) from v$rowcache; \x0d\x0a \x0d\x0aGets列是對(duì)相應(yīng)項(xiàng)請(qǐng)求次數(shù)的統(tǒng)計(jì);Getmisses 列是引起緩沖區(qū)出錯(cuò)的數(shù)據(jù)的請(qǐng)求次數(shù)。對(duì)于頻繁訪(fǎng)問(wèn)的數(shù)據(jù)字典緩沖區(qū),sum(getmisses)/sum(gets)10%~15%。若大于此百分?jǐn)?shù),則應(yīng)考慮增加數(shù)據(jù)字典緩沖區(qū)的容量,即需調(diào)整初始化參數(shù)shared_pool_size來(lái)重新調(diào)整分配給共享池的內(nèi)存量。 \x0d\x0a1.2.3、緩沖區(qū)高速緩存的調(diào)整 \x0d\x0a用戶(hù)進(jìn)程所存取的所有數(shù)據(jù)都是經(jīng)過(guò)緩沖區(qū)高速緩存來(lái)存取,所以該部分的命中率,對(duì)性能至關(guān)重要。緩沖區(qū)高速緩存的使用情況記錄在動(dòng)態(tài)性能表v$sysstat中,可通過(guò)查詢(xún)?cè)摫韥?lái)了解其活動(dòng)情況,以決定如何調(diào)整。 \x0d\x0a \x0d\x0aSelect name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads'); \x0d\x0a \x0d\x0adbblock gets和consistent gets的值是請(qǐng)求數(shù)據(jù)緩沖區(qū)中讀的總次數(shù)。physical reads的值是請(qǐng)求數(shù)據(jù)時(shí)引起從盤(pán)中讀文件的次數(shù)。從緩沖區(qū)高速緩存中讀的可能性的高低稱(chēng)為緩沖區(qū)的命中率,計(jì)算公式: \x0d\x0a \x0d\x0aHit Ratio=1-(physical reds/(dbblock gets+consistent gets)) \x0d\x0a \x0d\x0a如果Hit Ratio60%~70%,則應(yīng)增大db_block_buffers的參數(shù)值。db_block_buffers可以調(diào)整分配給緩沖區(qū)高速緩存的內(nèi)存量,即db_block_buffers可設(shè)置分配緩沖區(qū)高速緩存的數(shù)據(jù)塊的個(gè)數(shù)。緩沖區(qū)高速緩存的總字節(jié)數(shù)=db_block_buffers的值*db_block_size的值。db_block_size 的值表示數(shù)據(jù)塊大小的字節(jié)數(shù),可查詢(xún) v$parameter 表: \x0d\x0a \x0d\x0aselect name,value from v$parameter where name='db_block_size'; \x0d\x0a \x0d\x0a在修改了上述數(shù)據(jù)庫(kù)的初始化參數(shù)以后,必須先關(guān)閉數(shù)據(jù)庫(kù),在重新啟動(dòng)數(shù)據(jù)庫(kù)后才能使新的設(shè)置起作用。

成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷(xiāo),提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站開(kāi)發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營(yíng)銷(xiāo)、微信小程序定制開(kāi)發(fā)、公眾號(hào)商城、等建站開(kāi)發(fā),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專(zhuān)家,為不同類(lèi)型的客戶(hù)提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶(hù)在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。

如何對(duì)Oracle中的優(yōu)化器進(jìn)行評(píng)估優(yōu)化

Oracle優(yōu)化器在任何可能的時(shí)候都會(huì)對(duì)表達(dá)式進(jìn)行評(píng)估 并且把特定的語(yǔ)法結(jié)構(gòu)轉(zhuǎn)換成等價(jià)的結(jié)構(gòu) 這么做的原因是

·要么結(jié)果表達(dá)式能夠比源表達(dá)式具有更快的速度

·要么源表達(dá)式只是結(jié)果表達(dá)式的一個(gè)等價(jià)語(yǔ)義結(jié)構(gòu)

不同的SQL結(jié)構(gòu)有時(shí)具有同樣的操作(例如 = ANY (subquery) and IN (subquery)) Oracle會(huì)把他們映射到一個(gè)單一的語(yǔ)義結(jié)構(gòu)

下面將討論優(yōu)化器如何評(píng)估優(yōu)化如下的情況和表達(dá)式

常量 LIKE 操作符 IN 操作符 ANY和SOME 操作符 ALL 操作符 BEEEN 操作符 NOT 操作符

傳遞(Transitivity) 確定性(DETERMINISTIC)函數(shù)

常量

常量的計(jì)算是在語(yǔ)句被優(yōu)化時(shí)一次性完成 而不是在每次執(zhí)行時(shí) 下面是檢索月薪大于 的的表達(dá)式 · sal / · sal · sal*

如果SQL語(yǔ)句包括第一種情況 優(yōu)化器會(huì)簡(jiǎn)單地把它轉(zhuǎn)變成第二種

注意 優(yōu)化器不會(huì)簡(jiǎn)化跨越比較符的表達(dá)式 例如第三條語(yǔ)句 鑒于此 應(yīng)用程序開(kāi)發(fā)者應(yīng)該盡量寫(xiě)用常量跟字段比較檢索的表達(dá)式 而不要將字段置于表達(dá)式當(dāng)中

LIKE 操作符

優(yōu)化器把使用LIKE操作符和一個(gè)沒(méi)有通配符的表達(dá)式組成的檢索表達(dá)式轉(zhuǎn)換為一個(gè)“=”操作符表達(dá)式

例如 優(yōu)化器會(huì)把表達(dá)式ename LIKE SMITH 轉(zhuǎn)換為ename = SMITH 優(yōu)化器只能轉(zhuǎn)換涉及到可變長(zhǎng)數(shù)據(jù)類(lèi)型的表達(dá)式 前一個(gè)例子中 如果ENAME字段的類(lèi)型是CHAR( ) 那么優(yōu)化器將不做任何轉(zhuǎn)換

IN 操作符

優(yōu)化器把使用IN比較符的檢索表達(dá)式替換為等價(jià)的使用“=”和“OR”操作符的檢索表達(dá)式 例如 優(yōu)化器會(huì)把表達(dá)式ename IN ( SMITH KING JONES )替換為: ename = SMITH OR ename = KING OR ename = JONES

ANY和SOME 操作符

優(yōu)化器將跟隨(following)值列表的ANY和SOME檢索條件用等價(jià)的同等操作符和“OR”組成的表達(dá)式替換

例如 優(yōu)化器將如下所示的第一條語(yǔ)句用第二條語(yǔ)句替換 · sal ANY (:first_sal :second_sal) · sal :first_sal OR sal :second_sal

優(yōu)化器將跟隨子查詢(xún)的ANY和SOME檢索條件轉(zhuǎn)換成由“EXISTS”和一個(gè)相應(yīng)的子查詢(xún)組成的檢索表達(dá)式

例如 優(yōu)化器將如下所示的第一條語(yǔ)句用第二條語(yǔ)句替換 · x ANY (SELECT sal FROM emp WHERE job = ANALYST ) · EXISTS (SELECT sal FROM emp WHERE job = ANALYST AND x sal)

ALL 操作符

優(yōu)化器將跟隨值列表的ALL操作符用等價(jià)的“=”和“AND”組成的表達(dá)式替換

例如 sal ALL (:first_sal :second_sal)表達(dá)式會(huì)被替換為 sal :first_sal AND sal :second_sal

對(duì)于跟隨子查詢(xún)的ALL表達(dá)式 優(yōu)化器用ANY和另外一個(gè)合適的比較符組成的表達(dá)式替換 例如 優(yōu)化器會(huì)把表達(dá)式 x ALL (SELECT sal FROM emp WHERE deptno = ) 替換為 NOT (x = ANY (SELECT sal FROM emp WHERE deptno = ))

接下來(lái)優(yōu)化器會(huì)把第二個(gè)表達(dá)式適用ANY表達(dá)式的轉(zhuǎn)換規(guī)則轉(zhuǎn)換為下面的表達(dá)式 NOT EXISTS (SELECT sal FROM emp WHERE deptno = AND x = sal)

BEEEN 操作符

優(yōu)化器總是用“=”和“=”比較符來(lái)等價(jià)的代替BEEEN操作符 例如 優(yōu)化器會(huì)把表達(dá)式sal BEEEN AND 用sal = AND sal = 來(lái)代替

NOT 操作符

優(yōu)化器總是試圖簡(jiǎn)化檢索條件以消除“NOT”邏輯操作符的影響 這將涉及到“NOT”操作符的消除以及代以相應(yīng)的比較運(yùn)算符

例如 優(yōu)化器將下面的第一條語(yǔ)句用第二條語(yǔ)句代替 · NOT deptno = (SELECT deptno FROM emp WHERE ename = TAYLOR ) · deptno (SELECT deptno FROM emp WHERE ename = TAYLOR )

通常情況下一個(gè)含有NOT操作符的語(yǔ)句有很多不同的寫(xiě)法 優(yōu)化器的轉(zhuǎn)換原則是使“NOT”操作符后邊的子句盡可能的簡(jiǎn)單 即使可能會(huì)使結(jié)果表達(dá)式包含了更多的“NOT”操作符 例如 優(yōu)化器將如下所示的第一條語(yǔ)句用第二條語(yǔ)句代替 · NOT (sal OR m IS NULL) · NOT sal AND m IS NOT NULL sal = AND m IS NOT NULL

傳遞(Transitivity)

如果“WHERE”子句的兩個(gè)檢索條件涉及了一個(gè)共同的字段 優(yōu)化器有時(shí)會(huì)根據(jù)傳遞原理推斷出第三個(gè)檢索條件 隨后可以根據(jù)這個(gè)推斷出的條件對(duì)語(yǔ)句 進(jìn)行優(yōu)化 推斷出的條件可能會(huì)激活一個(gè)原來(lái)的檢索條件沒(méi)有激活的潛在的接口路徑(access path) 注意 傳遞僅僅被用在基于代價(jià)(cost based)的優(yōu)化中

假設(shè)有一個(gè)這樣的包含兩個(gè)檢索條件的“WHERE”子句 WHERE 字段 常量 AND字段 = 字段 在這個(gè)例子里 優(yōu)化器會(huì)推斷出新的檢索條件 字段 常量 在這里 是比較運(yùn)算符= != ^= = 或 =之中的任何一個(gè) 常量是指任何一個(gè)涉及了操作符 SQL函數(shù) 文字 綁定變量(bind variables)或者關(guān)聯(lián)變量(correlation variables)的常量表達(dá)式

例如 考慮這樣一個(gè)包含兩個(gè)各自使用了字段EMP DEPTNO的檢索條件的WHERE子句的查詢(xún) SELECT * FROM emp dept WHERE emp deptno = AND emp deptno = dept deptno;

使用傳遞優(yōu)化 優(yōu)化器會(huì)推斷出如下條件 dept deptno = 如果有索引存在于EMP DEPTNO字段上 這個(gè)條件會(huì)使調(diào)用這個(gè)索引的接口路徑有效 注意 優(yōu)化器只能對(duì)字段關(guān)聯(lián)常量的表達(dá)式進(jìn)行推斷 而不是 字段關(guān)聯(lián)字段的表達(dá)式 例如 包含這樣條件的WHERE子句 字段 字段 AND 字段 = 字段 這種情況不能推斷出表達(dá)式 字段 p_oper 字段

確定性(DETERMINISTIC)函數(shù)

在某些情況下 優(yōu)化器能夠使用先前的函數(shù)返回結(jié)果而不是重新執(zhí)行用戶(hù)定義的函數(shù) 這僅僅對(duì)那些以限制的方式來(lái)執(zhí)行的函數(shù)來(lái)說(shuō)是有效的 這些函數(shù)必須 對(duì)任何的輸入都有同樣的返回值 函數(shù)的結(jié)果必須不能因?yàn)榘≒ACKAGE)變量 數(shù)據(jù)庫(kù)或會(huì)話(huà)(SESSION)的參數(shù)(例如NLS參數(shù))不同而變化 如果函數(shù)在將來(lái)重新定義 返回值必須對(duì)任何參數(shù)來(lái)說(shuō)仍然與以前的返回值相同 函數(shù)的創(chuàng)建者可以在以CREATE FUNCTION CREATE PACKAGE或者CREATE TYPE聲明函數(shù)時(shí)根據(jù)以上的要求使用DETERMINISTIC關(guān)鍵字向數(shù)據(jù)庫(kù)申明該函數(shù)為確定性函數(shù) 數(shù)據(jù)庫(kù)不會(huì)對(duì)確定性函數(shù)的合法性進(jìn)行校驗(yàn) 即使 一個(gè)函數(shù)明顯的使用了包變量或操作了數(shù)據(jù)庫(kù) 仍然可以被定義為確定性函數(shù) 這就是說(shuō)如何安全合法的使用和定義確定性函數(shù)是程序員的責(zé)任

lishixinzhi/Article/program/Oracle/201311/19040

如何設(shè)置使oracle10g性能最優(yōu) 性能調(diào)優(yōu) 步驟

一、 磁盤(pán)方面調(diào)優(yōu)

1. 規(guī)范磁盤(pán)陣列

RAID 10比RAID5更適用于OLTP系統(tǒng),RAID10先鏡像磁盤(pán),再對(duì)其進(jìn)行分段,由于對(duì)數(shù)據(jù)的小規(guī)模訪(fǎng)問(wèn)會(huì)比較頻繁,所以對(duì)OLTP適用。而RAID5,優(yōu)勢(shì)在于能夠充分利用磁盤(pán)空間,并且減少陣列的總成本。但是由于陣列發(fā)出一個(gè)寫(xiě)入請(qǐng)求時(shí),必須改變磁盤(pán)上已修改的塊,需要從磁盤(pán)上讀取“奇偶校驗(yàn)”塊,并且使用已修改的塊計(jì)算新的奇偶校驗(yàn)塊,然后把數(shù)據(jù)寫(xiě)入磁盤(pán),且會(huì)限制吞吐量。對(duì)性能有所影響,RAID5適用于OLAP系統(tǒng)。

2. 數(shù)據(jù)文件分布

分離下面的東西,避免磁盤(pán)競(jìng)爭(zhēng)

? SYSTEM表空間

? TEMPORARY表空間

? UNDO表空間

? 聯(lián)機(jī)重做日志(放在最快的磁盤(pán)上)

? 操作系統(tǒng)磁盤(pán)

? ORACLE安裝目錄

? 經(jīng)常被訪(fǎng)問(wèn)的數(shù)據(jù)文件

? 索引表空間

? 歸檔區(qū)域(應(yīng)該總是與將要恢復(fù)的數(shù)據(jù)分離)

例:

2 /: System

2 /u01: Oracle Software

2 /u02: Temporary tablespace, Control file1

2 /u03: Undo Segments, Control file2

2 /u04: Redo logs, Archive logs, Control file4

2 /u05: System, SYSAUX tablespaces

2 /u06: Data1 ,control file3

2 /u07: Index tablespace

2 /u08: Data2

通過(guò)下列語(yǔ)句查詢(xún)確定IO問(wèn)題

select name ,phyrds,phywrts,readtim,writetim

from v$filestat a,v$datafile b

where a.file#=b.file# order by readtim desc;

3. 增大日志文件

u 增大日志文件的大小,從而增加處理大型INSERT,DELETE,UPDATE操作的比例

查詢(xún)?nèi)罩疚募顟B(tài)

select a.member,b.* from v$logfile a,v$log b where a.GROUP#=b.GROUP#

查詢(xún)?nèi)罩厩袚Q時(shí)間

select b.RECID,to_char(b.FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') start_time,a.RECID,to_char(a.FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') end_time,round(((a.FIRST_TIME-b.FIRST_TIME)*25)*60,2) minutes

from v$log_history a ,v$log_history b

where a.RECID=b.RECID+1

order by a.FIRST_TIME desc

增大日志文件大小,以及對(duì)每組增加日志文件(一個(gè)主文件、一個(gè)多路利用文件)

u 增大LOG_CHECKPOINT_INTERVAL參數(shù),現(xiàn)已不提倡使用它

如果低于每半小時(shí)切換一次日志,就增大聯(lián)機(jī)重做日志大小。如果處理大型批處理任務(wù)時(shí)頻繁進(jìn)行切換,就增大聯(lián)機(jī)重做日志數(shù)目。

alter database add logfile member ‘/log.ora’ to group 1;

alter database drop logfile member ‘/log.ora’;

4. UNDO表空間

修改三個(gè)初始參數(shù):

UNDO_MANAGEMENT=AUTO

UNDO_TABLESPACE=CLOUDSEA_UNDO

UNDO_RETENTION=#of minutes

5. 不要在系統(tǒng)表空間中執(zhí)行排序

二、 初始化參數(shù)調(diào)優(yōu)

32位的尋址最大支持應(yīng)該是2的32次方,就是4G大小。但實(shí)際中32位系統(tǒng)(XP,windows2003等MS32位系統(tǒng), ubuntu等linux32 位系統(tǒng))要能利用4G內(nèi)存,都是采用內(nèi)存重映射技術(shù)。需要主板及系統(tǒng)的支持。如果關(guān)閉主板BIOS的重映射功能,系統(tǒng)將不能利用4G內(nèi)存,可能只達(dá)3.5G.而在windows下看到的一般為3.25G。所以SGA設(shè)置為內(nèi)存的40%,但不能超過(guò)3.25G

1. 重要初始化參數(shù)

l SGA_MAX_SIZE

l SGA_TARGET

l PGA_AGGREGATE_TARGET

l DB_CACHE_SIZE

l SHARED_POOL_SIZE

2. 調(diào)整DB_CACHE_SIZE來(lái)提高性能

它設(shè)定了用來(lái)存儲(chǔ)和處理內(nèi)存中數(shù)據(jù)的SGA區(qū)域大小,從內(nèi)存中取數(shù)據(jù)比磁盤(pán)快10000倍以上

根據(jù)以下查詢(xún)出數(shù)據(jù)緩存命中率

select sum(decode(name,'physical reads',value,0)) phys,

sum(decode(name,'db block gets',value,0)) gets,

sum(decode(name,'consistent gets',value,0)) con_gets,

(1- (sum(decode(name,'physical reads',value,0))/(sum(decode(name,'db block gets',value,0))+sum(decode(name,'consistent gets',value,0)) ) ))*100 Hitratio

from v$sysstat;

一個(gè)事務(wù)處理程序應(yīng)該保證得到95%以上的命中率,命中率從90%提高到98%可能會(huì)提高500%的性能,ORACLE正在通過(guò)CPU或服務(wù)時(shí)間與等待時(shí)間來(lái)分析系統(tǒng)性能,不太重視命中率,不過(guò)現(xiàn)在的庫(kù)緩存和字典緩存仍將命中率作為基本的調(diào)整方法。

在調(diào)整DB_CACHE_SIZE時(shí)使用V$DB_CACHE_ADVICE

select size_for_estimate, estd_physical_read_factor, estd_physical_reads

from v$db_cache_advice

where name = 'DEFAULT';

如果查詢(xún)的命中率過(guò)低,說(shuō)明缺少索引或者索引受到限制,通過(guò)V$SQLAREA視圖查詢(xún)執(zhí)行緩慢的SQL

3. 設(shè)定DB_BLOCK_SIZE來(lái)反映數(shù)據(jù)讀取量大小

OLTP一般8K

OLAP一般16K或者32K

4. 調(diào)整SHARED_POOL_SIZE以?xún)?yōu)化性能

正確地調(diào)整此參數(shù)可以同等可能地共享SQL語(yǔ)句,使得在內(nèi)存中便能找到使用過(guò)的SQL語(yǔ)句。為了減少硬解析次數(shù),優(yōu)化對(duì)共享SQL區(qū)域的使用,需盡量使用存儲(chǔ)過(guò)程、使用綁定變量

保證數(shù)據(jù)字典緩存命中率在95%以上

select ((1- sum(getmisses)/(sum(gets)+sum(getmisses)))*100) hitratio

from v$rowcache

where gets+getmisses 0;

如果命中率小于 99%,就可以考慮增加shared pool 以提高library cache 的命中率

SELECT SUM(PINS) "EXECUTIONS",SUM(RELOADS) "CACHE MISSES WHILE EXECUTING",1 - SUM(RELOADS)/SUM(PINS)

FROM V$LIBRARYCACHE;

通常規(guī)則是把它定為DB_CACHE_SIZE大小的50%-150%,在使用了大量存儲(chǔ)過(guò)程或程序包,但只有有限內(nèi)存的系統(tǒng)里,最后分配為150%。在沒(méi)有使用存儲(chǔ)過(guò)程但大量分配內(nèi)存給DB_CACHE_SIZE的系統(tǒng)里,這個(gè)參數(shù)應(yīng)該為10%-20%

5. 調(diào)整PGA_AGGREGATE_TARGET以?xún)?yōu)化對(duì)內(nèi)存的應(yīng)用

u OLTP :totalmemory*80%*20%

u DSS: totalmemory*80%*50%

6. 25個(gè)重要初始化參數(shù)

2 DB_CACHE_SIZE:分配給數(shù)據(jù)緩存的初始化內(nèi)存

2 SGA_TARGET:使用了自動(dòng)內(nèi)存管理,則設(shè)置此參數(shù)。設(shè)置為0可禁用它

2 PGA_AGGREGATE_TARGET:所有用戶(hù)PGA軟內(nèi)存最大值

2 SHARED_POOL_SIZE:分配給數(shù)據(jù)字典、SQL和PL/SQL的內(nèi)存

2 SGA_MAX_SIZE:SGA可動(dòng)態(tài)增長(zhǎng)的最大內(nèi)存

2 OPTIMIZER_MODE:

2 CURSOR_SHARING:把字面SQL轉(zhuǎn)換成帶綁定變更的SQL,可減少硬解析開(kāi)銷(xiāo)

2 OPTIMIZER_INDEX_COST_ADJ:索引掃描成本和全表掃描成本進(jìn)行調(diào)整,設(shè)定在1-10間會(huì)強(qiáng)制頻繁地使用索引,保證索引可用性

2 QUERY_REWRITE_ENABLED:用于啟用具體化視圖和基于函數(shù)的索引功能

2 DB_FILE_MULTIBLOCK_READ_COUNT:對(duì)于全表掃描,為了更有效執(zhí)行IO,此參數(shù)可在一次IO中讀取多個(gè)塊

2 LOG_BUFFER:為內(nèi)存中沒(méi)有提交的事務(wù)分配緩沖區(qū)(非動(dòng)態(tài)參數(shù))

2 DB_KEEP_CACHE_SIZE:分配給KEEP池或者額外數(shù)據(jù)緩存的內(nèi)存

2 DB_RECYCLE_CACHE_SIZE:

2 DBWR_IO_SLAVES:如果沒(méi)有異步IO,參數(shù)等同于DB_WRITER_PROCESSES模擬異步IO而分配的從SGA到磁盤(pán)的寫(xiě)入器數(shù)。如果有異步IO,則使用DB_WRITER_PROCESSES設(shè)置多個(gè)寫(xiě)程序,在DBWR期間更快地寫(xiě)出臟塊

2 LARGE_POOL_SIZE:分配給大型PLSQL或其他一些很少使用的ORACLE選項(xiàng)LARGET池的總塊數(shù)

2 STATISTICS_LEVEL:?jiǎn)⒂妙檰?wèn)信息,并可選擇提供更多OS統(tǒng)計(jì)信息來(lái)改進(jìn)優(yōu)化器決策。默認(rèn):TYPICAL

2 JAVA_POOL_SIZE:為JVM使用的JAVA存儲(chǔ)過(guò)程所分配的內(nèi)存

2 JAVA_MAX_SESSIONSPACE_SIZE:跟蹤JAVA類(lèi)的用戶(hù)會(huì)話(huà)狀態(tài)所用內(nèi)存上限

2 MAX_SHARED_SERVERS:當(dāng)使用共享服務(wù)器時(shí)的共享服務(wù)器上限

2 WORKAREA_SIZE_POLICY:?jiǎn)⒂肞GA大小自動(dòng)管理

2 FAST_START_MTTR_TARGET:完成一次崩潰恢復(fù)的大概時(shí)間/S

2 LOG_CHECKPOINT_INTERVAL:檢查點(diǎn)頻率

2 OPEN_CURSORS:指定了保存用戶(hù)語(yǔ)句的專(zhuān)用區(qū)域大小,如此設(shè)置過(guò)高會(huì)導(dǎo)致ORA-4031

2 DB_BLOCK_SIZE:數(shù)據(jù)庫(kù)默認(rèn)塊大小

2 OPTIMIZER_DYNAMIC_SAMPLING:控制動(dòng)態(tài)抽樣查詢(xún)讀取的塊數(shù)量,對(duì)正在使用全局臨時(shí)表的系統(tǒng)非常有用

三、 SQL調(diào)優(yōu)1. 使用提示

1.1 改變執(zhí)行路徑

通過(guò)OPTIMIZER_MODE參數(shù)指定優(yōu)化器使用方法,默認(rèn)ALL_ROWS

? ALL_ROWS 可得最佳吞吐量執(zhí)行查詢(xún)所有行

? FIRST_ROWS(n) 可使優(yōu)化器最快檢索出第一行:

select /*+ FIRST_ROWS(1) */ store_id,… from tbl_store

1.2 使用訪(fǎng)問(wèn)方法提示

允許開(kāi)發(fā)人員改變?cè)L問(wèn)的實(shí)際查詢(xún)方式,經(jīng)常使用INDEX提示

? CLUSTER 強(qiáng)制使用集群

? FULL

? HASH

? INDEX 語(yǔ)法:/*+ INDEX (TABLE INDEX1,INDEX2….) */ COLUMN 1,….

當(dāng)不指定任何INDEX時(shí),優(yōu)化器會(huì)選擇最佳的索引

SELECT /*+ INDEX */ STORE_ID FROM TBL_STORE

? INDEX_ASC 8I開(kāi)始默認(rèn)是升序,所以與INDEX同效

? INDEX_DESC

? INDEX_COMBINE 用來(lái)指定多個(gè)位圖索引,而不是選擇其中最好的索引

? INDEX_JOIN 只需訪(fǎng)問(wèn)這些索引,節(jié)省了重新檢索表的時(shí)間

? INDEX_FFS 執(zhí)行一次索引的快速全局掃描,只處理索引,不訪(fǎng)問(wèn)具體表

? INDEX_SS

? INDEX_SSX_ASC

? INDEX_SS_DESC

? NO_INDEX

? NO_INDEX_FFS

? NO_INDEX_SS

1.3 使用查詢(xún)轉(zhuǎn)換提示

對(duì)于數(shù)據(jù)倉(cāng)庫(kù)非常有幫助

? FACT

? MERGE

? NO_EXPAND 語(yǔ)法:/*+ NO_EXPAND */ column1,…

保證OR組合起的IN列表不會(huì)陷入困境,/*+ FIRST_ROWS NO_EXPAND */

? NO_FACT

? NO_MERGE

? NO_QUERY_TRANSFORMATION

? NO_REWRITE

? NO_STAR_TRANSFORMATION

? NO_UNSET

? REWRITE

? STAR_TRANSFORMATION

? UNSET

? USE_CONCAT

1.4 使用連接操作提示

顯示如何將連接表中的數(shù)據(jù)合并在一起,可用兩提示直接影響連接順序。LEADING指定連接順序首先使用的表,ORDERED告訴優(yōu)化器基于FROM子句中的表順序連接這些表,并使用第一個(gè)表作為驅(qū)動(dòng)表(最行訪(fǎng)問(wèn)的表)

ORDERED語(yǔ)法:/*+ ORDERED */ column 1,….

訪(fǎng)問(wèn)表順序根據(jù)FROM后的表順序來(lái)

LEADING語(yǔ)法:/*+ LEADING(TABLE1) */ column 1,….

類(lèi)似于ORDER,指定驅(qū)動(dòng)表

? NO_USE_HASH

? NO_USE_MERGE

? NO_USE_NL

? USE_HASH前提足夠的HASH_AREA_SIZE或PGA_AGGREGATE_TARGET

通??梢詾檩^大的結(jié)果集提供最佳的響應(yīng)時(shí)間

? USE_MERGE

? USE_NL 通??梢砸宰羁焖俣确祷匾粋€(gè)行

? USE_NL_WITH_INDEX

1.5 使用并行執(zhí)行

? NO_PARALLEL

? NO_PARALLEL_INDEX

? PARALLEL

? PARALLEL_INDEX

? PQ_DISTRIBUTE

1.6 其他提示

? APPEND 不會(huì)檢查當(dāng)前所用塊中是否有剩余空間,而直接插入到表中,會(huì)直接將數(shù)據(jù)添加到新的塊中。

? CACHE 會(huì)將全表掃描全部緩存到內(nèi)存中,這樣可直接在內(nèi)存中找到數(shù)據(jù),不用在磁盤(pán)上查詢(xún)

? CURSOR_SHARING_EXACT

? DRIVING_SITE

? DYNAMIC_SAMPLING

? MODEL_MIN_ANALYSIS

? NOAPPEND

? NOCACHE

? NO_PUSH_PRED

? NO_PUSH_SUBQ

? NO_PX_JOIN_FILTER

? PUSH_PRED

? PUSH_SUBQ 強(qiáng)制先執(zhí)行子查詢(xún),當(dāng)子查詢(xún)很快返回少量行時(shí),這些行可以用于限制外部查詢(xún)返回行數(shù),可極大地提高性能

例:select /*+PUSH_SUBQ */ emp.empno,emp.ename

From emp,orders

where emp.deptno=(select deptno from dept where loc=’1’)

? PX_JOIN_FILTER

? QB_NAME

2. 調(diào)整查詢(xún)

2.1 在V$SQLAREA中選出最占用資源的查詢(xún)

HASH_VALUE:SQL語(yǔ)句的Hash值。

ADDRESS:SQL語(yǔ)句在SGA中的地址。

PARSING_USER_ID:為語(yǔ)句解析第一條CURSOR的用戶(hù)

VERSION_COUNT:語(yǔ)句cursor的數(shù)量

KEPT_VERSIONS:

SHARABLE_MEMORY:cursor使用的共享內(nèi)存總數(shù)

PERSISTENT_MEMORY:cursor使用的常駐內(nèi)存總數(shù)

RUNTIME_MEMORY:cursor使用的運(yùn)行時(shí)內(nèi)存總數(shù)。

SQL_TEXT:SQL語(yǔ)句的文本(最大只能保存該語(yǔ)句的前1000個(gè)字符)。

MODULE,ACTION:用了DBMS_APPLICATION_INFO時(shí)session解析第一條cursor時(shí)信息

SORTS: 語(yǔ)句的排序數(shù)

CPU_TIME: 語(yǔ)句被解析和執(zhí)行的CPU時(shí)間

ELAPSED_TIME: 語(yǔ)句被解析和執(zhí)行的共用時(shí)間

PARSE_CALLS: 語(yǔ)句的解析調(diào)用(軟、硬)次數(shù)

EXECUTIONS: 語(yǔ)句的執(zhí)行次數(shù)

INVALIDATIONS: 語(yǔ)句的cursor失效次數(shù)

LOADS: 語(yǔ)句載入(載出)數(shù)量

ROWS_PROCESSED: 語(yǔ)句返回的列總數(shù)

select b.username,a.DISK_READS,a.EXECUTIONS,a.DISK_READS/decode(a.EXECUTIONS,0,1,a.EXECUTIONS) rds_exec_ratio,a.SQL_TEXT

from v$sqlarea a ,dba_users b

where a.PARSING_USER_ID=b.user_id and a.DISK_READS100 order by a.DISK_READS desc;

2.2 在V$SQL中選出最占用資源的查詢(xún)

與V$SQLAREA類(lèi)似

select * from

(select sql_text,rank() over (order by buffer_gets desc) as rank_buffers,to_char(100*ratio_to_report(buffer_gets) over (),'999.99') pct_bufgets from v$sql)

where rank_buffers 11

2.3 確定何時(shí)使用索引

2 當(dāng)查詢(xún)條件只需要返回很少的行(受限列)時(shí),則需要建立索引,不同的版本中這個(gè)返回要求不同

V5:20% V7:7% V8i,V9i:4% V10g: 5%

查看表上的索引

select a.table_name,a.index_name,a.column_name,a.column_position,a.table_owner

from dba_ind_columns a

where a.table_owner='CLOUDSEA'

2 修正差的索引,可使用提示來(lái)限制很差的索引,如INDEX,F(xiàn)ULL提示

2 在SELECT 和WHERE中的列使用索引

如: select name from tbl where no=?

建立索引:create index test on tbl(name,no) tablespace cloudsea_index storage(….)

對(duì)于系統(tǒng)中很關(guān)鍵的查詢(xún),可以考慮建立此類(lèi)連接索引

2 在一個(gè)表中有多個(gè)索引時(shí)可能出現(xiàn)麻煩,使用提示INDEX指定使用索引

2 使用索引合并,使用提示INDEX_JOIN

2 基于函數(shù)索引,由于使用了函數(shù)造成查詢(xún)很慢.必須基于成本的優(yōu)化模式,參數(shù):

QUERY_REWRITE_ENALED=TRUE

QUERY_REWRITE_INTEGRITY=TRUSTED (OR ENFORCED)

create index test on sum(test);

2.4 在內(nèi)存中緩存表

將常用的相對(duì)小的表緩存到內(nèi)存中,但注意會(huì)影響到嵌套循環(huán)連接上的驅(qū)動(dòng)表

alter table tablename cache;

2.5 使用EXISTS 與嵌套子查詢(xún) 代替IN

SELECT …FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT=’A’);

(方法一: 高效)

SELECT ….FROM EMP A,DEPT B WHERE A.DEPT_NO = B.DEPT(+) AND B.DEPT_NO IS NULL AND B.DEPT_CAT(+) = ‘A’

(方法二: 最高效)

SELECT ….FROM EMP E WHERE NOT EXISTS (SELECT ‘X’ FROM DEPT D WHERE D.DEPT_NO = E.DEPT_NO AND DEPT_CAT = ‘A’);

四、 使用STATSPACK和AWR報(bào)表調(diào)整等待和閂鎖

1. 10GR2里的腳本

在$ORACLE_HOME/RDBMS/ADMIN下

Spcreate.sql 通過(guò)調(diào)用spcusr.sql spctab.sql 和spcpkg.sql創(chuàng)建STATSPACK環(huán)境,使用SYSDBA運(yùn)行它

Spdrop.sql 調(diào)用sptab.sql和spdusr.sql刪除整個(gè)STATSPACK環(huán)境,使用SYSDBA運(yùn)行它

Spreport.sql 這是生成報(bào)表的主要腳本,由PERFSTAT用戶(hù)運(yùn)行

Sprepins.sql 為指定的數(shù)據(jù)庫(kù)和實(shí)例生成實(shí)例報(bào)表

Sprepsql.sql 為指定的SQL散列值生成SQL報(bào)表

Sprsqins.sql 為指定的數(shù)據(jù)庫(kù)和實(shí)例生成SQL報(bào)表

Spauto.sql 使用DBMS_JOB自動(dòng)進(jìn)行統(tǒng)計(jì)數(shù)據(jù)收集(照相)

Sprepcon.sql 配置SQLPLUS變量來(lái)設(shè)置像閾值這樣的內(nèi)容的配置文件

Spurge.sql 刪除給定數(shù)據(jù)庫(kù)實(shí)例一定范圍內(nèi)的快照ID,不刪除基線(xiàn)快照

Sptrunc.sql 截短STATSPACK表里所有性能數(shù)據(jù)

五、 執(zhí)行快速系統(tǒng)檢查1. 緩沖區(qū)命中率

查詢(xún)緩沖區(qū)命中率

select (1 - (sum(decode(name, 'physical reads',value,0)) /

(sum(decode(name, 'db block gets',value,0)) +

sum(decode(name, 'consistent gets',value,0))))) * 100 "Hit Ratio"

from v$sysstat;

oracle 性能調(diào)優(yōu)

TROUBLESHOOTING STEPS

For any ONE-TIME occurrence we can safely ignore the error. This error does not cause to any potential data corruption or any data loss. Check Note 35928.1 for known issues and two basic usages of OERI(12333):

Usage with 3 additional numeric values

Usage with 4 additional values ... new since 8.0.X

In case the errors are seen consistently and no known issues matches to your issue then do the following

Common Causes Solutions:

1. Check the client software version. An incompatible client software is a common cause of this error. Upgrade the client software to current version (i.e. match the server version).

The following note explains the supported combinations of clients for a particular RDBMS Server release.

Note 207303.1 Client / Server / Interoperability Support Between Different Oracle Versions

Similar issues are reported when the client installation is faulty.

2. An incompatible NLS Client setting can also trigger such internal errors. Check the NLS settings as explained in the following note.

Note 77442.1 ORA_NLS (ORA_NLS32, ORA_NLS33, ORA_NLS10) Environment Variables explained

3. There are a number of bugs associated with the use of bind peeking. Turn off bind peeking as follows:

alter system set "_optim_peek_user_binds"=false;

4. Please review your listener.log and SQLNET log for network errors at the time of the 1233 errors. Correct these errors.

Try to reproduce the issue from a different client machine, preferably from server. This will rule out the possibility of bad network. If the execution fails from a particular client then it could be due to the bad network from that client to server. The error ORA-600[12333] could occur when a request is being received from a network packet and the request code in the packet is not recognized.

5. Ask your sysadmin to correct any network delays. A slow network can lead to this error.

6. If the error still continues , then do the following to understand from where the error is generated.

We need to understand which session/program/application that triggers this issue. This shall be found from the trace files under the session state object '(session)'. Sometimes the ORA-00600 [12333] trace files will not capture the session information. In such cases we can check with the end users about any issues around the time-frame of this internal error.

There is a HIGH chance for application run-time exception to lead to this ORA-00600 [12333]. Due to the unhandled exceptions there is a chance for incomplete information passed to the server hence the internal errors are raised. In such cases, handling those exceptions (or) addressing those errors on the application code will resolve the issue.

In few cases, the problem application will work for a while before it terminates with the error. This could be due to the TIMEOUT settings at the Application Server (or) Forms Server.,etc. To resolve this either tune the failing application to complete within the TIMEOUT value (or) reset the TIMEOUT to an optimal value.

There could be more possibilities here; in simple words the approach should be from application side, which would help us to understand the other issues that triggered this network interruption (ORA-00600 [12333]).

Check the 'Current SQL Statement' section of the incident trace files. Does each trace file point to the same SQL statement. If so, there may be a problem with the code.

7. If you notice JDBC Client as the failing program under Session state object, please check the following

That you use latest compatible version of JDBC Drivers in your application side.

Note 430839.1 to verify the version of JDBC Drivers and for Installation steps.

Monitor and try to handle correctly the timeouts from the application

Check that idle or died programs/processes are not just killed at the client side but using a good cleaning procedure.

Increase queue sizes / buffers and similar from the jdbc side.

Further diagnostics regarding JDBC Application driver can be found:

Note 1361107.1 Suggestions For Troubleshooting ORA-3137 [12333] Errors Encountered When Using Oracle JDBC Driver

8. In-case if all the above suggestions does not help to identify the cause, and the ORA-00600 [12333] persists we may need to enable the networking tracings from the problem client and need to review the network traces to understand where the problem occurs. See Note 219968.1 Title: SQL*Net, Net8, Oracle Net Services - Tracing and Logging at a Glance. Check the network logs for errors and fix them with the network administrator.

E.g.:

12333錯(cuò)要 具體診斷的

如果自己搞不定可以找詩(shī)檀軟件專(zhuān)業(yè)ORACLE數(shù)據(jù)庫(kù)修復(fù)團(tuán)隊(duì)成員幫您恢復(fù)!

詩(shī)檀軟件專(zhuān)業(yè)數(shù)據(jù)庫(kù)修復(fù)團(tuán)隊(duì)

性能調(diào)優(yōu):ORACLE性能初步調(diào)整

在User Schema 上 用人工指定方式指定 Tmp 的tablespace 換句話(huà)說(shuō)要人工定義一個(gè)tmp 的tablespace 給user schema ——為colm v這個(gè)user單獨(dú)開(kāi)一個(gè)臨時(shí)表空間 個(gè)人認(rèn)為調(diào)整之后效果不會(huì)有很明顯的變化臨時(shí)表空間的作用是當(dāng)sql語(yǔ)句中出現(xiàn)order by group by(也就是需要排序的時(shí)候) 如果排序的數(shù)據(jù)比較少 就會(huì)在內(nèi)存中排序 排序的數(shù)據(jù)量很大時(shí) oracle會(huì)把排序的任務(wù)放在臨時(shí)表空間中完成 內(nèi)存中排序(邏輯排序)比在磁盤(pán)上排序(物理排序)理論上快 倍!所以臨時(shí)表空間很大并不是一件好事情 說(shuō)明sql中存在大量排序的動(dòng)作 sql語(yǔ)句需要優(yōu)化!??? 所以深圳那里需要看一下臨時(shí)表空間的大??!

當(dāng)然johanna的意見(jiàn)也會(huì)有一定的作用 臨時(shí)表空間獨(dú)立出來(lái)之后 就不會(huì)和sys system等一系列oracle 內(nèi)部使用臨時(shí)表空間的操作產(chǎn)生資源競(jìng)爭(zhēng)!

請(qǐng)檢查SQL 使用到的where 條件是否均有定index ? 除此以外 檢查使用到的where 條件最好以index 之順序來(lái)寫(xiě)——這部分比較復(fù)雜 也是性能最關(guān)鍵的地方 幾乎所有的oracle專(zhuān)家都認(rèn)為 %以上的性能調(diào)整都和sql語(yǔ)句優(yōu)化有關(guān) 需要check所有的sql語(yǔ)句where后面的條件是否有用到index的必要 ? 工程量比較浩大!需要一個(gè)個(gè)小心謹(jǐn)慎的check!

把index 做一次 dbms_stats dbms stats 是oracle內(nèi)部的api 可以對(duì)index table進(jìn)行分析 收集統(tǒng)計(jì)信息 這樣oracle優(yōu)化器就會(huì)有一個(gè)最佳的選擇 使性能達(dá)到最佳方法如下

SQLselect tt table_name tt num_rows tt blocks tt empty_blocks tt avg_row_len from dba_tables tt where tt owner= COLMTEST ; SQL select ttt index_name ttt num_rows ttt distinct_keys ttt avg_leaf_blocks_per_key ttt clustering_factor from dba_indexes ttt where ttt owner= COLMTEST ;

執(zhí)行上述兩條命令之后會(huì)發(fā)現(xiàn)除了table_name和index_name 其余列的統(tǒng)計(jì)信息都是不完全的

SQLexecute dbms_stats gather_schema_stats(ownname = COLMTEST cascade=true) ?

執(zhí)行完dbms_stats 再調(diào)用上述兩句語(yǔ)句 會(huì)發(fā)現(xiàn)所有的列基本上都已經(jīng)被填充!

PS 執(zhí)行統(tǒng)計(jì)比較慢 相當(dāng)于所有table index都掃描一遍的時(shí)間 COLMTEST 改一下另外 對(duì)單個(gè)表執(zhí)行統(tǒng)計(jì)分析的語(yǔ)句如下

EXECUTE dbms_stats gather_table_stats (ownname= citic tabname= col_cust_id estimate_percent= cascade=true)

做過(guò)以上處理之后 再看情形 ? 再依情況放參數(shù)

——參數(shù)暫時(shí)不用調(diào)整!

建議做一個(gè)STATSPACK通過(guò)Statspack我們可以很容易的確定Oracle數(shù)據(jù)庫(kù)的瓶頸所在 記錄數(shù)據(jù)庫(kù)性能狀態(tài) 迅速了解數(shù)據(jù)庫(kù)運(yùn)行狀況

方法如下

安裝Statspack安裝Statspack擁有SYSDBA(connect / as sysdba)權(quán)限的用戶(hù)登陸 需要在本地安裝或者通過(guò)telnet登陸到服務(wù)器 ——客戶(hù)端登錄不可以

必要條件 先創(chuàng)建名稱(chēng)為perfstat的表空間 至少 M

在那臺(tái)oracle數(shù)據(jù)庫(kù)上用colmv 登錄SQL*PLUS 然后輸入SQL connect sys/sys@(你們那里的sid) as sysdba SQL alter system set timed_statistics = true System altered——使用statspack收集統(tǒng)計(jì)信息時(shí)建議將該值設(shè)置為 TRUE 否則收集的統(tǒng)計(jì)信息大約只能起到 %的作用

SQL @C \oracle\ora \rdbms\admin\spcreate sql 輸入 perfstat_password 的值 ? perfstat輸入default_tablespace的值 ? perfstat輸入temporary_tablespace 的值 ? temp

NOTE SPCPKG plete Please check spcpkg lis for any errors ——需要出現(xiàn)上述語(yǔ)句才算成功 否則請(qǐng)查看 lis文件并執(zhí)行 進(jìn)行重建SQL @C \oracle\ora \rdbms\admin\spdrop sql SQL @C \oracle\ora \rdbms\admin\spcreate sql

查看文件夾會(huì)產(chǎn)生三個(gè)文件C \oracle\ora \bin spcpkg lis spctab lis spcusr lis

——從下面開(kāi)始都可以在客戶(hù)端SQL_PLUS進(jìn)行操作 手動(dòng)執(zhí)行STATSPACK收集統(tǒng)計(jì)信息SQL show user USER為 PERFSTAT SQL execute statspack snap ???? ——快照

然后需要經(jīng)過(guò) 個(gè)小時(shí)(跑批需要包含在里面) 再執(zhí)行SQL execute statspack snap ???? ——快照

最后生成STATSPACK調(diào)整報(bào)告

SQL @C:\oracle\ora \rdbms\admin\spreport sql;

Current Instance ~~~~~~~~~~~~~~~~ ? ?? DB Id??? DB Name????? Inst Num Instance ? COLM??????????????? colm ? Instances in this Statspack schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ?? DB Id??? Inst Num DB Name????? Instance???? Host ? ??????? COLM???????? colm???????? STEVENHUANG ? Using? for database Id Using????????? for instance number ? Completed Snapshots ? ??????????????????????? ???Snap??????????????????? Snap Instance???? DB Name???????? Id?? Snap Started??? Level Comment colm???????? COLM?????????? 月 : ???? ??????????????????????????? ???? ???????????????????????????? ??????????? 月 : ???? ??????????????????????????????? ??? Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 輸入 begin_snap 的值:? 輸入 end_snap 的值:? End?? Snapshot Id specified: ? Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is sp_ _ ? To use this name press return to continue otherwise enter an alternative 輸入 report_name 的值:? report txt ? End of Report

查看產(chǎn)生的report 文檔C \oracle\ora \bin\report txt

lishixinzhi/Article/program/Oracle/201311/17298

ORACLE性能調(diào)優(yōu)遵循的基本原則

任何事情都有它的源頭 要解決問(wèn)題 也得從源頭開(kāi)始 影響ORACLE性能的源頭非常多 主要包括如下方面 數(shù)據(jù)庫(kù)的硬件配置 CPU 內(nèi)存 網(wǎng)絡(luò)條件 CPU 在任何機(jī)器中CPU的數(shù)據(jù)處理能力往往是衡量計(jì)算機(jī)性能的一個(gè)標(biāo)志 并且ORACLE是一個(gè)提供并行能力的數(shù)據(jù)庫(kù)系統(tǒng) 在CPU方面的要求就更高了 如果運(yùn)行隊(duì)列數(shù)目超過(guò)了CPU處理的數(shù)目 性能就會(huì)下降 我們要解決的問(wèn)題就是要適當(dāng)增加CPU的數(shù)量了 當(dāng)然我們還可以將需要許多資源的進(jìn)程KILL掉 內(nèi)存 衡量機(jī)器性能的另外一個(gè)指標(biāo)就是內(nèi)存的多少了 在ORACLE中內(nèi)存和我們?cè)诮〝?shù)據(jù)庫(kù)中的交換區(qū)進(jìn)行數(shù)據(jù)的交換 讀數(shù)據(jù)時(shí) 磁盤(pán)I/O必須等待物理I/O操作完成 在出現(xiàn)ORACLE的內(nèi)存瓶頸時(shí) 我們第一個(gè)要考慮的是增加內(nèi)存 由于I/O的響應(yīng)時(shí)間是影響ORACLE性能的主要參數(shù) 我將在這方面進(jìn)行詳細(xì)的講解 網(wǎng)絡(luò)條件 NET*SQL負(fù)責(zé)數(shù)據(jù)在網(wǎng)絡(luò)上的來(lái)往 大量的SQL會(huì)令網(wǎng)絡(luò)速度變慢 比如 M的網(wǎng)卡和 的網(wǎng)卡就對(duì)NET*SQL有非常明顯的影響 還有交換機(jī) 集線(xiàn)器等等網(wǎng)絡(luò)設(shè)備的性能對(duì)網(wǎng)絡(luò)的影響很明顯 建議在任何網(wǎng)絡(luò)中不要試圖用 個(gè)集線(xiàn)器來(lái)將網(wǎng)段互聯(lián) OS參數(shù)的設(shè)置 下表給出了OS的參數(shù)設(shè)置及說(shuō)明 DBA可以根據(jù)實(shí)際需要對(duì)這些參數(shù)進(jìn)行設(shè)置 用戶(hù)SQL質(zhì)量 以上講的都是硬件方面的東西 在條件有限的條件下 我們可以調(diào)整應(yīng)用程序的SQL質(zhì)量 不要進(jìn)行全表掃描(Full Table Scan) 全表掃描導(dǎo)致大量的I/O 盡量建好和使用好索引 建索引也是有講究的 在建索引時(shí) 也不是索引越多越好 當(dāng)一個(gè)表的索引達(dá)到 個(gè)以上時(shí) ORACLE的性能可能還是改善不了 因?yàn)镺LTP系統(tǒng)每表超過(guò) 個(gè)索引即會(huì)降低性能 而且在一個(gè)sql 中 Oracle 從不能使用超過(guò) 個(gè)索引 當(dāng)我們用到GROUP BY和ORDER BY時(shí) ORACLE就會(huì)自動(dòng)對(duì)數(shù)據(jù)進(jìn)行排序 而ORACLE在INIT ORA中決定了sort_area_size區(qū)的大小 當(dāng)排序不能在我們給定的排序區(qū)完成時(shí) ORACLE就會(huì)在磁盤(pán)中進(jìn)行排序 也就是我們講的臨時(shí)表空間中排序 過(guò)多的磁盤(pán)排序?qū)?huì)令 free buffer waits 的值變高 而這個(gè)區(qū)間并不只是用于排序的 對(duì)于開(kāi)發(fā)人員我提出如下忠告: ) select update delete 語(yǔ)句中的子查詢(xún)應(yīng)當(dāng)有規(guī)律地查找少于 %的表行 如果一個(gè)語(yǔ)句查找的行數(shù)超過(guò)總行數(shù)的 % 它將不能通過(guò)使用索引獲得性能上的提高 ) 索引可能產(chǎn)生碎片 因?yàn)橛涗洀谋碇袆h除時(shí) 相應(yīng)也從表的索引中刪除 表釋放的空間可以再用 而索引釋放的空間卻不能再用 頻繁進(jìn)行刪除操作的被索引的表 應(yīng)當(dāng)階段性地重建索引 以避免在索引中造成空間碎片 影響性能 在許可的條件下 也可以階段性地truncate表 truncate命令刪除表中所有記錄 也刪除索引碎片 ) 在使用索引時(shí)一定要按索引對(duì)應(yīng)字段的順序進(jìn)行引用 ) 用(+)比用NOT IN更有效率 降低ORACLE的競(jìng)爭(zhēng) 先講幾個(gè)ORACLE的幾個(gè)參數(shù) 這幾個(gè)參數(shù)關(guān)系到ORACLE的競(jìng)爭(zhēng) ) freelists 和 freelist 組 他們負(fù)責(zé)ORACLE的處理表和索引的空間管理 ) pctfree 及 pctused 該參數(shù)決定了freelists 和 freelist 組的行為 pctfree 和pctused 參數(shù)的唯一目的就是為了控制塊如何在 freelists 中進(jìn)出設(shè)置好pctfree 及 pctused對(duì)塊在freelists的移走和讀取很重要 其他參數(shù)的設(shè)置 ) 包括SGA區(qū)(系統(tǒng)全局區(qū)) 系統(tǒng)全局區(qū)(SGA)是一個(gè)分配給Oracle 的包含一個(gè) Oracle 實(shí)例的數(shù)據(jù)庫(kù)的控制信息內(nèi)存段 主要包括數(shù)據(jù)庫(kù)高速緩存(the database buffer cache) 重演日志緩存(the redo log buffer) 共享池(the shared pool) 數(shù)據(jù)字典緩存(the data dictionary cache)以及其它各方面的信息 ) db_block_buffers(數(shù)據(jù)高速緩沖區(qū))訪(fǎng)問(wèn)過(guò)的數(shù)據(jù)都放在這一片內(nèi)存區(qū)域 該參數(shù)越大 Oracle在內(nèi)存中找到相同數(shù)據(jù)的可能性就越大 也即加快了查詢(xún)速度 ) share_pool_size (SQL共享緩沖池) 該參數(shù)是庫(kù)高速緩存和數(shù)據(jù)字典的高速緩存 ) Log_buffer (重演日志緩沖區(qū)) ) sort_area_size(排序區(qū)) ) processes (同時(shí)連接的進(jìn)程數(shù)) ) db_block_size (數(shù)據(jù)庫(kù)塊大小) Oracle默認(rèn)塊為 KB 太小了 因?yàn)槿绻覀冇幸粋€(gè) KB的數(shù)據(jù) 則 KB塊的數(shù)據(jù)庫(kù)要讀 次盤(pán) 才能讀完 而 KB塊的數(shù)據(jù)庫(kù)只要 次就讀完了 大大減少了I/O操作 數(shù)據(jù)庫(kù)安裝完成后 就不能再改變db_block_size的值了 只能重新建立數(shù)據(jù)庫(kù)并且建庫(kù)時(shí) 要選擇手工安裝數(shù)據(jù)庫(kù) ) open_links (同時(shí)打開(kāi)的鏈接數(shù)) ) dml_locks ) open_cursors (打開(kāi)光標(biāo)數(shù)) ) dbwr_io_slaves (后臺(tái)寫(xiě)進(jìn)程數(shù)) lishixinzhi/Article/program/Oracle/201311/17955

文章標(biāo)題:oracle如何調(diào)優(yōu) oracle簡(jiǎn)單優(yōu)化必做的調(diào)整
文章源于:http://muchs.cn/article48/hjsshp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、電子商務(wù)服務(wù)器托管、虛擬主機(jī)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)