真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle怎么優(yōu)化系統(tǒng) oracle優(yōu)化方法

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

你最好買一本專門講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ù)器很大程度上依賴于運(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)存空間不能滿足應(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種不同類型的數(shù)據(jù):庫(kù)高速緩存,字典高速緩存和緩沖區(qū)高速緩存。庫(kù)高速緩存和字典高速緩存一起構(gòu)成共享池,共享池再加上緩沖區(qū)高速緩存便構(gòu)成了系統(tǒng)全程區(qū)(SGA)。SGA是對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行快速訪問(wèn)的一個(gè)系統(tǒng)全程區(qū),若SGA本身需要頻繁地進(jìn)行釋放、分配,則不能達(dá)到快速訪問(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),所以內(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ò)查詢?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塊及被訪問(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)、用戶、實(shí)體信息。數(shù)據(jù)字典的命中率,對(duì)系統(tǒng)性能影響極大。數(shù)據(jù)字典緩沖區(qū)的使用情況記錄在動(dòng)態(tài)性能表v$librarycache中,可通過(guò)查詢?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ì)于頻繁訪問(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用戶進(jìn)程所存取的所有數(shù)據(jù)都是經(jīng)過(guò)緩沖區(qū)高速緩存來(lái)存取,所以該部分的命中率,對(duì)性能至關(guān)重要。緩沖區(qū)高速緩存的使用情況記錄在動(dòng)態(tài)性能表v$sysstat中,可通過(guò)查詢?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ū)高速緩存中讀的可能性的高低稱為緩沖區(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ù),可查詢 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è)置起作用。

10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有常山免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

Oracle設(shè)置系統(tǒng)參數(shù)進(jìn)行性能優(yōu)化

一 SGA

Shared pool tunning

Shared pool的優(yōu)化應(yīng)該放在優(yōu)先考慮 因?yàn)橐粋€(gè)cache miss在shared pool中發(fā)生比在data buffer中發(fā)生導(dǎo)致的成本更高 由于dictionary數(shù)據(jù)一般比library cache中的數(shù)據(jù)在內(nèi)存中保存的時(shí)間長(zhǎng) 所以關(guān)鍵是library cache的優(yōu)化

Gets (parse)在namespace中查找對(duì)象的次數(shù)

Pins (execution)在namespace中讀取或執(zhí)行對(duì)象的次數(shù)

Reloads (reparse)在執(zhí)行階段library cache misses的次數(shù) 導(dǎo)致sql需要重新解析

) 檢查v$librarycache中sql area的gethitratio是否超過(guò) % 如果未超過(guò) % 應(yīng)該檢查應(yīng)用代碼 提高應(yīng)用代碼的效率

Select gethitratio from v$librarycache where namespace= sql area ;

) v$librarycache中reloads/pins的比率應(yīng)該小于 % 如果大于 % 應(yīng)該增加參數(shù)shared_pool_size的值

Select sum(pins) executions sum(reloads) cache misses sum(reloads)/sum(pins) from v$librarycache;

reloads/pins %有兩種可能 一種是library cache空間不足 一種是sql中引用的對(duì)象不合法

)shared pool reserved size一般是shared pool size的 % 不能超過(guò) % V$shared_pool_reserved中的request misses= 或沒(méi)有持續(xù)增長(zhǎng) 或者free_memory大于shared pool reserved size的 % 表明shared pool reserved size過(guò)大 可以壓縮

)將大的匿名pl/sql代碼塊轉(zhuǎn)換成小的匿名pl/sql代碼塊調(diào)用存儲(chǔ)過(guò)程

)從 i開(kāi)始 可以將execution plan與sql語(yǔ)句一起保存在library cache中 方便進(jìn)行性能診斷 從v$sql_plan中可以看到execution plans

)保留大的對(duì)象在shared pool中 大的對(duì)象是造成內(nèi)存碎片的主要原因 為了騰出空間許多小對(duì)象需要移出內(nèi)存 從而影響了用戶的性能 因此需要將一些常用的大的對(duì)象保留在shared pool中 下列對(duì)象需要保留在shared pool中

a 經(jīng)常使用的存儲(chǔ)過(guò)程

b 經(jīng)常操作的表上的已編譯的觸發(fā)器

c Sequence 因?yàn)镾equence移出shared pool后可能產(chǎn)生號(hào)碼丟失

查找沒(méi)有保存在library cache中的大對(duì)象

Select * from v$db_object_cache where sharable_mem and

type in ( PACKAGE PROCEDURE FUNCTION PACKAGE BODY ) and kept= NO ;

將這些對(duì)象保存在library cache中

Execute dbms_shared_pool keep( package_name );

對(duì)應(yīng)腳本 dbmspool sql

)查找是否存在過(guò)大的匿名pl/sql代碼塊 兩種解決方案

A.轉(zhuǎn)換成小的匿名塊調(diào)用存儲(chǔ)過(guò)程

B.將其保留在shared pool中

查找是否存在過(guò)大的匿名pl/sql塊

Select sql_text from v$sqlarea where mand_type= and length(sql_text) ;

)Dictionary cache的優(yōu)化

避免出現(xiàn)Dictionary cache的misses 或者misses的數(shù)量保持穩(wěn)定 只能通過(guò)調(diào)整shared_pool_size來(lái)間接調(diào)整dictionary cache的大小

Percent misses應(yīng)該很低 大部分應(yīng)該低于 % 合計(jì)應(yīng)該低于 %

Select sum(getmisses)/sum(gets) from v$rowcache;

若超過(guò) % 增加shared_pool_size的值

Buffer Cache

)granule大小的設(shè)置 db_cache_size以字節(jié)為單位定義了default buffer pool的大小

如果SGA M granule= M 否則granule= M 即需要調(diào)整sga的時(shí)候以granule為單位增加大小 并且sga的大小應(yīng)該是granule的整數(shù)倍

) 根據(jù)v$db_cache_advice調(diào)整buffer cache的大小

SELECT size_for_estimate buffers_for_estimate estd_physical_read_factor estd_physical_reads

