Oracle数据库体系结构oracle 10gWord格式文档下载.docx
- 文档编号:16404385
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:13
- 大小:363.13KB
Oracle数据库体系结构oracle 10gWord格式文档下载.docx
《Oracle数据库体系结构oracle 10gWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《Oracle数据库体系结构oracle 10gWord格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
动态内存管理允许在数据库服
务运行时对内存的大小进行修改,读取大数据块时使用大内存,小数据块时使用小内存,读
取标准内存块时使用标准内存设置。
按照系统对内存使用方法的不同,Oracle数据库的内存可以分为以下几个部分:
•系统全局区:
SGA(SystemGlobalArea)
•程序全局区:
PGA(ProgrameGlobalArea)
•排序池:
(SortArea)
•大池:
(LargePool)
•Java池:
(JavaPool)
2-1:
系统全局区SGA(SystemGlobalArea)
SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信
息。
如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享。
当数据库实例启动时,SGA的内存被自动分配;
当数据库实例关闭时,SGA内存被回收。
SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。
SGA的有关信息可以通过下面的语句查询,sga_max_size的大小是不可以动态调整的。
======================================================================
SQL>
showparametersga
NAME
TYPE
VALUE
-------------------------------------------------------
lock_sga
boolean
FALSE
pre_page_sga
sga_max_size
biginteger164M
sga_target
biginteger0
altersystemsetsga_max_size=100m;
altersystemsetsga_max_size=100m
*
ERRORatline1:
ORA-02095:
specifiedinitializationparametercannotbemodified
======================================================================
系统全局区按作用不同可以分为:
•数据缓冲区
•日志缓冲区
•共享池
2-1-1:
数据缓冲区(DatabaseBufferCache)
如果每次执行一个操作时,Oracle都必须从磁盘读取所有数据块并在改变它之后
又必须把每一块写入磁盘,显然效率会非常低。
数据缓冲区存放需要经常访问的数据,
供所有用户使用。
修改数据时,首先从数据文件中取出数据,存储在数据缓冲区中,
修改/插入数据也存储在缓冲区中,commit或DBWR(下面有详细介绍)进程的其他条
件引发时,数据被写入数据文件。
数据缓冲区的大小是可以动态调整的,但是不能超过sga_max_size的限制。
showparameterdb_cache_size
----------------------------------------------------------------
db_cache_size
biginteger24M
altersystemsetdb_cache_size=128m;
altersystemsetdb_cache_size=128m
*
ORA-02097:
parametercannotbemodifiedbecausespecifiedvalueisinvalid
ORA-00384:
Insufficientmemorytogrowcache
altersystemsetdb_cache_size=20m;
Systemaltered.
showparameterdb_cache_size;
biginteger20M
#此处我仅增加了1M都不行?
altersystemsetdb_cache_size=25m;
altersystemsetdb_cache_size=25m
#修改显示格式,方便查看。
columnnameformata40wrap
columnvalueformata20wrap
#下面语句可以用来查看内存空间分配情况,注意SGA各区大小总和。
selectname,valuefromv$parameterwherenamelike'
%size'
andvalue<
>
'
0'
;
#先将java_pool_size调小,然后再修改db_cache_size
showparameterjava_pool_size;
----------------------------------------------------
java_pool_size
biginteger48M
altersystemsetjava_pool_size=20m;
altersystemsetjava_pool_size=30m;
#上面说明SGA中各区大小总和不能超过sga_max_size。
数据缓冲区的大小对数据库的存区速度有直接影响,多用户时尤为明显。
有些应
用对速度要求很高,一般要求数据缓冲区的命中率在90%以上。
下面给出一种计算数据缓冲区命中率的方法:
•使用数据字典v$sysstat
===================================================================
selectname,valuefromv$sysstat
2
wherenamein('
sessionlogicalreads'
3
physicalreads'
4
physicalreadsdirect'
5
physicalreadsdirect(lob)'
)
-----------------------------------------
sessionlogicalreads
895243
physicalreads
14992
physicalreadsdirect
34
physicalreadsdirect(lob)
0
命中率=1-(14992-34-0)/895243
可以让Oracle给出数据缓冲区大小的建议:
altersystemsetdb_cache_advice=on;
#打开该功能
altersystemsetdb_cache_advice=off;
#关闭该功能
====================================================================
2-1-2:
日志缓冲区(LogBufferCache)
日志缓冲区用来存储数据库的修改信息。
该区对数据库性能的影响很小,有关日
志后面还会有详细的介绍。
查询日志缓冲区大小:
showparameterlog_buffer
----------
-----------
-------
log_buffer
integer
262144
2-1-3:
共享池(SharePool)
共享池是对SQL,PL/SQL程序进行语法分析,编译,执行的内存区域。
它包含三个部分:
(都不可单独定义大小,必须通过sharepool间接定义)。
•库缓冲区(LibraryCache)包含SQL,PL/SQL语句的分析码,执行计划。
•数据字典缓冲区(DataDictionaryCache)表,列定义,权限。
•用户全局区(UsrGlobalArea)用户MTS会话信息。
共享池的大小可以动态修改:
showparametershared_pool_size
-----------------------------------------------------
__shared_pool_size
biginteger80M
shared_pool_size
altersystemsetshared_pool_size=78m
#上面的__shared_pool_size一行奇怪?
2-2:
程序全局区PGA(ProgrameGlobalArea)
程序全局区是包含单个用户或服务器数据和控制信息的内存区域,它是在用户进程连
接到Oracle并创建一个会话时由Oracle自动分配的,不可共享,主要用于用户在编程存
储变量和数组。
如上图:
•StackSpace是用来存储用户会话变量和数组的存储区域;
•UserSessionData是为用户会话使用的附加存储区。
|--SessionInformation
|--SortArea
|--CursorInformation
注意Sessioninformation(用户会话信息)在独占服务器中与在共享服务器中所处
的内存区域是不同的。
2-3:
排序区,大池,Java池
排序区(SortArea)为有排序要求的SQL语句提供内存空间。
系统使用专用的内存区
域进行数据排序,这部分空间就是排序区。
在Oracle数据库中,用户数据的排序可使用
两个区域,一个是内存排序区,一个是磁盘临时段,系统优先使用内存排序区进行排序。
如果内存不够,Orcle自动使用磁盘临时表空间进行排序。
为提高数据排序的速度,建议
尽量使用内存排序区,而不要使用临时段。
参数sort_area_size用来设置排序区大小。
(好象不能动态修改?
大池(LargePool)用于数据库备份工具--恢复管理器(RMAN:
RecoveryManager)。
LargePool的大小由large_pool_size确定,可用下面语句查询和修改:
=========================================================================
showparameterlarge_pool_size
-----------------
------------------
large_pool_size
biginteger
8M
altersystemsetlarge_pool_size=7m;
Systemaltered.
Java池主要用于Java语言开发,一般来说不低于20M。
其大小由java_pool_size来
确定,可以动态调整。
2-4:
Oracle自动共享内存管理(AutomaticSharedMemory(SGA)Management)
在Oracle8i/9i中数据库管理员必须手动调整SGA各区的各个参数取值,每个区要根据
负荷轻重分别设置,如果设置不当,比如当某个区负荷增大时,没有调整该区内存大小,则
可能出现ORA-4031:
unabletoallocate...bytesofsharedmemory错误。
在Oracle10g中,将参数STATISTICS_LEVEL设置为TYPICAL/ALL,使用SGA_TARGET指
定SGA区总大小,数据库会根据需要在各个组件之间自动分配内存大小。
下面是系统自动调整的区域:
•固定SGA区及其他•共享池•数据缓冲区•
Java池•大池。
注意:
如果不设置SGA_TARGET,则自动共享内存管理功能被禁止。
showparameterstatistics_level
--------------------------------------------
statistics_level
string
TYPICAL
altersystemsetstatistics_level=all;
#typical和all有什么区别?
altersystemsetstatistics_level=typical;
showparametersga_target
----------------------------------
altersystemsetsga_target=170m;
altersystemsetsga_target=170m
ORA-00823:
Specifiedvalueofsga_targetgreaterthansga_max_size
altersystemsetsga_target=20m;
#不过后来又发现sga_target的值变成了140M?
下面是语句执行情况。
-------------------------------
biginteger140M
altersystemsetsga_target=0;
#改为20M
#显示的是140M
#不可缩减?
altersystemsetsga_target=130m;
altersystemsetsga_target=130m
ORA-00827:
couldnotshrinksga_targettospecifiedvalue
#不可增加
altersystemsetsga_target=141m;
altersystemsetsga_target=141m
Specifiedvalueofsga_targetgreater
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle数据库体系结构oracle 10g Oracle 数据库 体系结构 10