oracle如何設(shè)置緩存 oracle緩存表到內(nèi)存中

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í)際上是硬盤上的一定的磁盤空間。當(dāng)實(shí)際的內(nèi)存空間不能滿足應(yīng)用軟件的要求時(shí),操作系統(tǒng)就將用這部分的磁盤空間對(duì)內(nèi)存中的信息進(jìn)行頁(yè)面替換,這將引起大量的磁盤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)在磁盤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í)引起從盤中讀文件的次數(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è)置起作用。

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

Oracle 11.2.0.4應(yīng)用緩存之三(緩存配置-預(yù)加載只讀緩存組)

4.在oracle 端做測(cè)試數(shù)據(jù)驗(yàn)證

7.1 測(cè)試Load (不符合3條件時(shí)的報(bào)錯(cuò)信息)

如何有效實(shí)現(xiàn)依賴Oracle的緩存策略

ASP.NET 中的緩存提供了對(duì)SQL依賴項(xiàng)的支持,也就是說(shuō)當(dāng)SQL SERVER數(shù)據(jù)庫(kù)中的表或行中的數(shù)據(jù)被更改后,緩存中的頁(yè)面就失效,否則,頁(yè)面輸出可一直保留在緩存當(dāng)中。這確實(shí)為程序員提供了方便。但微軟一向很小家子氣,只為使用自家產(chǎn)品SQL SERVER的程序員提供了方便,那些用Oracle數(shù)據(jù)庫(kù)的ASP.NET程序員怎么辦呢?

其實(shí)不用著急,因?yàn)锳SP.NET中的緩存還提供了對(duì)文件依賴項(xiàng)的支持,也就是緩存依賴于某個(gè)文件,該文件被修改后,緩存中的頁(yè)面就失效。只要巧妙利用ASP.NET的文件依賴項(xiàng)緩存策略和Oracle中的觸發(fā)器,就可輕松實(shí)現(xiàn)依賴Oracle的緩存策略。思路很簡(jiǎn)單,先將頁(yè)面的緩存策略設(shè)置為依賴某一個(gè)文件,再為Oracle中需要依賴的表添加一個(gè)觸發(fā)器,當(dāng)表中的數(shù)據(jù)被更改時(shí),修改緩存所依賴的文件中的內(nèi)容。

下面以一個(gè)小例子來(lái)具體說(shuō)明:

試驗(yàn)?zāi)康?Default.aspx頁(yè)面的緩存依賴于Oracle數(shù)據(jù)庫(kù)中SCOTT用戶的DEPT表,該表中數(shù)據(jù)被更改后,緩存中的頁(yè)面失效。緩存的過(guò)期時(shí)間為120秒。

一、設(shè)置網(wǎng)站頁(yè)面的緩存依賴于文件TextFile.txt詳見(jiàn)System.Web.Caching.Cache類 Asp.NET緩存 各種緩存依賴二、在Oracle數(shù)據(jù)庫(kù)中創(chuàng)建觸發(fā)器

1、觸發(fā)器被觸發(fā)時(shí)執(zhí)行PL/SQL代碼塊。PL/SQL代碼塊直接讀寫操作系統(tǒng)中的文件,需調(diào)用內(nèi)置的utl_file程序包。這需要先修改Oracle的初始化參數(shù)文件INIT.ORA,在其中添加參數(shù)utl_file_dir,來(lái)指定文件的目錄。修改INIT.ORA文件后,需重啟Oracle數(shù)據(jù)庫(kù),設(shè)置的參數(shù)才能生效。

在INIT.ORA文件中添加下面一行內(nèi)容:

utl_file_dir='E:/CSharp/CacheByOracleDependncy'

也可以設(shè)置為utl_file_dir=*,不指定具體目錄,即任何目錄都可以。

如果是Oracle 9i數(shù)據(jù)庫(kù),還有一種方法也能起到同樣的作用:在sys用戶下創(chuàng)建一個(gè)directory目錄(實(shí)際上是在sys用戶下的dir$表中增加一個(gè)對(duì)應(yīng)的OS_PATH),然后將對(duì)該directory對(duì)象的讀/寫操作的權(quán)限grant給public。

[sql] view plain copy

create or replace directory FILEPATH as 'E:/CSharp/CacheByOracleDependncy';grant read on directory FILEPATH to public;這里我使用的是第二種方法。