FROM v$db_cache_advice WHERE NAME= DEFAULT AND advice_status= ON

AND block_size=(SELECT Value FROM v$parameter WHERE NAME= db_block_size );

estd_physical_read_factor=

) 統(tǒng)計(jì)buffer cache的cache hit ratio % 如果低于 % 可以用下列方案解決

◆增加buffer cache的值

◆使用多個(gè)buffer pool

◆Cache table

◆為 sorting and parallel reads 建獨(dú)立的buffer cache

SELECT NAME value FROM v$sysstat WHERE NAME IN ( session logical reads

physical reads physical reads direct physical reads direct(lob) );

Cache hit ratio= (physical reads physical reads direct physical reads direct (lob))/session logical reads;Select (phy value dir value lob value)/log value from v$sysstat log v$sysstat phy v$sysstat dir v$sysstat LOB where log name= session logical reads and phy name= physical reads and dir name= physical reads direct and lob name= physical reads direct (lob) ;

影響cache hit ratio的因素 全表掃描 應(yīng)用設(shè)計(jì) 大表的隨機(jī)訪問(wèn) cache hits的不均衡分布

)表空間使用自動(dòng)空間管理 消除了自由空間列表的需求 可以減少數(shù)據(jù)庫(kù)的競(jìng)爭(zhēng)

其他SGA對(duì)象

)redo log buffer

對(duì)應(yīng)的參數(shù)是log_buffer 缺省值與 OS相關(guān) 一般是 K 檢查v$session_wait中是否存在log buffer wait v$sysstat中是否存在redo buffer allocation retries

A 檢查是否存在log buffer wait

Select * from v$session_wait where event= log buffer wait ;

如果出現(xiàn)等待 一是可以增加log buffer的大小 也可以通過(guò)將log 文件移到訪問(wèn)速度更快的磁盤(pán)來(lái)解決

B

Select name value from v$sysstat where name in

( redo buffer allocation retries redo entries )

Redo buffer allocation retries接近 小于redo entries 的 % 如果一直在增長(zhǎng) 表明進(jìn)程已經(jīng)不得不等待redo buffer的空間 如果Redo buffer allocation retries過(guò)大 增加log_buffer的值

C 檢查日志文件上是否存在磁盤(pán)IO競(jìng)爭(zhēng)現(xiàn)象

Select event total_waits time_waited average_wait from v$system_event

where event like log file switch pletion% ;

如果存在競(jìng)爭(zhēng) 可以考慮將log文件轉(zhuǎn)移到獨(dú)立的 更快的存儲(chǔ)設(shè)備上或增大log文件

D 檢查點(diǎn)的設(shè)置是否合理

檢查alert log文件中 是否存在 checkpoint not plete

Select event total_waits time_waited average_wait from v$system_event

where event like log file switch (check% ;

如果存在等待 調(diào)整log_checkpoint_interval log_checkpoint_timeout的設(shè)置

E 檢查log archiver的工作

Select event total_waits time_waited average_wait from v$system_event

where event like log file switch (arch% ;

如果存在等待 檢查保存歸檔日志的存儲(chǔ)設(shè)備是否已滿 增加日志文件組 調(diào)整log_archiver_max_processes

F DB_block_checksum=true 因此增加了性能負(fù)擔(dān) (為了保證數(shù)據(jù)的一致性 oracle的寫(xiě)數(shù)據(jù)的時(shí)候加一個(gè)checksum在block上 在讀數(shù)據(jù)的時(shí)候?qū)hecksum進(jìn)行驗(yàn)證)

)java pool

對(duì)于大的應(yīng)用 java_pool_size應(yīng)= M 對(duì)于一般的java存儲(chǔ)過(guò)程 缺省的 M已經(jīng)夠用了

)檢查是否需要調(diào)整DBWn

lishixinzhi/Article/program/Oracle/201311/17744

優(yōu)化數(shù)據(jù)庫(kù)大幅度提高Oracle的性能

幾個(gè)簡(jiǎn)單的步驟大幅提高Oracle性能 我優(yōu)化數(shù)據(jù)庫(kù)的三板斧

數(shù)據(jù)庫(kù)優(yōu)化的討論可以說(shuō)是一個(gè)永恒的主題 資深的Oracle優(yōu)化人員通常會(huì)要求提出性能問(wèn)題的人對(duì)數(shù)據(jù)庫(kù)做一個(gè)statspack 貼出數(shù)據(jù)庫(kù)配置等等 還有的人認(rèn)為要抓出執(zhí)行最慢的語(yǔ)句來(lái)進(jìn)行優(yōu)化 但實(shí)際情況是 提出疑問(wèn)的人很可能根本不懂執(zhí)行計(jì)劃 更不要說(shuō)statspack了 而我認(rèn)為 數(shù)據(jù)庫(kù)優(yōu)化 應(yīng)該首先從大的方面考慮 網(wǎng)絡(luò) 服務(wù)器硬件配置 操作系統(tǒng)配置 Oracle服務(wù)器配置 數(shù)據(jù)結(jié)構(gòu)組織 然后才是具體的調(diào)整 實(shí)際上網(wǎng)絡(luò) 硬件等往往無(wú)法決定更換 應(yīng)用程序一般也無(wú)法修改 因此應(yīng)該著重從數(shù)據(jù)庫(kù)配置 數(shù)據(jù)結(jié)構(gòu)上來(lái)下手 首先讓數(shù)據(jù)庫(kù)有一個(gè)良好的配置 然后再考慮具體優(yōu)化某些過(guò)慢的語(yǔ)句 我在給我的用戶系統(tǒng)進(jìn)行優(yōu)化的過(guò)程中 總結(jié)了一些基本的 簡(jiǎn)單易行的辦法來(lái)優(yōu)化數(shù)據(jù)庫(kù) 算是我的三板斧 呵呵 不過(guò)請(qǐng)注意 這些不一定普遍使用 甚至有的會(huì)有副作用 但是對(duì)OLTP系統(tǒng) 基于成本的數(shù)據(jù)庫(kù)往往行之有效 不妨試試 (注 附件是Burleson寫(xiě)的用來(lái)報(bào)告數(shù)據(jù)庫(kù)性能等信息的腳本 本文用到)

