oracle的sga

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sga

? ?

SGA的管理

■有三種方式:

? ? ? ? ? ●8i:SGA的總大小由所有內存組件大小之和決定,不能直接定義SCA大小。對內部組件大小的修改必須在數據庫重起? ? ? ? ? ? ? ? ? ? 后?才能生為,所以叫做SGA的靜態管理。

? ? ? ? ? ●9i:?SGA總大小由初始化參數SGA_?MAX?SIZE確定,各個內存組件大小之和不能超過這個參數。在這個大小之下,? ? ? ? ? ? ? ? ? ? ? SGA?各個內存組件可以在不重起數據庫的情況下直接修改大小,所以叫做SGA的動態管理。

? ? ? ? ? ●10g:??SGA大小既可以像9i一樣動態管理,也可以實施SGA的自動管理,只需要設置初始化參數SGA_?TARGET,?SGA? ? ? ? ? ? ? ? ? ? ? ?各個內存組件??三就可以由數據庫自動設置大小,設置的依據來源于系統自動收集的統計信息

?

?■在9i以后,SGA的內部組件大小可以動態調整,也可以由數據庫自動管理,在設置內存大小的時候,分配的基本單位是粒? ? ? ? ? ? 度(granule)。Granule是一段連續的虛擬內存,大小取決于SGA?_MAX?SIZE的大小

? ? ? ? ? ?●如果SGA_?MAX?_SIZE小于128M,?Granule為4M,?否則Granule為16M

? ? ? ? ? ?●各個內存組件分配大小必須是Granule的整倍數

? ? ? ? ? ?●整個SGA最小不小于3個Granule大小

■9i中的規則如下:

? ? ? ?●linux/unix
? ? ? ? ? ? ?SGA<=12BM?granutle?4M

? ? ? ? ? ? ?SGA?>128M?granule?16M? ?

? ? ? ●Windows
? ? ? ? ? ? SGA<=128M?granule?4M

? ? ? ? ? ? SGA?>128M?granule?8M

■10g中的分配規則為

? ? ? ? ●?linuxunix

? ? ? ? ●Windows
? ? ? ? ? ? SGA<=1G?granute?4M否則16M

shared pool

■用于存儲:

? ?◆最近執行的SQL 語句

? ?◆最近使用的數據定義
■由兩個與性能相關的部分組成:

? ?◆庫緩存
? ?◆數據字典緩存
■由參數SHARED POOL SIZE決定大小

庫緩存

■存儲最近使用的SQL和PL/SQL語句的信息

■共享最常用的語句

■管理上遵循LRU規則

■包括兩個部分:
? ?◆共享SQL區

? ?◆共享PLSQL區
■大小由Shared Pool的大小決定

數據字典緩存■存儲在數據庫中最近使用的定義
■包括數據文件,表,索引,列,用戶,權限和其他的數據庫對象
■在分析階段,服務器進程查找數據字典去驗證對象的名字以及是否是合法訪問
■對于查詢和DML語句,如果數據字典的信息在緩存中能夠提高響應時間大小由Shared Pool的大小決定

SGA中關鍵的內存片段。特別是性能與擴展上。
是sqI.pl/sql程序進行語法分析,編譯,執行的內存區域。
庫lbrary cache數據字典data dictionary cache,控制結構control structure組成。shared pool. size 決定大小。10G以后自動管理。
過小導致latch爭用,ora-0431 錯誤。Lbrarycache 爭用與等待。
>alter system set flush shared pool命令可清除shared pool內存中信息與我們相關的就是lthrancrache 庫繆油或sal語句紹油了
用戶提交一個sq語可,通過PGA轉建到SGA, oracle 對冊可進行分析.

