日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

windows oracle 内存大,如何设计Oracle数据库内存的大小

發(fā)布時(shí)間:2024/9/27 windows 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows oracle 内存大,如何设计Oracle数据库内存的大小 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SGA:是用于存儲(chǔ)數(shù)據(jù)庫(kù)信息的內(nèi)存區(qū),該信息為數(shù)據(jù)庫(kù)進(jìn)程所共享。它包含Oracle 服務(wù)器的數(shù)據(jù)和控制信息,它是在Oracle服務(wù)器所駐留的計(jì)算機(jī)的實(shí)際內(nèi)存中得以分配,如果實(shí)際內(nèi)存不夠再往虛擬內(nèi)存中寫(xiě)。

PGA:是一塊包含一個(gè)服務(wù)進(jìn)程的數(shù)據(jù)和控制信息的內(nèi)存區(qū)域。它是Oracle在一個(gè)服務(wù)進(jìn)程啟動(dòng)時(shí)創(chuàng)建的,是非共享的。一個(gè)Oracle進(jìn)程擁有一個(gè)PGA內(nèi)存區(qū)。一個(gè)PGA也只能被擁有它的那個(gè)服務(wù)進(jìn)程所訪問(wèn),只有這個(gè)進(jìn)程中的Oracle代碼才能讀寫(xiě)它。因此,PGA中的結(jié)構(gòu)是不需要Latch保護(hù)的。

我們重點(diǎn)就是設(shè)置SGA,理論上SGA可占OS系統(tǒng)物理內(nèi)存的1/2——1/3

ORACLE給的建議是: OLTP系PGA=(Total Memory)*80%*20%。DSS系統(tǒng)PGA=(Total Memory)*80%*50%。

ORACLE建議一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,分80%的內(nèi)存給數(shù)據(jù)庫(kù),20%的內(nèi)存給操作系統(tǒng),那怎么給一個(gè)數(shù)據(jù)庫(kù)服務(wù)器配內(nèi)存呢?

SQL> select * from v$pgastat;

NAME???????????????????????????????????????????????????VALUE UNIT

------------------------------? ? ? ? ? ? ? ? ? ? ? ? ? ?---------- ------------

aggregate PGA target parameter? ? ? ? ?104857600 bytes

-----這個(gè)值等于參數(shù)PGA_AGGREGATE_TARGET的值,如果此值為0,表示禁用了PGA自動(dòng)管理。

aggregate PGA auto target????????????????????????????????????????? 75220992 bytes

-----表示PGA還能提供多少內(nèi)存給自動(dòng)運(yùn)行模式,通常這個(gè)值接近pga_aggregate_target-total pga inuse.

global memory bound??????????????????????????????????????????????? 20971520 bytes

-----工作區(qū)執(zhí)行的最大值,如果這個(gè)值小于1M,馬上增加PGA大小

total PGA inuse??????????????????????????????????????????????????? 30167040 bytes

-----當(dāng)前分配PGA的總大小,這個(gè)值有可能大于PGA,如果PGA設(shè)置太小.這個(gè)值接近

select sum(pga_used_mem) from v$process.

total PGA allocated????????????52124672 bytes

-----工作區(qū)花費(fèi)的總大小

maximum PGA allocated??????????????67066880 bytes

total freeable PGA memory????????????0 bytes?? --沒(méi)有了空閑的PGA

process count? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?23???????? --當(dāng)前有23個(gè)process

max processes count? ? ? ? ? ? ? ? ? ? ?25

PGA memory freed back to OS???????0 bytes

total PGA used for auto workareas??????8891392 bytes

maximum PGA used for auto workareas?????22263808 bytes

total PGA used for manual workareas? ?0 bytes??? --為0自動(dòng)管理

maximum PGA used for manual workareas?0 bytes??? --為0自動(dòng)管理

over allocation count? ?0

如果PGA設(shè)置太小,導(dǎo)致PGA有時(shí)大于PGA_AGGREGATE_TARGET的值,此處為0,說(shuō)明PGA沒(méi)有擴(kuò)展大于TARGET的值,如果此值出現(xiàn)過(guò),那么增加PGA大小。