一.設(shè)置合適的SGA

常常有人抱怨服務(wù)器硬件很好 但是Oracle就是很慢 很可能是內(nèi)存分配不合理造成的 ( )假設(shè)內(nèi)存有 M 這通常是小型應(yīng)用 建議Oracle的SGA大約 M 其中 共享池(SHARED_POOL_SIZE)可以設(shè)置 M到 M 根據(jù)實(shí)際的用戶數(shù) 查詢等來(lái)定 數(shù)據(jù)塊緩沖區(qū)可以大致分配 M M i下需要設(shè)置DB_BLOCK_BUFFERS DB_BLOCK_BUFFER*DB_BLOCK_SIZE等于數(shù)據(jù)塊緩沖區(qū)大小 i 下的數(shù)據(jù)緩沖區(qū)可以用db_cache_size來(lái)直接分配

( )假設(shè)內(nèi)存有 G Oracle 的SGA可以考慮分配 M 共享池分配 M到 M 數(shù)據(jù)緩沖區(qū)分配 M到 M

( )內(nèi)存 G SGA可以考慮分配 G 共享池 M到 M 剩下的給數(shù)據(jù)塊緩沖區(qū)

( )內(nèi)存 G以上 共享池 M到 M就足夠啦 再多也沒(méi)有太大幫助 (Biti_rainy有專述)數(shù)據(jù)緩沖區(qū)是盡可能的大 但是一定要注意兩個(gè)問(wèn)題 一是要給操作系統(tǒng)和其他應(yīng)用留夠內(nèi)存 二是對(duì)于 位的操作系統(tǒng) Oracle的SGA有 G的限制 有的 位操作系統(tǒng)上可以突破這個(gè)限制 方法還請(qǐng)看Biti的大作吧

二.分析表和索引 更改優(yōu)化模式

Oracle默認(rèn)優(yōu)化模式是CHOOSE 在這種情況下 如果表沒(méi)有經(jīng)過(guò)分析 經(jīng)常導(dǎo)致查詢使用全表掃描 而不使用索引 這通常導(dǎo)致磁盤(pán)I/O太多 而導(dǎo)致查詢很慢 如果沒(méi)有使用執(zhí)行計(jì)劃穩(wěn)定性 則應(yīng)該把表和索引都分析一下 這樣可能直接會(huì)使查詢速度大幅提升 分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令 對(duì)于少于 萬(wàn)的表 可以考慮分析整個(gè)表 對(duì)于很大的表 可以按百分比來(lái)分析 但是百分比不能過(guò)低 否則生成的統(tǒng)計(jì)信息可能不準(zhǔn)確 可以通過(guò)DBA_TABLES的LAST_ANALYZED列來(lái)查看表是否經(jīng)過(guò)分析或分析時(shí)間 索引可以通過(guò)DBA_INDEXES的LAST_ANALYZED列

下面通過(guò)例子來(lái)說(shuō)明分析前后的速度對(duì)比 (表CASE_GA_AJZLZ大約有 萬(wàn)數(shù)據(jù) 有主鍵)首先在SQLPLUS中打開(kāi)自動(dòng)查詢執(zhí)行計(jì)劃功能 (第一次要執(zhí)行\(zhòng)RDBMS\ADMIN\utlxplan sql來(lái)創(chuàng)建PLAN_TABLE這個(gè)表)

SQL SET AUTOTRACE ON SQLSET TIMING ON

通過(guò)SET AUTOTRACE ON 來(lái)查看語(yǔ)句的執(zhí)行計(jì)劃 通過(guò)SET TIMING ON 來(lái)查看語(yǔ)句運(yùn)行時(shí)間

SQL select count(*) from CASE_GA_AJZLZ; COUNT(*) 已用時(shí)間: : : Execution Plan SELECT STATEMENT Optimizer=CHOOSE SORT (AGGREGATE) TABLE ACCESS (FULL) OF CASE_GA_AJZLZ ……………………

請(qǐng)注意上面分析中的TABLE ACCESS(FULL) 這說(shuō)明該語(yǔ)句執(zhí)行了全表掃描 而且查詢使用了 秒 這時(shí)表還沒(méi)有經(jīng)過(guò)分析 下面我們來(lái)對(duì)該表進(jìn)行分析

SQL *** yze table CASE_GA_AJZLZ pute statistics;

表已分析 已用時(shí)間: : : 然后再來(lái)查詢

SQL select count(*) from CASE_GA_AJZLZ; COUNT(*) 已用時(shí)間: : : Execution Plan   SELECT STATEMENT Optimizer=FIRST_ROWS (Cost= Card= ) SORT (AGGREGATE) INDEX (FAST FULL SCAN) OF PK_AJZLZ (UNIQUE) (Cost= Card= ) …………………………

請(qǐng)注意 這次時(shí)間僅僅用了 秒!這要?dú)w功于INDEX(FAST FULL SCAN) 通過(guò)分析表 查詢使用了PK_AJZLZ索引 磁盤(pán)I/O大幅減少 速度也大幅提升!下面的實(shí)用語(yǔ)句可以

用來(lái)生成分析某個(gè)用戶的所有表和索引 假設(shè)用戶是GAXZUSR

SQL set pagesize SQL spool d:\ *** yze_tables sql; SQL select *** yze table ||owner|| ||table_name|| pute statistics; from dba_tables where owner= GAXZUSR ; SQL spool off SQL spool spool d:\ *** yze_indexes sql; SQL select *** yze index ||owner|| ||index_name|| pute statistics; from dba_indexes where owner= GAXZUSR ; SQL spool off SQL @d:\ *** yze_tables sql SQL @d:\ *** yze_indexes sql

解釋 上面的語(yǔ)句生成了兩個(gè)sql文件 分別分析全部的GAXZUSR的表和索引 如果需要按照百分比來(lái)分析表 可以修改一下腳本 通過(guò)上面的步驟 我們就完成了對(duì)表和索引的分析 可以測(cè)試一下速度的改進(jìn)啦 建議定期運(yùn)行上面的語(yǔ)句 尤其是數(shù)據(jù)經(jīng)過(guò)大量更新