■如果以前執行過,則按照以前執行的計劃執行,通常是軟分析[soft parse|或快速軟分析

? ? ◆通過PCA提交Sql語句>parse語句>soft parse->執行語句- >通過PCA輸出

■如果沒執行過,oracle 開始分析語句的語法,語義,按照優化器規則獲得最佳執行計劃,并在內存中保存這個語句與之對應 ? ?的執行計劃等相關信息,便于下次快速調用。

? ?◆通過PGA提交Sql語句parse語句hard parse→分析與得到優化方案[CBOor RB0|→根據優化方案制定執行計劃》執行語句 ? ?◆一-通過PGA輸出

數據高速緩存區

■暫存從數據文件中獲得的數據塊的數據映像

■同樣遵循LRU算法管理內存
■當再次需要操作這些數據時可以從內存中直接獲取和更新,語句執行效率能夠大幅度的提高
■初始化參數DB_ BLOCK SIZE決定了數據塊的大小,這也是數據庫I/O的最小單位
■數據高速緩存區由多個獨立的子緩存池構成,可以獨立的設置大小:
? ? ◆Default池 ?DB CACHE SIZE
? ? ◆Keep池 ?DB KEEP CACHE SIZERecycle池 ?

? ? ◆DB RECYCLE CACHE SIZE

■只有defualt池可以被sga自動管理

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SQL

Buffer?

Cache

的大小

配置

?SELECT component,current_size,min_size FROM v$sga_dynamic_components;

?

使用

advice

來確認

buffer

cache

的大小

?alter?system?set?dby?cache_?size=20M?scope=memory;
SELECT size_for_estimate "Cache Size(MB)",size_factor,buffers_for_estimate "Buffers",
estd_physical_read_factor est_read_factor,
estd_physical_reads estd_phy_red,
estd_physical_read_time est_phy_read_t FROM v$db_cache_advice
WHERE NAME='DEFAULT'AND block_size=(SELECT VALUE FROM v$parameter WHERE NAME='db_block_size');

在0LTP系統中,對于DB_CACHE_SIZE的設置,推薦配置是:

DB_CACHE_SIZE=SGA_MAX_SIZE/2~?SGA_MAX_SIZE*2/3

Block

狀態

0,FREE,?no?valid?block?image

1,XCUR,?a?current?mode?block,?exclusive?to?this?instance

2,?SCUR,?a?current?mode?block,?shared?with?other?instances

3,CR,a?consistent?read?(stale)?block?image

4,READ,?buffer?is?reserved?for?a?block?being?read?from?disk

5,?MREC,?a?block?in?media?recovery?mode

6,IREC,?a?block?in?instance?(crash)?recovery?mode

select O.object_name,
decode(state,0,'free',1,'xcur',2,'scur',3,'cr',4,'read',5,'mrec',6,'irec',7,'write',8,'pi')state,count(*) blocks
from x$bh b,dba_objects O
where b.obj=O.data_object_id
group by O.object_name, state 
order by blocks desc;

?

lru_flag

LRU_?FLAG=2,表示lru鏈的冷端

LRU_?FLAG=8,表示在LRU鏈的熱端

LRU_?FLAG=0,表示沒有標識

select class,flag,state,1ru_f1ag from x$bh where dbarfil=1 and dbablk = 30;

pool



?
?????

?

?

select decode (wbpd.bp_id,1,'keep',2,'recycle',3,'default',4,'2k pool',5,'4k pool',6,'8k pool',7,'16k pool8,',8,'32k pool',
'unknown') pool,bh.owner,bh.object_name object_name,count(1) numOfBuffers 
from x$kcbwds wds,x$kcbwbpd wbpd,
(select set_ds,x.addr,o.name object_name,u.name owner from sys.obj$ o,sys.user$ u, x$bh X 
where o.owner#=u.user# and o.dataobj#=x.obj and x.state!=0 and o.owner#!=0) bh
where wds.set_id >=wbpd.bp_lo_sid and wds.set_id<=wbpd.bp_hi_sid
and wbpd.bp_size!= 0 and wds.addr=bh.set_ds  --and?object_name='T2'
group by decode (wbpd.bp_id,1,'keep',2,'recycle',3,'default',4,'2k pool',5,'4k pool',6,'8k pool',7,'16k pool8,',8,'32k pool',
'unknown'),bh.owner,bh.object_name
order by 1, 4,3,2;

SELECT obj object,dbarfil file#,dbablk block,tch touches
FROM x$bh WHERE
tch>10 ORDER BY tch desc

?

例,

10%

?

?

?

?

?

?

?

select 
decode(state,0,'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),
3,'BEING USED',state) "BL0CK STATUS",
count(*) from x$bh
group by 
decode(state,0,'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),
3,'BEING USED',state)

?

最浪費

內存的

前10個

語句占

所有語

句的比

例,建

議控制

在5%

以內

?

?

?

?

?

select sum(pct_bufgets) "Percent" from 
(select rank() over ( order by buffer_gets desc)
as rank_bufgets,to_char(100*ratio_to_report(buffer_gets)over (),'999.99')
pct_bufgets from v$sqlarea) where rank_bufgets<11;

??
??
??
??
??

?

?

重做日志緩沖區■暫存數據庫中所有數據塊的改變
■內存管理方法是FIFO
■重做日志被用于提供數據恢復功能
■暫存重做日志的目的是為了提高語句的執行速度
■大小由參數LOG_ BUFFER決定,但這個內存區不能動態調整大小
大池

■大池是系統全局區中可選的一個內存區
■主要在下面幾種情況下使用:
? ? ◆共享服務器的用戶全局區(UGA)
? ? ◆使用RMAN作 備份恢復-|并行進程 ?09
■大小由參數LARGE POOL SIZE決定,也可以動態改變大小

java池

■是系統全局區中一個可選內存區。

■用于Java程序的解析 和執行
■大小由參數JAVA POOL_ SIZE決定,也可以動態調整
■如果granule是4M, 默認是24M: 如果granule是16M, 默認大小是32M如果在數據庫創建時選擇了安裝JVM組件,那么這 ? ? 個池必須配置

???
???

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535513.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535513.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535513.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL:日志知識點盤點

本篇內容包括&#xff1a;binlog&#xff08;二進制日志&#xff09;、redo log 以及 undo log 一、binlog&#xff08;二進制日志&#xff09; binlog 用于記錄數據庫執行的寫入性操作(不包括查詢)信息&#xff0c;以二進制的形式保存在磁盤中。binlog是mysql的邏輯日志&…

ROWNUM的使用

一個偽列看起來像是一個表中的列&#xff0c;但實際上并不保存在表中。你可以查詢&#xff0c; 但是不能插入&#xff0c;修改和刪除其中的值。一個偽列也類似于一個沒有參數的函 數。但是在典型情況下&#xff0c;在結果集中可以為每一行返回相同的值&#xff0c;而偽列通 常為…

MySQL:主從相關知識點盤點

本篇內容包括&#xff1a;MySQL 主從復制簡介、主從復制的原理以及主從搭建 一、MySQL 主從復制簡介 在實際的生產中&#xff0c;為了解決Mysql的單點故障已經提高MySQL的整體服務性能&#xff0c;一般都會采用**「主從復制」**。 比如&#xff1a;在復雜的業務系統中&#x…

oracle導出expdp

expdp/impdp 是 oracle 10g 版本后推出的服務器端工具--數據泵&#xff0c;作用是為了將數據庫中的邏輯對象&#xff0c;比如表、用戶、全庫、表空間進 行導入&#xff0c;導出 命令解析 ATTACH ATTACH [[schema_name.]job_name] schema_name 表示用戶名,job_name 表示導出的作…

oracle導入impdp

expdp/impdp 是 oracle 10g 版本后推出的服務器端工具--數據泵&#xff0c;作用是為了將數據庫中的邏輯對象&#xff0c;比如表、用戶、全庫、表空間進 行導入&#xff0c;導出REMAP_DATAFILE 該選項用于將源數據文件名轉變為目標數據文件名, 在不同平臺之間搬移表空間時可能需…

oracle高水位線

ORACLE在邏輯存儲上分4個粒度: 表空間, 段, 區 和 塊. 1.1 塊: 是粒度最小的存儲單位,現在標準的塊大小是8K,ORACLE每一次I/O操作也是按塊來操作的,也就是說當ORACLE從數據文件讀數據時,是讀取多少個塊,而不是多少行. 每一個Block里可以包含多個row. 1.2 區:…

oracle檢查點

檢 查 點 概述 ■l當修改數據時&#xff0c;需要首先將數據讀入內存中&#xff08;Buffer Cache&#xff09;&#xff0c;修改數據的同時&#xff0c;Oracle會記錄重做信息&#xff08;Redo&#xff09;用于恢復。因 為有了重做信息的存在&#xff0c;Oracle不需要在提交時…

文獻翻譯:Java theory and practice: Fixing the Java Memory Model, Part 2

Java theory and practice: Fixing the Java Memory Model, Part 2 譯&#xff1a;Java 理論與實踐&#xff1a;修復 Java 內存模型&#xff0c;第 2 部分 翻譯自&#xff1a;http://www.ibm.com/developerworks/library/j-jtp03304/&#xff08;原文寫于2004年3月&#xff0…

oracle的buffercache

LRU空閑或者干凈的鏈&#xff0c;可以從這里找到未修改的數據LRUW臟鏈&#xff0c;一個臟塊同時掛到了lruw和檢查點隊列&#xff0c;LRUW分冷端和熱端&#xff0c;冷端即為更新頻率較低的一端&#xff0c;熱端為更新頻率較高的一端&#xff0c;dbwn寫入數據文件時從冷端開始寫入…

oracle的undo

Undo段中區的狀態free expiredinactiveactive 顯示UNDO區信息 SELECT extent_ id, bytes&#xff0c; status FROM dba_ _undo_ _extentsWHERE segment_ name SYSSMU1S ; 圖解一一個事務的操作流程 Undo段的組成:段頭、回滾塊 事務ID …

SQLPlus命令詳細說明

SQLPlus命令詳細說明 2011-10-19 17:23:01 分類&#xff1a; Oracle 1. 執行一個SQL腳本文件 SQL>start file_name SQL> file_name 2. 對當前的輸入進行編輯 SQL>edit 3. 重新運行上一次運行的sql語句 SQL>/ 4. 將顯示的內容輸出到指定文件 SQL> S…

oracle的EMCTL

Microsoft Windows [版本 6.1.7601] 版權所有 (c) 2009 Microsoft Corporation。保留所有權利。 C:\Users\Administrator>emctl start dbconsole Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to da tabase unique name. C:\Users\Administ…

RHEL7 修改SSH默認端口

1.查詢seliunx [roottest10597 ~]# getenforce Enforcing [roottest10597 ~]# semanage port -l|grep ssh ssh_port_t tcp 222.設置selinux端口 [roottest10597 ~]# semanage port -a -t ssh_port_t -p tcp 10022 [roottest10597 ~]# semanage …

oracle預定義異常

NO_DATA_FOUND&#xff1a;執行查詢無數據、引用一個末初使化的表、通過UTL_FILE包調用到尾的文件TOO_MANY_ROWS&#xff1a;采用SELECT INTO語句&#xff0c;但返回的記錄超過了1條DUP_VAL_ON_INDEX:插入或者更新語句&#xff0c;與唯一索引相沖突TIMEOUT_ON_RESOURCE:等待資源…

常用系統函數oracle

單行函數日期函數ADD_MONTHS(date, n):用于從一個日期值增加或減少一些月份 MONTHS_BETWEEN(date1, date2):判斷兩個日期之間相差的月份 LAST_DAY(date): 函數返回包含日期的月份的最后一天 ROUND(date[,fmt]): 將日期d按照fmt指定的格式舍入&#xff0c;fmt為字符串 TRU…

oracle游標

游標&#xff08;cursor &#xff09;是一個私有的SQL工作區域,是一個指向上下文區的句柄或指針&#xff0c;位于內存中的 "臨時表"。 游標是SQL的一個內存工作區&#xff0c;由系統或用戶以變量的形式定義。游標的作用就是用于臨時存儲從數據庫中提取的數據塊。在某…

找出占用cpu最高的線程

ps -eo %cpu,pid |sort -n -k1 -r | head -n 1| awk {print $2}| xargs top -b -n1 -Hp | grep COMMAND -A1 |tail -n 1 |awk {print $1}| xargs printf 0x%x ? 在命令行輸入top&#xff0c;然后shiftp查看占用CPU最高的進程&#xff0c;記下進程號 ? 在命令行輸入top -Hp…

系統學習SpringFramework:Spring 概述

本篇內容包括&#xff1a;Spring/SpringFrame 概述、Spring IOC 和 AOP 概述、Spring 全家桶內容概述&#xff08;包括&#xff1a;Spring Boot、Spring Cloud、Spring Cloud data flow …&#xff09;等內容&#xff01; 一、Spring/SpringFrame 概述 Spring 是一個生態體系&…

存儲過程與函數oracle

存儲在數據庫中供所有用戶程序調用的子程序叫做存儲過程&#xff0c;存儲函數。 存儲過程是在大型數據庫系統中&#xff0c;用PL/SQL語言編寫的能完成一定處理功能的存儲在數據庫字典中的程序&#xff0c;它是一個命名的 PL/SQL 塊&#xff0c;經編譯后存儲在數據庫中&#xff…

系統學習SpringFramework:Spring IOC

本篇內容包括&#xff1a;IOC 和 DI 的概念、Spring 容器&#xff0c;即 BenaFactory 與 AplicationConext 等 IOC 相關內容。 一、IOC 和 DI 的概念 1、IOC IoC&#xff08;Inversion of control &#xff09;即“控制反轉”&#xff0c;它是一種設計思想而非一個技術實現。…