设为首页 加入收藏

TOP

Oracle内存管理(之五)(一)
2015-07-24 10:53:33 来源: 作者: 【 】 浏览:7
Tags:Oracle 内存 管理 之五

【深入解析--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]#?

可以通过ipcs 命令查看此设置下共享内存的分配,我们可以看到Oracle分配了多个共享内存段以满足SGA设置的需要

[root@felix kernel]# ipcs -sa

------ Shared Memory Segments --------

key shmid owner perms bytes nattch status

0x6c6c6536 0 root 600 4096 0

0x00000000 32769 gdm 600 393216 2 dest

0x00000000 65538 gdm 600 393216 2 dest

0x00000000 98307 gdm 600 393216 2 dest

0x00000000 131076 gdm 600 393216 2 dest

0x00000000 163845 gdm 600 393216 2 dest

0x00000000 229382 oracle 640 4096 0

0x00000000 262151 oracle 640 4096 0

0xb875ccb0 294920 oracle 640 4096 0 --在此可以看出,该oracle数据库使用了3个内存段

------ Semaphore Arrays --------

key semid owner perms nsems

0x00000000 0 root 600 1

0x00000000 32769 root 600 1

0x549cc314 163842 oracle 640 154

------ Messa

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇(8)mysql中的视图 下一篇Oracle内存管理(之四)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)