當(dāng)然 也可以通過(guò)dbms_stats來(lái)分析表和索引 更方便一些 但是我仍然習(xí)慣上面的方法 因?yàn)槌晒εc否會(huì)直接提示出來(lái)

另外 我們可以將優(yōu)化模式進(jìn)行修改 optimizer_mode值可以是RULE CHOOSE FIRST_ROWS和ALL_ROWS 對(duì)于OLTP系統(tǒng) 可以改成FIRST_ROWS 來(lái)要求查詢盡快返回結(jié)果 這樣即使不用分析 在一般情況下也可以提高查詢性能 但是表和索引經(jīng)過(guò)分析后有助于找到最合適的執(zhí)行計(jì)劃

三.設(shè)置cursor_sharing=FORCE 或SIMILAR

這種方法是 i才開(kāi)始有的 oracle 不支持 通過(guò)設(shè)置該參數(shù) 可以強(qiáng)制共享只有文字不同的語(yǔ)句解釋計(jì)劃 例如下面兩條語(yǔ)句可以共享

SQL SELECT * FROM MYTABLE WHERE NAME= tom SQL SELECT * FROM MYTABLE WHERE NAME= turner

這個(gè)方法可以大幅降低緩沖區(qū)利用率低的問(wèn)題 避免語(yǔ)句重新解釋 通過(guò)這個(gè)功能 可以很大程度上解決硬解析帶來(lái)的性能下降的問(wèn)題 個(gè)人感覺(jué)可根據(jù)系統(tǒng)的實(shí)際情況 決定是否將該參數(shù)改成FORCE 該參數(shù)默認(rèn)是exact 不過(guò)一定要注意 修改之前 必須先給ORACLE打補(bǔ)丁 否則改之后oracle會(huì)占用 %的CPU 無(wú)法使用 對(duì)于ORACLE i 可以設(shè)置成SIMILAR 這個(gè)設(shè)置綜合了FORCE和EXACT的優(yōu)點(diǎn) 不過(guò)請(qǐng)慎用這個(gè)功能 這個(gè)參數(shù)也可能帶來(lái)很大的負(fù)面影響!

四.將常用的小表 索引釘在數(shù)據(jù)緩存KEEP池中

內(nèi)存上數(shù)據(jù)讀取速度遠(yuǎn)遠(yuǎn)比硬盤(pán)中讀取要快 據(jù)稱 內(nèi)存中數(shù)據(jù)讀的速度是硬盤(pán)的 倍!如果資源比較豐富 把常用的小的 而且經(jīng)常進(jìn)行全表掃描的表給釘內(nèi)存中 當(dāng)然是在好不過(guò)了 可以簡(jiǎn)單的通過(guò)ALTER TABLE tablename CACHE來(lái)實(shí)現(xiàn) 在ORACLE i之后可以使用ALTER TABLE table STORAGE(BUFFER_POOL KEEP) 一般來(lái)說(shuō) 可以考慮把 數(shù)據(jù)塊之內(nèi)的表放在keep池中 當(dāng)然要根據(jù)內(nèi)存大小等因素來(lái)定 關(guān)于如何查出那些表或索引符合條件 可以使用本文提供的access sql和access_report sql 這兩個(gè)腳本是著名的Oracle專家 Burleson寫(xiě)的 你也可以在讀懂了情況下根據(jù)實(shí)際情況調(diào)整一下腳本 對(duì)于索引 可以通過(guò)ALTER INDEX indexname STORAGE(BUFFER_POOL KEEP)來(lái)釘在KEEP池中

將表定在KEEP池中需要做一些準(zhǔn)備工作 對(duì)于ORACLE i 需要設(shè)置DB_KEEP_CACHE_SIZE 對(duì)于 i 需要設(shè)置buffer_pool_keep 在 i中 還要修改db_block_lru_latches 該參數(shù)默認(rèn)是 無(wú)法使用buffer_pool_keep 該參數(shù)應(yīng)該比 * *CPU數(shù)量少 但是要大于 才能設(shè)置DB_KEEP_CACHE_BUFFER buffer_pool_keep從db_block_buffers中分配 因此也要小于db_block_buffers 設(shè)置好這些參數(shù)后 就可以把常用對(duì)象永久釘在內(nèi)存里

五.設(shè)置optimizer_max_permutations

對(duì)于多表連接查詢 如果采用基于成本優(yōu)化(CBO) ORACLE會(huì)計(jì)算出很多種運(yùn)行方案

從中選擇出最優(yōu)方案 這個(gè)參數(shù)就是設(shè)置oracle究竟從多少種方案來(lái)選擇最優(yōu) 如果設(shè)置太大 那么計(jì)算最優(yōu)方案過(guò)程也是時(shí)間比較長(zhǎng)的 Oracle 和 i默認(rèn)是 建議改成 對(duì)于 i 已經(jīng)默認(rèn)是 了

六.調(diào)整排序參數(shù)

( ) SORT_AREA_SIZE:默認(rèn)的用來(lái)排序的SORT_AREA_SIZE大小是 K 通常顯得有點(diǎn)小 一般可以考慮設(shè)置成 M( ) 這個(gè)參數(shù)不能設(shè)置過(guò)大 因?yàn)槊總€(gè)連接都要分配同樣的排序內(nèi)存

lishixinzhi/Article/program/Oracle/201311/18879

ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化概述

實(shí)際上 為了保證ORACLE數(shù)據(jù)庫(kù)運(yùn)行在最佳的性能狀態(tài)下 在信息系統(tǒng)開(kāi)發(fā)之前就應(yīng)該考慮數(shù)據(jù)庫(kù)的優(yōu)化策略 優(yōu)化策略一般包括服務(wù)器操作系統(tǒng)參數(shù)調(diào)整 ORACLE數(shù)據(jù)庫(kù)參數(shù)調(diào)整 網(wǎng)絡(luò)性能調(diào)整 應(yīng)用程序SQL語(yǔ)句分析及設(shè)計(jì)等幾個(gè)方面 其中應(yīng)用程序的分析與設(shè)計(jì)是在信息系統(tǒng)開(kāi)發(fā)之前完成的

