您的位置:首页 > 博客中心 > 数据库 >

Oracle内存管理(之五)

时间:2022-03-10 18:13

【深入解析--eygle】学习笔记

1.4. 2其他内存组件

Large Pool-大池是SGA的一个可选组件,通常用于共享服务器模式(MTS)、 并行计算或

RMAN的备份恢复等操作。

Java Pool-Java池主要用于JVM等Java选件。

Streams Pool-Streams pool是Oracle10g引入的概念,为Oracle的Streams功能所使用,如果不定义该参数,这部分内存将从Shread Pool中分配

 

对于SGA各部分内存分配,可以从数据库的视图中查询得到:

 

 

17:46:03 sys@felix SQL>select * from v$sga;

 

NAME                                          VALUE

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

Fixed Size                                  2228944

Variable Size                             335547696

Database Buffers                           75497472

Redo Buffers                                4272128

 

18:00:20 sys@felix SQL>

 

在Oracle9i中,Variable  Size  包括shared_pool_size,java_pool_size和large_pool_size部分,SGA_MAX_SIZE去除db_cache_size部分也被归入可变部分,所以很多时候我们看到的可变部分内存要远高于可变内存组件大小;

 

Redo Buffers指日志缓冲区分配的内存大小,这个参数值通常比log_buffers参数设置略大;因为Log  Buffer并非按照数据块大小分配,在内存中通常需要设置保护页对Log Buffer进行保护。

 

18:00:20 sys@felix SQL>select * from v$sgainfo;

 

NAME                                          BYTESRESIZE

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

Fixed SGA Size                              2228944 No

Redo Buffers                                4272128 No

Buffer Cache Size                          75497472 Yes

Shared Pool Size                          171966464 Yes

Large Pool Size                             4194304 Yes

Java Pool Size                              4194304 Yes

Streams Pool Size                           8388608 Yes

Shared IO Pool Size                               0 Yes

Granule Size                                4194304 No

Maximum SGA Size                          417546240 No

Startup overhead in Shared Pool            65418776 No

Free SGA Memory Available                 146800640

 

12 rows selected.

 

18:06:23 sys@felix SQL>

 

 

当前SGA的分配和使用具体信息我们还可以通过V$SGASTAT视图查询得到:

 

select *

  FROM(SELECT *

         FROM v$sgastat

        WHERE pool = ‘shared pool‘

        ORDER BY BYTES DESC)

 WHERE ROWNUM<= 5

 

 

18:06:23 sys@felix SQL>select *

18:08:05  2    FROM (SELECT *

18:08:05  3            FROM v$sgastat

18:08:05  4           WHERE pool = ‘sharedpool‘

18:08:05  5           ORDER BY BYTES DESC)

18:08:05  6   WHERE ROWNUM <= 5;

 

POOL                    NAME                                          BYTES

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

shared pool              free memory                                30868336

shared pool              SQLA                                       21540248

shared pool              KGLH0                                      19496600

shared pool              row cache                                   7593704

shared pool              PLMCD                                       6275624

 

18:08:07 sys@felix SQL>


1.4.3 SGA 与共享内存

 

SGA的设置在Linux/Unix上和一个操作系统内核参数有关,这个参数是:shmmax。不同操作系统,该参数设置的位置不同,在Solaris 上,该参数由/etc/system 文件中shmsys:shminfo_shmmax定义;在Linux上,该参数由/proc/sys/kernel/shmmax参数定义

很多人将该参数理解为共享内存的大小,这是不对的。实际上shmmax内核参数定义的是系统允许的单个共享内存段的最大值,如果该参数设置小于Oracle SGA设置,那么SGA仍然可以创建成功,但是会被分配多个共享内存段。我们通常推荐通过调整shmmax设置,将SGA限制在一个共享内存段中。

 

在Windows系统中,由于系统采用多线程服务器(所有oracle server   process 实际上都是一个进程中的线程),所以不存在共享内存的问题,无需进行特殊设置。

以64位Linux平台为例来看一下shmmax参数对于数据库的影响。

 

[root@felix kernel]# uname -a

Linux felix 2.6.39-200.24.1.el6uek.x86_64 #1 SMPSat Jun 23 02:39:07 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux

[root@felix kernel]#

 

                                                                                                                                            

[root@felix kernel]# pwd

/proc/sys/kernel

[root@felix kernel]# ls shm*

shmall shmmax  shmmni

[root@felix kernel]# cat shmmax

4398046511104

[root@felix kernel]#


 

 

需要提醒的是,虽然Oracle9i中,Oracle提供了动态内存修改的功能,但是仍然建议在系统规划时做好设置,尽量避免运行时的动态调整。动态调整某些系统参数(如undo_retention  等)在繁忙的系统中可能触发bug而造成系统挂起。





Oracle内存管理(之五),布布扣,bubuko.com

热门排行

今日推荐

热门手游