bytes processed??????????124434432 bytes

extra bytes read/written??????0 bytes

cache hit percentage?????????100 percent? ---命中率為100%,如果太小增加PGA

recompute count (total)???????6651

19 rows selected

SQL> select max(pga_used_mem)/1024/1024 M from v$process;?? ----當(dāng)前一個(gè)process消耗最大的內(nèi)存

M

----------

9.12815189

SQL> select min(pga_used_mem)/1024/1024 M from v$process where pga_used_mem>0; ---process消耗最少內(nèi)存

M

----------

0.19186878

SQL> select max(pga_used_mem)/1024/1024 M from v$process ;??? ----process曾經(jīng)消耗的最大內(nèi)存

M

----------

9.12815189

SQL> select sum(pga_used_mem)/1024/1024 from v$process;?? ----當(dāng)前process一共消耗的PGA

SUM(PGA_USED_MEM)/1024/1024

---------------------------

28.8192501068115

如何設(shè)置PGA呢?我們可以在壓力測(cè)試階段,模擬一下系統(tǒng)的運(yùn)行,然后運(yùn)行

select (select sum(pga_used_mem)/1024/1024 from v$process) (select count(*) from v$process) from dual;得到一個(gè)process大約占用了多少的內(nèi)存,然后估算系統(tǒng)一共會(huì)有多少連接,比如一共有500個(gè)連接,

那么Sessions=1.1*process +5=500,那么processes=450,再乘以一個(gè)process需要消耗的內(nèi)存,就能大約估算出PGA需要設(shè)置多大。

最好將PGA設(shè)置的值比計(jì)算出的值大一點(diǎn),PGA值設(shè)定好后,就可以根據(jù)系統(tǒng)的性質(zhì),如果系統(tǒng)為OLTOP,那么總的內(nèi)存可以設(shè)置為PGA/0.16,最后也能估算出SGA的大小,建議還是多配點(diǎn)內(nèi)存,反正便宜。

下面摘抄eygle的關(guān)于一個(gè)process能夠分配的最大內(nèi)存(串行操作)的規(guī)則:

10gR1之前,對(duì)于串行操作(非并行)一個(gè)process能夠分配的最大的內(nèi)存為min(5%pga_aggregate_target,100m)

10gR2之后,對(duì)于串行操作(非并行)一個(gè)process能夠分配的最大內(nèi)存有如下規(guī)則:

如果pga_aggregate_target<=500m,那么最大的內(nèi)存為20%*pga_aggregate_target.

如果500m

如果1000m如果pga_aggregate_target>2.5G,那么最大內(nèi)存為2.5G.

SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ

2? FROM SYS.x$ksppi x, SYS.x$ksppcv y

3? WHERE x.inst_id = USERENV ('Instance')

4? AND y.inst_id = USERENV ('Instance')

5? AND x.indx = y.indx

6? AND x.ksppinm LIKE '%&par%'

7? /

NAME???????????????????????????????????????????????????????????????????????????? VALUE??????????????????????????????????????????????????????????????????????????? DESCRIB

-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------

_smm_max_size??????????????????????????????????????????????????????????????????? 20480??????????????????????????????????????????????????????????????????????????? maximum work area size in auto mode (serial)

SQL> show parameter pga

NAME???????????????????????????????? TYPE??????? VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target???????????????? big integer 100M

此處我的一個(gè)process能夠分配的最大內(nèi)存為20M,因?yàn)槲业腜GA=100M,符合上面的規(guī)則。

隱含參數(shù)_smm_max_size表示一個(gè)process能夠分配最大的memory.

買(mǎi)了piner的《oracle高可用環(huán)境》一書(shū),正好趁這段時(shí)間學(xué)習(xí)一下。

把看到的東西總結(jié)一下發(fā)表于此,今天先發(fā)第一章關(guān)于SGA與PGA的內(nèi)容。

以后會(huì)陸續(xù)將總結(jié)在此發(fā)表,與大家共享。

SGA與PGA的結(jié)構(gòu)如下圖:

SGA:

查看SGA:

Sqlp> show sga

或 select * from v$sga;

Total System Global Area? 289406976 bytes