分析評(píng)價(jià)ORACLE數(shù)據(jù)庫(kù)性能主要有數(shù)據(jù)庫(kù)吞吐量 數(shù)據(jù)庫(kù)用戶響應(yīng)時(shí)間兩項(xiàng)指標(biāo) 數(shù)據(jù)庫(kù)吞吐量是指單位時(shí)間內(nèi)數(shù)據(jù)庫(kù)完成的SQL語(yǔ)句數(shù)目 數(shù)據(jù)庫(kù)用戶響應(yīng)時(shí)間是指用戶從提交SQL語(yǔ)句開(kāi)始到獲得結(jié)果的那一段時(shí)間 數(shù)據(jù)庫(kù)用戶響應(yīng)時(shí)間又可以分為系統(tǒng)服務(wù)時(shí)間和用戶等待時(shí)間兩項(xiàng) 即

數(shù)據(jù)庫(kù)用戶響應(yīng)時(shí)間=系統(tǒng)服務(wù)時(shí)間 + 用戶等待時(shí)間

上述公式告訴我們 獲得滿意的用戶響應(yīng)時(shí)間有兩個(gè)途徑 一是減少系統(tǒng)服務(wù)時(shí)間 即提高數(shù)據(jù)庫(kù)的吞吐量 二是減少用戶等待時(shí)間 即減少用戶訪問(wèn)同一數(shù)據(jù)庫(kù)資源的沖突率

性能優(yōu)化包括如下幾個(gè)部分

ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化之一 調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)

這一部分在開(kāi)發(fā)信息系統(tǒng)之前完成 程序員需要考慮是否使用ORACLE數(shù)據(jù)庫(kù)的分區(qū)功能 對(duì)于經(jīng)常訪問(wèn)的數(shù)據(jù)庫(kù)表是否需要建立索引等

ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化之二 調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計(jì)

這一部分也是在開(kāi)發(fā)信息系統(tǒng)之前完成 程序員在這一步需要考慮應(yīng)用程序使用什么樣的體系結(jié)構(gòu) 是使用傳統(tǒng)的Client/Server兩層體系結(jié)構(gòu) 還是使用Browser/Web/Database的三層體系結(jié)構(gòu) 不同的應(yīng)用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫(kù)資源是不同的

ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化之三 調(diào)整數(shù)據(jù)庫(kù)SQL語(yǔ)句

應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫(kù)中的SQL語(yǔ)句執(zhí)行 因此SQL語(yǔ)句的執(zhí)行效率最終決定了ORACLE數(shù)據(jù)庫(kù)的性能 ORACLE公司推薦使用ORACLE語(yǔ)句優(yōu)化器(Oracle Optimizer)和行鎖管理器(row level manager)來(lái)調(diào)整優(yōu)化SQL語(yǔ)句

ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化之四 調(diào)整服務(wù)器內(nèi)存分配

內(nèi)存分配是在信息系統(tǒng)運(yùn)行過(guò)程中優(yōu)化配置的 數(shù)據(jù)庫(kù)管理員可以根據(jù)數(shù)據(jù)庫(kù)運(yùn)行狀況調(diào)整數(shù)據(jù)庫(kù)系統(tǒng)全局區(qū)(SGA區(qū))的數(shù)據(jù)緩沖區(qū) 日志緩沖區(qū)和共享池的大小 還可以調(diào)整程序全局區(qū)(PGA區(qū))的大小 需要注意的是 SGA區(qū)不是越大越好 SGA區(qū)過(guò)大會(huì)占用操作系統(tǒng)使用的內(nèi)存而引起虛擬內(nèi)存的頁(yè)面交換 這樣反而會(huì)降低系統(tǒng)

ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化之五 調(diào)整硬盤(pán)I/O 這一步是在信息系統(tǒng)開(kāi)發(fā)之前完成的

數(shù)據(jù)庫(kù)管理員可以將組成同一個(gè)表空間的數(shù)據(jù)文件放在不同的硬盤(pán)上 做到硬盤(pán)之間I/O負(fù)載均衡

ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化之六 調(diào)整操作系統(tǒng)參數(shù)

例如 運(yùn)行在UNIX操作系統(tǒng)上的ORACLE數(shù)據(jù)庫(kù) 可以調(diào)整UNIX數(shù)據(jù)緩沖池的大小 每個(gè)進(jìn)程所能使用的內(nèi)存大小等參數(shù)

lishixinzhi/Article/program/Oracle/201311/17687

Oracle分區(qū)是怎樣優(yōu)化數(shù)據(jù)庫(kù)的?

Oracle的分區(qū)可以分為:列表分區(qū)、范圍分區(qū)、散列分區(qū)、復(fù)合分區(qū)。

1、增強(qiáng)可用性:如果表的一個(gè)分區(qū)由于系統(tǒng)故障而不能使用,表的其余好的分區(qū)仍可以使用;

2、減少關(guān)閉時(shí)間:如果系統(tǒng)故障只影響表的一部分分區(qū),那么只有這部分分區(qū)需要修復(fù),可能比整個(gè)大表修復(fù)花的時(shí)間更少;

3、維護(hù)輕松:如果需要建表,獨(dú)自管理每個(gè)公區(qū)比管理單個(gè)大表要輕松得多;

4、均衡I/O:可以把表的不同分區(qū)分配到不同的磁盤(pán)來(lái)平衡I/O改善性能;

5、改善性能:對(duì)大表的查詢、增加、修改等操作可以分解到表的不同分區(qū)來(lái)并行執(zhí)行,可使運(yùn)行速度更快;

6、分區(qū)對(duì)用戶透明:最終用戶感覺(jué)不到分區(qū)的存在。

oracle如何完成數(shù)據(jù)庫(kù)優(yōu)化