2、為所依賴的表(SCOTT用戶的DEPT表)創(chuàng)建一個(gè)觸發(fā)器:當(dāng)DEPT表中的數(shù)據(jù)更改后,觸發(fā)器就會(huì)將當(dāng)前系統(tǒng)時(shí)間寫入TextFile.txt文件中。

[sql] view plain copy

CREATE OR REPLACE TRIGGER

"SCOTT"."TEST_CACHE_BY_ORACLE_DEPENDNCY" AFTERINSERT

OR UPDATE

OR DELETE OF "DEPTNO", "DNAME", "LOC" ON "SCOTT"."DEPT" DECLAREfile_handle utl_file.file_type;

BEGIN

--打開(kāi)文件

file_handle := utl_file.fopen('FILEPATH','TextFile.txt','w');--將當(dāng)前系統(tǒng)時(shí)間寫入文件

IF utl_file.is_open(file_handle) THEN

utl_file.put_line(file_handle,to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'));END IF;

--關(guān)閉文件

utl_file.fclose(file_handle);

EXCEPTION

WHEN OTHERS THEN

BEGIN

IF utl_file.is_open(file_handle) THEN

utl_file.fclose(file_handle);

END IF;

EXCEPTION

WHEN OTHERS THEN

NULL;

END;

END;

如果應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器不是同一臺(tái)服務(wù)器可能會(huì)遇到項(xiàng)目無(wú)法成功訪問(wèn)文件進(jìn)行依賴的情況:

解決方法詳見(jiàn)ASP.Net訪問(wèn)網(wǎng)絡(luò)驅(qū)動(dòng)器(映射磁盤)

ORACLE中怎么設(shè)置SEQUENCE權(quán)限?

ORACLE中怎么設(shè)置SEQUENCE權(quán)限步驟如下:

1、Create Sequence

首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE權(quán)限。

創(chuàng)建語(yǔ)句如下:

CREATE?SEQUENCE seqTest

INCREMENT?BY?1?--?每次加幾個(gè)

START?WITH?1?--?從1開(kāi)始計(jì)數(shù)

NOMAXvalue?--?不設(shè)置最大值

NOCYCLE?--?一直累加,不循環(huán)

CACHE?10;?--設(shè)置緩存cache個(gè)序列,如果系統(tǒng)down掉了或者其它情況將會(huì)導(dǎo)致序列不連續(xù),也可以設(shè)置為---------NOCACHE

2、得到Sequence值?

定義好sequence后,你就可以用currVal,nextVal取得值。

CurrVal:返回 sequence的當(dāng)前值

NextVal:增加sequence的值,然后返回 增加后sequence值

得到值語(yǔ)句如下:

SELECT?Sequence名稱.CurrVal?FROM?DUAL;?

如得到上邊創(chuàng)建Sequence值的語(yǔ)句為:

select?seqtest.currval?from?dual

在Sql語(yǔ)句中可以使用sequence的地方:

- 不包含子查詢、snapshot、VIEW的 SELECT 語(yǔ)句

- INSERT語(yǔ)句的子查詢中

- INSERT語(yǔ)句的values中

- UPDATE 的 SET中

如在插入語(yǔ)句中

insert?into?表名(id,name)values(seqtest.Nextval,'sequence?插入測(cè)試');

3、Alter Sequence?

擁有ALTER ANY SEQUENCE 權(quán)限才能改動(dòng)sequence. 可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須 drop sequence 再 re-create。

4、Drop Sequence

DROP?SEQUENCE?seqTest;?

5、一個(gè)例子

create?or?replace?trigger?tri_test_id

before?insert?on?S_Depart???--S_Depart?是表名

for?each?row

declare

nextid?number;

begin

IF?:new.DepartId?IS?NULLor?:new.DepartId=0?THEN?--DepartId是列名

select?SEQ_ID.nextval?--SEQ_ID正是剛才創(chuàng)建的

into?nextid

from?sys.dual;

:new.DepartId:=nextid;

end?if;

end?tri_test_id;

文章題目:oracle如何設(shè)置緩存 oracle緩存表到內(nèi)存中
本文路徑:http://muchs.cn/article26/hjsocg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁(yè)設(shè)計(jì)公司、動(dòng)態(tài)網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站排名

廣告

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

手機(jī)網(wǎng)站建設(shè)