`
mikixiyou
  • 浏览: 1098993 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353155
社区版块
存档分类
最新评论

Oracle SGA internals 猜

阅读更多

分析对象Oracle 10.2.0.4 64bit for linux。先声明一下,分析过程和结论都是个人理解,不一定是正确的。


如果有疑问和建议,欢迎一起讨论学习。


SGA 包含fixed sgabuffer pool(db cache)shared poollarge pooljava poolstreams 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 sgaredo 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 directoryHeap headers

最后一个  "granule"  包含Guard pagesRedo bufferOperating system specific overheadRemaining space unused

(这是juliandyke.com 上的结论,摘录于此,未证实。)

X$KSMGE 中可以查到sgagranule 的组成,但结果数比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 headerchunk body 一一对应。chunk 的类型分为permanentrecreatablefreeablefree 等等。

每个extent 占用一个granule 。但是,dump 出来的结果显示extent 大小不固定,不一定是一个granul

每一个heapheap header ,包含used chunkslistfree chunkslist

free chunks list 是一个hash table ,由255bucket 组成。每一个bucket 中存一个double linked list ,指向free chunk

 

隐含参数'_kghdsidx_count' 的值为2SGA_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_target0 时该参数为false

同时在10.2.0.5 前若cursor_space_for_time 设置为true 时该参数也为false ,不过在10.2.0.5 以后cursor_space_for_time 参数被废弃

总而言之,SGA 的内存物理结构是以granule 为组成单元,以heap 为分区的。SGA 中的buffer cacheshared poollarge pool 等都是按照  heap manager 来配置的。

分享到:
评论

相关推荐

    oracle改sga导致数据库启动异常处理办法

    "Oracle SGA 参数调整导致数据库启动异常处理方法" 在 Oracle 数据库中,SGA(System Global Area)参数调整可能会导致数据库启动异常。这种情况下,需要了解 SGA 参数的调整方法和恢复数据库的方法。 一、SGA ...

    Oracle SGA

    Oracle SGA(System Global Area)是Oracle数据库中至关重要的组件,它是一个共享内存区域,用于存储数据库运行时的各种数据结构和信息。Oracle SGA的优化和分配方式对于数据库性能有着直接的影响。在Oracle 9i及...

    oracle sga设置

    ### Oracle SGA 设置详解 #### 一、Oracle SGA 概述 在Oracle数据库系统中,SGA(System Global Area)是所有用户进程共享的一块内存区域,它为Oracle实例提供了一个公共的数据和控制信息存储区。SGA的合理配置...

    更改ORACLE SGA的详细步骤

    Oracle 数据库的 System Global Area (SGA) 是一个共享内存区域,它包含了数据库运行所需的各种组件,例如数据缓冲区缓存、重做日志缓冲区、共享 SQL 区域等。当需要调整 SGA 大小以优化数据库性能时,需要遵循一定...

    oracle Sga调优

    ### Oracle SGA调优知识点详解 #### 一、SGA简介 SGA(System Global Area)是Oracle数据库的一个重要组成部分,它是一个共享内存区域,由多个数据库进程共享,用于存储数据库信息并加速对这些信息的访问。SGA主要...

    ORACLE 内存调整(SGA和PGA)

    SGA+PGA最好不要超过总内存的70%,内存详细调整方案,供学习。

    OracleSGA和PGA管理.doc

    OracleSGA和PGA管理

    Oracle_SGA

    ### Oracle SGA (System Global Area) 组件与概述 #### SGA 概念与组成 在探讨Oracle数据库的系统全局区域(System Global Area, SGA)时,我们首先需要理解SGA的基本概念及其重要性。SGA是Oracle实例的一个重要组成...

    oracle SGA PGA UGA 内存

    Oracle数据库的内存结构主要包括三个关键部分:System Global Area (SGA), Program Global Area (PGA), 和 User Global Area (UGA)。这些区域都是用于存储和处理数据库操作的数据和信息。 1. **System Global Area ...

    Exploring Oracle Internals

    《Exploring Oracle Internals》一书深入探讨了Oracle数据库的内部工作原理和技术细节,对于希望深入了解Oracle数据库结构、功能以及如何进行有效管理的专业人士来说是一本宝贵的资源。本书不仅提供了理论上的解释,...

    Oracle 9i 调整SGA性能

    本文将深入探讨Oracle 9i中的System Global Area(SGA)性能调整,帮助你理解如何通过优化SGA来提升数据库的整体性能。 SGA是Oracle数据库的核心组成部分,它是一个共享内存区域,用于存储数据库运行时的各种信息。...

    oracle sga

    数据库 oracle sga 内存结构 sga图

    ORACLE SGA的性能优化.pdf

    Oracle SGA,全称为System Global Area,是Oracle数据库实例的核心组成部分,主要负责存储数据库信息和控制数据。在数据库运行过程中,SGA中的内存被多个进程共享,以提高数据访问速度和整体性能。优化SGA是Oracle...

    oracle-sga结构

    Oracle SGA(System Global Area)是Oracle数据库管理系统中的核心组成部分,它是一个共享内存区域,用于存储数据库运行时所需的各种数据和信息。理解SGA的结构对于优化数据库性能和日常维护至关重要。 SGA主要包含...

    oracle中的SGA和PGA

    Oracle数据库系统是企业级数据管理的重要工具,其中的SGA(System Global Area)和PGA(Program Global Area)是两个核心概念,对于理解Oracle数据库的工作原理至关重要。本文将深入探讨这两个概念,以及它们在...

    oracle 修改sga参数无法启动的解决办法

    Oracle 修改 SGA 参数无法启动的解决办法 Oracle 中的 SGA(System Global Area)是一块共享内存区域,是 Oracle 实例的核心组件之一。SGA 中存储了数据库的控制信息、用户会话信息、锁信息、缓存信息等。修改 SGA ...

Global site tag (gtag.js) - Google Analytics