1、1、調(diào)整數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)。這一部分在開(kāi)發(fā)信息系統(tǒng)之前完成,程序員需要考慮是否使用ORACLE數(shù)據(jù)庫(kù)的分區(qū)功能,對(duì)于經(jīng)常訪問(wèn)的數(shù)據(jù)庫(kù)表是否需要建立索引等。

2、2、調(diào)整應(yīng)用程序結(jié)構(gòu)設(shè)計(jì)。這一部分也是在開(kāi)發(fā)信息系統(tǒng)之前完成,程序員在這一步需要考慮應(yīng)用程序使用什么樣的體系結(jié)構(gòu),是使用傳統(tǒng)的Client/Server兩層體系結(jié)構(gòu),還是使用Browser/Web/Database的三層體系結(jié)構(gòu)。不同的應(yīng)用程序體系結(jié)構(gòu)要求的數(shù)據(jù)庫(kù)資源是不同的。

3、3、調(diào)整數(shù)據(jù)庫(kù)SQL語(yǔ)句。應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫(kù)中的SQL語(yǔ)句執(zhí)行,因此SQL語(yǔ)句的執(zhí)行效率最終決定了ORACLE數(shù)據(jù)庫(kù)的性能。ORACLE公司推薦使用ORACLE語(yǔ)句優(yōu)化器(Oracle Optimizer)和行鎖管理器(row-level manager)來(lái)調(diào)整優(yōu)化SQL語(yǔ)句。

4、4、調(diào)整服務(wù)器內(nèi)存分配。內(nèi)存分配是在信息系統(tǒng)運(yùn)行過(guò)程中優(yōu)化配置的,數(shù)據(jù)庫(kù)管理員可以根據(jù)數(shù)據(jù)庫(kù)運(yùn)行狀況調(diào)整數(shù)據(jù)庫(kù)系統(tǒng)全局區(qū)(SGA區(qū))的數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)和共享池的大?。贿€可以調(diào)整程序全局區(qū)(PGA區(qū))的大小。需要注意的是,SGA區(qū)不是越大越好,SGA區(qū)過(guò)大會(huì)占用操作系統(tǒng)使用的內(nèi)存而引起虛擬內(nèi)存的頁(yè)面交換,這樣反而會(huì)降低系統(tǒng)。

5、5、調(diào)整硬盤(pán)I/O,這一步是在信息系統(tǒng)開(kāi)發(fā)之前完成的。數(shù)據(jù)庫(kù)管理員可以將組成同一個(gè)表空間的數(shù)據(jù)文件放在不同的硬盤(pán)上,做到硬盤(pán)之間I/O負(fù)載均衡。

6、6、調(diào)整操作系統(tǒng)參數(shù),例如:運(yùn)行在UNIX操作系統(tǒng)上的ORACLE數(shù)據(jù)庫(kù),可以調(diào)整UNIX數(shù)據(jù)緩沖池的大小,每個(gè)進(jìn)程所能使用的內(nèi)存大小等參數(shù)。

實(shí)際上,上述數(shù)據(jù)庫(kù)優(yōu)化措施之間是相互聯(lián)系的。ORACLE數(shù)據(jù)庫(kù)性能惡化表現(xiàn)基本上都是用戶響應(yīng)時(shí)間比較長(zhǎng),需要用戶長(zhǎng)時(shí)間的等待。但性能惡化的原因卻是多種多樣的,有時(shí)是多個(gè)因素共同造成了性能惡化的結(jié)果,這就需要數(shù)據(jù)庫(kù)管理員有比較全面的計(jì)算機(jī)知識(shí),能夠敏感地察覺(jué)到影響數(shù)據(jù)庫(kù)性能的主要原因所在。另外,良好的數(shù)據(jù)庫(kù)管理工具對(duì)于優(yōu)化數(shù)據(jù)庫(kù)性能也是很重要的。

ORACLE數(shù)據(jù)庫(kù)性能優(yōu)化工具

常用的數(shù)據(jù)庫(kù)性能優(yōu)化工具有:

1、1、ORACLE數(shù)據(jù)庫(kù)在線數(shù)據(jù)字典,ORACLE在線數(shù)據(jù)字典能夠反映出ORACLE動(dòng)態(tài)運(yùn)行情況,對(duì)于調(diào)整數(shù)據(jù)庫(kù)性能是很有幫助的。

2、2、操作系統(tǒng)工具,例如UNIX操作系統(tǒng)的vmstat,iostat等命令可以查看到系統(tǒng)系統(tǒng)級(jí)內(nèi)存和硬盤(pán)I/O的使用情況,這些工具對(duì)于管理員弄清出系統(tǒng)瓶頸出現(xiàn)在什么地方有時(shí)候很有用。

3、3、SQL語(yǔ)言跟蹤工具(SQL TRACE FACILITY),SQL語(yǔ)言跟蹤工具可以記錄SQL語(yǔ)句的執(zhí)行情況,管理員可以使用虛擬表來(lái)調(diào)整實(shí)例,使用SQL語(yǔ)句跟蹤文件調(diào)整應(yīng)用程序性能。SQL語(yǔ)言跟蹤工具將結(jié)果輸出成一個(gè)操作系統(tǒng)的文件,管理員可以使用TKPROF工具查看這些文件。

4、4、ORACLE Enterprise Manager(OEM),這是一個(gè)圖形的用戶管理界面,用戶可以使用它方便地進(jìn)行數(shù)據(jù)庫(kù)管理而不必記住復(fù)雜的ORACLE數(shù)據(jù)庫(kù)管理的命令。

5、5、EXPLAIN PLAN——SQL語(yǔ)言優(yōu)化命令,使用這個(gè)命令可以幫助程序員寫(xiě)出高效的SQL語(yǔ)言。

ORACLE數(shù)據(jù)庫(kù)的系統(tǒng)性能評(píng)估

信息系統(tǒng)的類型不同,需要關(guān)注的數(shù)據(jù)庫(kù)參數(shù)也是不同的。數(shù)據(jù)庫(kù)管理員需要根據(jù)自己的信息系統(tǒng)的類型著重考慮不同的數(shù)據(jù)庫(kù)參數(shù)。