Fixed Size????????????????? 1248600 bytes

Variable Size???????????? 176161448 bytes

Database Buffers????????? 109051904 bytes

Redo Buffers??????????????? 2945024 bytes

Fixed Size:包括了數(shù)據(jù)庫(kù)與實(shí)例的控制信息、狀態(tài)信息、字典信息等,啟動(dòng)時(shí)就被固定在SGA中,不會(huì)改變。

Variable Size:包括了shard pool、large pool、java pool、stream pool、游標(biāo)區(qū)和其他結(jié)構(gòu)

Database Buffers:數(shù)據(jù)庫(kù)中數(shù)據(jù)塊緩沖的地方,是SGA中最大的地方,決定數(shù)據(jù)庫(kù)性能

Redo Buffers:提供REDO緩沖的地方,在OLAP中不需要太大

V$sgastat記錄了SGA的一些統(tǒng)計(jì)信息

V$sga_dynamic_components保存SGA中可以手動(dòng)調(diào)整的區(qū)域的一些調(diào)整記錄

Shard pool:

Shard_pool_size決定其大小,10g以后自動(dòng)管理

Shard_pool中數(shù)據(jù)字典和控制區(qū)結(jié)構(gòu)用戶(hù)無(wú)法直接控制,與用戶(hù)有關(guān)的只有sql緩沖區(qū)(library cache)。

將經(jīng)常訪問(wèn)的過(guò)程或包用DBMS_SHARED_POOL.KEEP存儲(chǔ)過(guò)程將該包pin在共享池中。

手工清除共享池的內(nèi)容:alter system flush shard_pool;

共享池相關(guān)的幾個(gè)常用的視圖:

V$sqlarea 記錄了所有sql的統(tǒng)計(jì)信息,包括執(zhí)行次數(shù)、物理讀、邏輯讀、耗費(fèi)時(shí)間等

V$sqltext_with_newline 完全顯示sql語(yǔ)句,通過(guò)hash_value來(lái)標(biāo)示語(yǔ)句,piece排序

V$sql_plan保存了sql的執(zhí)行計(jì)劃,通過(guò)工具查看

V$shared_pool_advice對(duì)共享池的預(yù)測(cè),可以做調(diào)整SGA的參考

Data buffer:

在OLTP系統(tǒng)中要求data buffer 的命中率在95%以上

select sum(pins) "execution",sum(pinhits) "hits",

((sum(pinhits)/sum(pins))*100) "pinhitration",

sum(reloads) "misses",((sum(pins)/(sum(pins)

+sum(reloads)))*100) "relhitratio"

from V$librarycache

PINS NUMBER Number of times a PIN was requested for objects of this namespace

PINHITS NUMBER Number of times all of the metadata pieces of the library object were found in memory

RELOADS NUMBER Any PIN of an object that is not the first PIN performed since the object handle was created, and which requires loading the object from disk

Oracle把從data buffer中獲得的數(shù)據(jù)庫(kù)叫cache hit,把從磁盤(pán)獲得的腳cache miss

數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)塊通過(guò)臟列表(dirty list)和LRU列表(LRU list)來(lái)管理。

Data buffer可細(xì)分為:default pool、keep pool、recycle pool對(duì)應(yīng)的參數(shù)為db_cache_size、 db_keep_cache_size 、db_recycle_size分別表示緩沖區(qū)大小

從9i開(kāi)始o(jì)racle支持不同塊大小的表空間,相應(yīng)的可以為不同塊大小的表空間指定不同塊大小的數(shù)據(jù)緩沖區(qū),不同塊大小的數(shù)據(jù)緩沖區(qū)可以用相應(yīng)的db_nk_cache_size來(lái)指定,其中n可以是2、4、6、16或32

V$db_cache_advice 對(duì)數(shù)據(jù)緩沖區(qū)的預(yù)測(cè),可以做調(diào)整data buffer的參考

V$bh、x$bh記錄了數(shù)據(jù)塊在data buffer中緩沖的情況,通過(guò)這個(gè)視圖可以找系統(tǒng)中的熱點(diǎn)塊。通過(guò)下面語(yǔ)句找系統(tǒng)中top 10 熱點(diǎn)快所在的熱點(diǎn)對(duì)象:

