- 浏览: 1098993 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:353155
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
分析对象Oracle 10.2.0.4 64bit for linux。先声明一下,分析过程和结论都是个人理解,不一定是正确的。
如果有疑问和建议,欢迎一起讨论学习。
SGA 包含fixed sga 、buffer pool(db cache) 、shared pool 、large pool 、java pool 、streams pool 和redo buffers 。
SGA 中的pool 由多个granule 组成。每个granule 的大小和SGA_MAX_SIZE 的值相关。在Oracle 10.2上,若SGA_MAX_SIZE<=1024MB ,则granule 的值为4MB ;若SGA_MAX_SIZE>1024MB ,则granule 的值为16MB 。
(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1660044 )
SGA 中的fixed sga 和redo buffers 区域是独立分配的,其实它们也存在于某个granule 中。
查询v$sga 视图,显示sga 中的各个部分大小。
SQL> select name,value,to_char(value,'xxxxxxxxxxxxxx') value_hex from v$sga; NAME VALUE VALUE_HEX -------------------- ---------- --------------- Fixed Size 1220432 129f50 Variable Size 335544496 140000b0 Database Buffers 1795162112 6b000000 Redo Buffers 15556608 ed6000
再查询v$sgainfo 中,显示更具体的pool 的大小和granule 的值。
SQL> select name,bytes/1024/1024/16 as "bytes(16M)" FROM v$sgainfo; NAME bytes(16M) -------------------------------- ---------- Fixed SGA Size .072743416 Redo Buffers .927246094 Buffer Cache Size 107 Shared Pool Size 16 Large Pool Size 1 Java Pool Size 2 Streams Pool Size 1 Granule Size 1 Maximum SGA Size 128 Startup overhead in Shared Pool 5 Free SGA Memory Available 0
第一个"granule" 包含Fixed SGA 、Granule directory 、Heap headers 。
最后一个 "granule" 包含Guard pages 、Redo buffer 、Operating system specific overhead 、Remaining space unused 。
(这是juliandyke.com 上的结论,摘录于此,未证实。)
在X$KSMGE 中可以查到sga 的granule 的组成,但结果数比sga_max_size 要少一个granule 。
也可以通过“ALTER SESSION SET EVENTS ‘immediate trace name granulelist level <level>’ ”将granule 的结果dump 出来。
fixed sga area 位于第一个granule 中,它包含的内容如下:
- Containing all fixed variables
- Contains pointers to all other structures in SGA
- Variable name, type, address and size determined when Oracle executable is linked
- Located at start of first granule of SGA
SGA 分成若干个heap ,根据隐含参数”_kghdsidx_count “来判断heap 的个数。
heap 由heap header 和若干extent 组成。
heap extent 由extent header 和若干chunk 组成。
chunk 由chunk header 和chunk body 一一对应。chunk 的类型分为permanent 、recreatable 、freeable 、free 等等。
每个extent 占用一个granule 。但是,dump 出来的结果显示extent 大小不固定,不一定是一个granul 。
每一个heap 的heap header ,包含used chunks 的list 和free chunks 的list 。
free chunks list 是一个hash table ,由255 个bucket 组成。每一个bucket 中存一个double linked list ,指向free chunk 。
隐含参数'_kghdsidx_count' 的值为2 ,SGA_TARGET 也配置了值,所以SGA 中各部分内存是oracle 自动配置的。
SQL> r 1* select name,value from gv_$parameter t where t.name like '_kghdsidx_count' NAME VALUE -------------------- ---------- _kghdsidx_count 2 SQL> show parameter sga NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max_size big integer 2G sga_target big integer 2G
使用dump heapdump 方法将sga 分一下。
ALTER SESSION SET EVENTS 'immediate trace name heapdump level 2';
SGA heap 有两个,但每个heap 又分成4 个部分。
HEAP DUMP heap name="sga heap" desc=0x2000002c HEAP DUMP heap name="sga heap(1,0)" desc=0x2001a960 FIVE LARGEST SUB HEAPS for heap name="sga heap(1,0)" desc=0x2001a960 HEAP DUMP heap name="sga heap(1,1)" desc=0x2001b598 FIVE LARGEST SUB HEAPS for heap name="sga heap(1,1)" desc=0x2001b598 HEAP DUMP heap name="sga heap(1,2)" desc=0x2001c1d0 FIVE LARGEST SUB HEAPS for heap name="sga heap(1,2)" desc=0x2001c1d0 HEAP DUMP heap name="sga heap(1,3)" desc=0x2001ce08 FIVE LARGEST SUB HEAPS for heap name="sga heap(1,3)" desc=0x2001ce08 HEAP DUMP heap name="sga heap(2,0)" desc=0x2001fa50 FIVE LARGEST SUB HEAPS for heap name="sga heap(2,0)" desc=0x2001fa50 HEAP DUMP heap name="sga heap(2,1)" desc=0x20020688 FIVE LARGEST SUB HEAPS for heap name="sga heap(2,1)" desc=0x20020688 HEAP DUMP heap name="sga heap(2,2)" desc=0x200212c0 FIVE LARGEST SUB HEAPS for heap name="sga heap(2,2)" desc=0x200212c0 HEAP DUMP heap name="sga heap(2,3)" desc=0x20021ef8 FIVE LARGEST SUB HEAPS for heap name="sga heap(2,3)" desc=0x20021ef8
参数”_enable_shared_pool_durations” 控制是否启用10g 中特有的shared pool duration 特性,当我们设置sga_target 为0 时该参数为false ;
同时在10.2.0.5 前若cursor_space_for_time 设置为true 时该参数也为false ,不过在10.2.0.5 以后cursor_space_for_time 参数被废弃
总而言之,SGA 的内存物理结构是以granule 为组成单元,以heap 为分区的。SGA 中的buffer cache 、shared pool 、large pool 等都是按照 heap manager 来配置的。
发表评论
-
Oracle分区表的分区交互技术实现数据快速转移
2013-01-22 11:48 14810有一个需求,将某业务表的某个时间点之前的记录转移到它的历史 ... -
等待事件enq TX row lock contention分析
2013-01-17 17:16 33298在Oracle数据库性能报告AWRRPT分析时,发现top ... -
Oracle的UNDO表空间管理总结
2013-01-14 15:06 12992UNDO是Oracle中的一个很 ... -
Oracle在不同windows系统中的迁移
2013-01-09 15:41 3807在Windows操作系统环境下 ... -
Oracle 10.2.0.1在windows 2008上安装失败经历
2013-01-07 10:29 8706这两天遇到这个一个项目上的数据库迁移的问题。原来的环境是数据库 ... -
所有的物化视图刷新脚本
2012-12-28 13:59 0select 'execute dbms_mview.refr ... -
Oracle数据库的SQL性能问题分析
2012-12-27 15:31 5289在Oracle 10.2.0.4数据库中,有一个SQL执行缓慢 ... -
db block gets和consistent gets的分析
2012-12-26 18:09 0在Oracle的文档中有这样一段解释: db block g ... -
创建增量同步Oracle物化视图问题
2012-12-25 14:07 15316我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某 ... -
查归档日志文件每小时生成量
2012-12-18 16:13 10794在O racle数据库中,通过v$archived_lo ... -
如何删掉临时表空间的文件
2012-12-18 15:40 0Unlike Oracle datafiles which m ... -
Oracle sql性能诊断暨event 10046和10053使用
2012-12-17 10:24 0早上em grid control监控显示数据库的负载增加,其 ... -
查LOB字段占用的空间大小
2012-12-13 16:00 4584查询Oracle表中LOB字段的占用空间大小。表中每一个LOB ... -
Oracle Data Guard的重做日志传输和应用状况监控
2012-12-04 14:05 4081这是一个用来监控Oracle Data Guard环境下从主库 ... -
Oracle sql loader使用速成
2012-11-30 14:14 4955Oracle SQL LOADER是Oracle的 ... -
Oracle 11g2的监听器配置
2012-11-29 14:34 4391Oracle的监听器服务注册 ... -
Deleting archivelog on physical standby with RMAN in Oracle 10g
2012-11-28 13:25 0Turns out to be quite easy ... -
to_char将number转成string的小技巧
2012-11-27 14:14 10639很多数据转换处理操作时,会遇到将0.007007040000转 ... -
to_date转成字符串时ORA-01843 not a valid month 问题分析
2012-11-26 16:38 29315(注,本文三度易稿) 在开发Oracle SQL或PL/SQL ... -
Data Guard 10g 的保护级别为RESYNCHRONIZATION问题
2012-11-25 11:01 1923Oracle的data guard创建完成 ...
相关推荐
"Oracle SGA 参数调整导致数据库启动异常处理方法" 在 Oracle 数据库中,SGA(System Global Area)参数调整可能会导致数据库启动异常。这种情况下,需要了解 SGA 参数的调整方法和恢复数据库的方法。 一、SGA ...
Oracle SGA(System Global Area)是Oracle数据库中至关重要的组件,它是一个共享内存区域,用于存储数据库运行时的各种数据结构和信息。Oracle SGA的优化和分配方式对于数据库性能有着直接的影响。在Oracle 9i及...
### Oracle SGA 设置详解 #### 一、Oracle SGA 概述 在Oracle数据库系统中,SGA(System Global Area)是所有用户进程共享的一块内存区域,它为Oracle实例提供了一个公共的数据和控制信息存储区。SGA的合理配置...
Oracle 数据库的 System Global Area (SGA) 是一个共享内存区域,它包含了数据库运行所需的各种组件,例如数据缓冲区缓存、重做日志缓冲区、共享 SQL 区域等。当需要调整 SGA 大小以优化数据库性能时,需要遵循一定...
### Oracle SGA调优知识点详解 #### 一、SGA简介 SGA(System Global Area)是Oracle数据库的一个重要组成部分,它是一个共享内存区域,由多个数据库进程共享,用于存储数据库信息并加速对这些信息的访问。SGA主要...
SGA+PGA最好不要超过总内存的70%,内存详细调整方案,供学习。
OracleSGA和PGA管理
### Oracle SGA (System Global Area) 组件与概述 #### SGA 概念与组成 在探讨Oracle数据库的系统全局区域(System Global Area, SGA)时,我们首先需要理解SGA的基本概念及其重要性。SGA是Oracle实例的一个重要组成...
Oracle数据库的内存结构主要包括三个关键部分:System Global Area (SGA), Program Global Area (PGA), 和 User Global Area (UGA)。这些区域都是用于存储和处理数据库操作的数据和信息。 1. **System Global Area ...
《Exploring Oracle Internals》一书深入探讨了Oracle数据库的内部工作原理和技术细节,对于希望深入了解Oracle数据库结构、功能以及如何进行有效管理的专业人士来说是一本宝贵的资源。本书不仅提供了理论上的解释,...
本文将深入探讨Oracle 9i中的System Global Area(SGA)性能调整,帮助你理解如何通过优化SGA来提升数据库的整体性能。 SGA是Oracle数据库的核心组成部分,它是一个共享内存区域,用于存储数据库运行时的各种信息。...
数据库 oracle sga 内存结构 sga图
Oracle SGA,全称为System Global Area,是Oracle数据库实例的核心组成部分,主要负责存储数据库信息和控制数据。在数据库运行过程中,SGA中的内存被多个进程共享,以提高数据访问速度和整体性能。优化SGA是Oracle...
Oracle SGA(System Global Area)是Oracle数据库管理系统中的核心组成部分,它是一个共享内存区域,用于存储数据库运行时所需的各种数据和信息。理解SGA的结构对于优化数据库性能和日常维护至关重要。 SGA主要包含...
Oracle数据库系统是企业级数据管理的重要工具,其中的SGA(System Global Area)和PGA(Program Global Area)是两个核心概念,对于理解Oracle数据库的工作原理至关重要。本文将深入探讨这两个概念,以及它们在...
Oracle 修改 SGA 参数无法启动的解决办法 Oracle 中的 SGA(System Global Area)是一块共享内存区域,是 Oracle 实例的核心组件之一。SGA 中存储了数据库的控制信息、用户会话信息、锁信息、缓存信息等。修改 SGA ...