1、1、在線事務(wù)處理信息系統(tǒng)(OLTP),這種類型的信息系統(tǒng)一般需要有大量的Insert、Update操作,典型的系統(tǒng)包括民航機(jī)票發(fā)售系統(tǒng)、銀行儲(chǔ)蓄系統(tǒng)等。OLTP系統(tǒng)需要保證數(shù)據(jù)庫(kù)的并發(fā)性、可靠性和最終用戶的速度,這類系統(tǒng)使用的ORACLE數(shù)據(jù)庫(kù)需要主要考慮下述參數(shù):

l l 數(shù)據(jù)庫(kù)回滾段是否足夠?

l l 是否需要建立ORACLE數(shù)據(jù)庫(kù)索引、聚集、散列?

l l 系統(tǒng)全局區(qū)(SGA)大小是否足夠?

l l SQL語(yǔ)句是否高效?

2、2、數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)(Data Warehousing),這種信息系統(tǒng)的主要任務(wù)是從ORACLE的海量數(shù)據(jù)中進(jìn)行查詢,得到數(shù)據(jù)之間的某些規(guī)律。數(shù)據(jù)庫(kù)管理員需要為這種類型的ORACLE數(shù)據(jù)庫(kù)著重考慮下述參數(shù):

l l 是否采用B*-索引或者bitmap索引?

l l 是否采用并行SQL查詢以提高查詢效率?

l l 是否采用PL/SQL函數(shù)編寫(xiě)存儲(chǔ)過(guò)程?

l l 有必要的話,需要建立并行數(shù)據(jù)庫(kù)提高數(shù)據(jù)庫(kù)的查詢效率

SQL語(yǔ)句的調(diào)整原則

SQL語(yǔ)言是一種靈活的語(yǔ)言,相同的功能可以使用不同的語(yǔ)句來(lái)實(shí)現(xiàn),但是語(yǔ)句的執(zhí)行效率是很不相同的。程序員可以使用EXPLAIN PLAN語(yǔ)句來(lái)比較各種實(shí)現(xiàn)方案,并選出最優(yōu)的實(shí)現(xiàn)方案??偟脕?lái)講,程序員寫(xiě)SQL語(yǔ)句需要滿足考慮如下規(guī)則:

1、1、盡量使用索引。試比較下面兩條SQL語(yǔ)句:

語(yǔ)句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN

(SELECT deptno FROM emp);

語(yǔ)句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS

(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);

這兩條查詢語(yǔ)句實(shí)現(xiàn)的結(jié)果是相同的,但是執(zhí)行語(yǔ)句A的時(shí)候,ORACLE會(huì)對(duì)整個(gè)emp表進(jìn)行掃描,沒(méi)有使用建立在emp表上的deptno索引,執(zhí)行語(yǔ)句B的時(shí)候,由于在子查詢中使用了聯(lián)合查詢,ORACLE只是對(duì)emp表進(jìn)行的部分?jǐn)?shù)據(jù)掃描,并利用了deptno列的索引,所以語(yǔ)句B的效率要比語(yǔ)句A的效率高一些。

2、2、選擇聯(lián)合查詢的聯(lián)合次序??紤]下面的例子:

SELECT stuff FROM taba a, tabb b, tabc c

WHERE a.acol between :alow and :ahigh

AND b.bcol between :blow and :bhigh

AND c.ccol between :clow and :chigh

AND a.key1 = b.key1

AMD a.key2 = c.key2;

這個(gè)SQL例子中,程序員首先需要選擇要查詢的主表,因?yàn)橹鞅硪M(jìn)行整個(gè)表數(shù)據(jù)的掃描,所以主表應(yīng)該數(shù)據(jù)量最小,所以例子中表A的acol列的范圍應(yīng)該比表B和表C相應(yīng)列的范圍小。

3、3、在子查詢中慎重使用IN或者NOT IN語(yǔ)句,使用where (NOT) exists的效果要好的多。

4、4、慎重使用視圖的聯(lián)合查詢,尤其是比較復(fù)雜的視圖之間的聯(lián)合查詢。一般對(duì)視圖的查詢最好都分解為對(duì)數(shù)據(jù)表的直接查詢效果要好一些。

5、5、可以在參數(shù)文件中設(shè)置SHARED_POOL_RESERVED_SIZE參數(shù),這個(gè)參數(shù)在SGA共享池中保留一個(gè)連續(xù)的內(nèi)存空間,連續(xù)的內(nèi)存空間有益于存放大的SQL程序包。

6、6、ORACLE公司提供的DBMS_SHARED_POOL程序可以幫助程序員將某些經(jīng)常使用的存儲(chǔ)過(guò)程“釘”在SQL區(qū)中而不被換出內(nèi)存,程序員對(duì)于經(jīng)常使用并且占用內(nèi)存很多的存儲(chǔ)過(guò)程“釘”到內(nèi)存中有利于提高最終用戶的響應(yīng)時(shí)間。

CPU參數(shù)的調(diào)整

CPU是服務(wù)器的一項(xiàng)重要資源,服務(wù)器良好的工作狀態(tài)是在工作高峰時(shí)CPU的使用率在90%以上。如果空閑時(shí)間CPU使用率就在90%以上,說(shuō)明服務(wù)器缺乏CPU資源,如果工作高峰時(shí)CPU使用率仍然很低,說(shuō)明服務(wù)器CPU資源還比較富余。

使用操作相同命令可以看到CPU的使用情況,一般UNIX操作系統(tǒng)的服務(wù)器,可以使用sar –u命令查看CPU的使用率,NT操作系統(tǒng)的服務(wù)器,可以使用NT的性能管理器來(lái)查看CPU的使用率。