Select /*+ rule*/ owner,object_name from dba_objects

Where data_object_id in

(select obj from

(select obj from x$bh order by tch desc)

Where rownum<11);

PGA:

用來(lái)保存于用戶(hù)進(jìn)程相關(guān)的內(nèi)存段。

從9i開(kāi)始使用PGA自動(dòng)管理,pga_aggregate_target參數(shù)指定session一共使用的最大PGA內(nèi)存的上限。Workarea_size_policy參數(shù)用于開(kāi)關(guān)PGA內(nèi)存自動(dòng)管理功能,auto/manual

在OLTP環(huán)境中,自動(dòng)PGA管理只要設(shè)置到一定的值,如2G左右就能滿(mǎn)足系統(tǒng)的要求。

自動(dòng)內(nèi)存管理:

從9i開(kāi)始,sga_max_size參數(shù)設(shè)置SGA的內(nèi)存大小,不能動(dòng)態(tài)修改

從10g開(kāi)始,指定了sga_target參數(shù)后,所有的SGA組件如:shared pool、 data buffer、 large pool都不用手工指定了,Oracle會(huì)自動(dòng)管理。這一特性就是自動(dòng)共享內(nèi)存管理ASMM。如果設(shè)置了sga_target=0,就自動(dòng)關(guān)閉自動(dòng)共享內(nèi)存管理功能。Sga_target大小不能超過(guò)sga_max_size的大小。

手動(dòng)管理SGA:

Alter system set sga_target=2000m;

Alter system set db_cache_size=1000m;

Alter system set shared_pool=200m;

Alter system set sga_target=0---------關(guān)閉自動(dòng)共享內(nèi)存管理ASMM

11G以后sga+pga整個(gè)內(nèi)存可以自動(dòng)管理AMM,相關(guān)參數(shù)memory_max_target? memory_target.設(shè)置好這兩個(gè)參數(shù)后就不用關(guān)心SGA和PGA了

11g手動(dòng)內(nèi)存管理:

Alter system set memory_target=3000m;

Alter system set sga_target=2000m;

Alter system set pga_aggregate_target=1000m;

Alter system set memory_target=0;---------關(guān)閉自動(dòng)內(nèi)存管理AMM

SGA+PGA最好不要超過(guò)總內(nèi)存的70%

補(bǔ)充:總原則:OS 使用內(nèi)存+SGA+并發(fā)執(zhí)行進(jìn)程數(shù)*(sort_area_size+hash_ara_size+2M) < 0.7*總內(nèi)存

簡(jiǎn)單說(shuō)就是:SGA+PGA+OS使用內(nèi)存

關(guān)于SGA、PGA與系統(tǒng)內(nèi)存三者間的關(guān)聯(lián),目前有一個(gè)相對(duì)通用的計(jì)算規(guī)則可供參考:

對(duì)于OLTP數(shù)據(jù)庫(kù),SGA=系統(tǒng)內(nèi)存*70%*80%,PGA=SGA*(10%~20%)。SGA=系統(tǒng)內(nèi)存*0.56 PGA=系統(tǒng)內(nèi)存*(0.05~0.1)

對(duì)于OLAP數(shù)據(jù)庫(kù),SGA=系統(tǒng)內(nèi)存*80%*60%,PGA=SGA*(45%~65%)。SGA=系統(tǒng)內(nèi)存*0.48 PGA=系統(tǒng)內(nèi)存*(0.22~0.31)

(對(duì)于32bit平臺(tái),默認(rèn)情況下SGA最大可用內(nèi)存有1.7GB的限制)

實(shí)例配置時(shí)需要考慮的因素

一:物理內(nèi)存多大

二:操作系統(tǒng)估計(jì)需要使用多少內(nèi)存

三:數(shù)據(jù)庫(kù)是使用文件系統(tǒng)還是裸設(shè)備

四:有多少并發(fā)連接

五:應(yīng)用是OLTP 類(lèi)型還是OLAP 類(lèi)型

總結(jié)

以上是生活随笔為你收集整理的windows oracle 内存大,如何设计Oracle数据库内存的大小的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。