數(shù)據(jù)庫(kù)管理員可以通過(guò)查看v$sysstat數(shù)據(jù)字典中“CPU used by this session”統(tǒng)計(jì)項(xiàng)得知ORACLE數(shù)據(jù)庫(kù)使用的CPU時(shí)間,查看“OS User level CPU time”統(tǒng)計(jì)項(xiàng)得知操作系統(tǒng)用戶態(tài)下的CPU時(shí)間,查看“OS System call CPU time”統(tǒng)計(jì)項(xiàng)得知操作系統(tǒng)系統(tǒng)態(tài)下的CPU時(shí)間,操作系統(tǒng)總的CPU時(shí)間就是用戶態(tài)和系統(tǒng)態(tài)時(shí)間之和,如果ORACLE數(shù)據(jù)庫(kù)使用的CPU時(shí)間占操作系統(tǒng)總的CPU時(shí)間90%以上,說(shuō)明服務(wù)器CPU基本上被ORACLE數(shù)據(jù)庫(kù)使用著,這是合理,反之,說(shuō)明服務(wù)器CPU被其它程序占用過(guò)多,ORACLE數(shù)據(jù)庫(kù)無(wú)法得到更多的CPU時(shí)間。

數(shù)據(jù)庫(kù)管理員還可以通過(guò)查看v$sesstat數(shù)據(jù)字典來(lái)獲得當(dāng)前連接ORACLE數(shù)據(jù)庫(kù)各個(gè)會(huì)話占用的CPU時(shí)間,從而得知什么會(huì)話耗用服務(wù)器CPU比較多。

出現(xiàn)CPU資源不足的情況是很多的:SQL語(yǔ)句的重解析、低效率的SQL語(yǔ)句、鎖沖突都會(huì)引起CPU資源不足。

1、數(shù)據(jù)庫(kù)管理員可以執(zhí)行下述語(yǔ)句來(lái)查看SQL語(yǔ)句的解析情況:

SELECT * FROM V$SYSSTAT

WHERE NAME IN

('parse time cpu', 'parse time elapsed', 'parse count (hard)');

這里parse time cpu是系統(tǒng)服務(wù)時(shí)間,parse time elapsed是響應(yīng)時(shí)間,用戶等待時(shí)間

waite time = parse time elapsed – parse time cpu

由此可以得到用戶SQL語(yǔ)句平均解析等待時(shí)間=waite time / parse count。這個(gè)平均等待時(shí)間應(yīng)該接近于0,如果平均解析等待時(shí)間過(guò)長(zhǎng),數(shù)據(jù)庫(kù)管理員可以通過(guò)下述語(yǔ)句

SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA

ORDER BY PARSE_CALLS;

來(lái)發(fā)現(xiàn)是什么SQL語(yǔ)句解析效率比較低。程序員可以優(yōu)化這些語(yǔ)句,或者增加ORACLE參數(shù)SESSION_CACHED_CURSORS的值。

2、數(shù)據(jù)庫(kù)管理員還可以通過(guò)下述語(yǔ)句:

SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA;

查看低效率的SQL語(yǔ)句,優(yōu)化這些語(yǔ)句也有助于提高CPU的利用率。

3、3、數(shù)據(jù)庫(kù)管理員可以通過(guò)v$system_event數(shù)據(jù)字典中的“l(fā)atch free”統(tǒng)計(jì)項(xiàng)查看ORACLE數(shù)據(jù)庫(kù)的沖突情況,如果沒(méi)有沖突的話,latch free查詢出來(lái)沒(méi)有結(jié)果。如果沖突太大的話,數(shù)據(jù)庫(kù)管理員可以降低spin_count參數(shù)值,來(lái)消除高的CPU使用率。

內(nèi)存參數(shù)的調(diào)整

內(nèi)存參數(shù)的調(diào)整主要是指ORACLE數(shù)據(jù)庫(kù)的系統(tǒng)全局區(qū)(SGA)的調(diào)整。SGA主要由三部分構(gòu)成:共享池、數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)。

1、 1、 共享池由兩部分構(gòu)成:共享SQL區(qū)和數(shù)據(jù)字典緩沖區(qū),共享SQL區(qū)是存放用戶SQL命令的區(qū)域,數(shù)據(jù)字典緩沖區(qū)存放數(shù)據(jù)庫(kù)運(yùn)行的動(dòng)態(tài)信息。數(shù)據(jù)庫(kù)管理員通過(guò)執(zhí)行下述語(yǔ)句:

select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache;

來(lái)查看共享SQL區(qū)的使用率。這個(gè)使用率應(yīng)該在90%以上,否則需要增加共享池的大小。數(shù)據(jù)庫(kù)管理員還可以執(zhí)行下述語(yǔ)句:

select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache;

查看數(shù)據(jù)字典緩沖區(qū)的使用率,這個(gè)使用率也應(yīng)該在90%以上,否則需要增加共享池的大小。

2、 2、 數(shù)據(jù)緩沖區(qū)。數(shù)據(jù)庫(kù)管理員可以通過(guò)下述語(yǔ)句:

SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets','physical reads');

來(lái)查看數(shù)據(jù)庫(kù)數(shù)據(jù)緩沖區(qū)的使用情況。查詢出來(lái)的結(jié)果可以計(jì)算出來(lái)數(shù)據(jù)緩沖區(qū)的使用命中率=1 - ( physical reads / (db block gets + consistent gets) )。

這個(gè)命中率應(yīng)該在90%以上,否則需要增加數(shù)據(jù)緩沖區(qū)的大小。

3、 3、 日志緩沖區(qū)。數(shù)據(jù)庫(kù)管理員可以通過(guò)執(zhí)行下述語(yǔ)句:

select name,value from v$sysstat where name in ('redo entries','redo log space requests');查看日志緩沖區(qū)的使用情況。查詢出的結(jié)果可以計(jì)算出日志緩沖區(qū)的申請(qǐng)失敗率:

申請(qǐng)失敗率=requests/entries,申請(qǐng)失敗率應(yīng)該接近于0,否則說(shuō)明日志緩沖區(qū)開(kāi)設(shè)太小,需要增加ORACLE數(shù)據(jù)庫(kù)的日志緩沖區(qū)。


當(dāng)前名稱:oracle怎么優(yōu)化系統(tǒng) oracle優(yōu)化方法
轉(zhuǎn)載來(lái)源:http://weahome.cn/article/hhgied.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部