Oracle内存管理(之四)
【深入解析--eygle】学习笔记
1.3 SGA管理
SGA指系统全局区(System Global Area),是一块用于载入数据、对象并保存执行状态和数据库控制信息的一块内存区域,在数据库实例启动时分配,当实例关闭时释放。每一个实例都拥有自己的SGA区。
在第一章以前ᨀ到。当数据库启动到nomount状态时。SGA已经分配,同一时候启动后台进程,在SQL*Plus中通过show
sga命令能够看到SGA的分配情况:
sys@felix SQL>show parameter sga NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 400M
sga_target big integer 0
16:12:56 sys@felix SQL>
连接到Oracle数据库的用户都能够共享SGA中的数据。通常为了更优化的性能,我们总是期望在物理内存同意的情况下。设置更高的SGA区,以降低物理I/O(SGA中数据缓冲区的增大能够有效地降低物理读)。
1.4 SGA
下图是最常见的数据库实例体系结构图,展现了SGA的结构:
1.4.1 固定区域 - Fixed Area
Fixed Size 部分是SGA中的固定部分,包括几千个变量和一些小的数据结构,如Latch或地址指针等。这部分内存分配和特定的数据库版本号以及平台有关。不受用户控制。并且这些信息对于数据库来说很重要,可是通常我们用户不须要关心。
固定部分仅仅须要非常小的内存,能够通过一个内部表X$KSMFSV([K]ernel [S]ervice Layer 。 [M]emoryManagement。Addresses of [F]ixed [S]GA [V]ariables)查询。此外Oracle的内部表X$KSMMEM记录了整个SGA的地址映射关系,通过X$KSMFSV和X$KSMMEM关联,能够找出Fixed Area中每一个变量的设置。
在32位平台上。X$KSMMEM表中每条记录代表4 Bytes,在64位平台。每条记录代表4 Bytes:
sys@felix SQL>select * from x$ksmmem whererownum <5; ADDR INDX INST_ID KSMMMVAL
---------------- ---------- --------------------------
0000000060000000 0 1 00
0000000060000008 1 1 00
0000000060000010 2 1 00
0000000060000018 3 1 00 16:21:39 sys@felix SQL>
sys@felix SQL>select ksmfsnam,ksmfssiz from x$ksmfsv where ksmfsnam='kcsgscn_'; KSMFSNAM KSMFSSIZ
----------------- --------
kcsgscn_ 48 16:23:51 sys@felix SQL>
通过ORADEBUG工具能够得到当前内存中的SCN值:
16:23:51 sys@felix SQL>oradebug setmypid
Statement processed.
16:26:19 sys@felix SQL>oradebug DUMPvar SGA kcsgscn_
kcslf kcsgscn_ [060019598, 0600195C8) = 00183004 00000000 00000000 00000000 000024AE 00000000 00000000 00000000 00000000 00000000 60019278 00000000
16:26:22 sys@felix SQL>
SCN值获取例如以下:
sys@felix SQL>selectto_number('183004','xxxxxxxxxx') from dual;
TO_NUMBER('183004','XXXXXXXXXX')
--------------------------------
1585156
16:27:05 sys@felix SQL>
Fixed Area包括非常多控制信息,可是须要注意的是。查询X$KSMFSV视图可能会导致进程异常,须要慎重使用
1.4.1.1 Buffer Cache
Buffer Cache-缓冲区快速缓存,用于存储近期使用的数据块,这些数据块可能是被改动过的。也可能是未经改动的。我们知道。在Oracle对数据的处理过程中,代价最昂贵的就是物理I/O(Physical I/O)操作了,相同的数据从内存中得到要比从磁盘上读取快得多。所以将尽可能多的数据保存在内存中,能够降低磁盘I/O操作。从而提高数据库的性能。
从Oracle9i開始,Oracle引入了一个新的初始化參数db_cache_size ,该參数用来定义主Block Size(db_block_size定义的块大小)的Default缓冲池的大小
各内存组件所使用的Granule大小能够通过动态性能视图来查询:
16:36:00 sys@felix SQL>select component,granule_size from v$sga_dynamic_components; COMPONENT GRANULE_SIZE
--------------------------------- ------------
shared pool 4194304
large pool 4194304
java pool 4194304
streams pool 4194304
DEFAULT buffer cache 4194304
KEEP buffer cache 4194304
RECYCLE buffer cache 4194304
DEFAULT 2K buffer cache 4194304
DEFAULT 4K buffer cache 4194304
DEFAULT 8K buffer cache 4194304
DEFAULT 16K buffer cache 4194304
DEFAULT 32K buffer cache 4194304
Shared IO Pool 4194304
ASM Buffer Cache 4194304 14 rows selected. 17:33:14 sys@felix SQL>
Oracle管理Buffer Cache使用的是LRU算法,可是这又带来另外一个问题。非常多批处理的操作(比方全表扫᧿等)可能会导致Buffer
Cache的刷新,将常常使用的数据“挤出”Buffer Cache,在不同版本号中,Oracle不停的改进LRU算法,以避免这类操作的过度影响。
可是在此之外,Oracle提供了BufferCache的多缓冲池技术从另外一个方面来解决问题。
所谓的多缓冲池技术是指,依据不同数据的不同訪问方式,将Buffer Cache分为Default、Keep和Recycle池三个部分。对于常常使用的数据。我们能够在建表时就指定将其存放在Keep池中;对于常常一次性读取使用的数据,能够将其存放在Recycle池中。Keep池中的数据倾向于一直保存,Recycle池中的数据倾向于即时老化,而Default池则存放未指定存储池的数据。依照LRU算法管理。
默认情况下。全部表都使用DEFAULT池,它的大小就是数据缓冲区Buffer Cache的大小,由初始化參数db_cache_size(8i中是db_block_size*db_block_buffers)决定。
17:33:14 sys@felix SQL>show parameter db_cache_size NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_cache_size big integer 0
17:37:24 sys@felix SQL>
假设我们在创建数据表或改动数据表时指定STORAGE (BUFFER_POOL KEEP)或者STROAGE(BUFFER_POOL RECYCLE)语句,就设置了这张表使用KEEP或者RECYCLE缓冲区。
这两个缓冲区的大小分别由初始化參数db_keep_cache_size和db_recycle_cache_size来决定。
17:39:03 sys@felix SQL>show parameter db_keep_cache_size NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_keep_cache_size big integer 0
|
Property |
Description |
|
Parameter type |
Big integer |
|
Syntax |
DB_KEEP_CACHE_SIZE = integer [K | M | G] |
|
Default value |
0 (DB_KEEP_CACHE_SIZE is not configured by default) |
|
Modifiable |
ALTER SYSTEM |
|
Range of values |
Minimum: 0 (values greater than zero are automatically modified to be either the granule size * number of processor groups, or 4 MB * number of CPUs, whichever is greater) Maximum: operating system-dependent |
|
Basic |
No |
DB_KEEP_CACHE_SIZE specifiesthe size of the KEEP bufferpool. The size of the buffers in the KEEP buffer
pool is the primary blocksize (the block size defined by the DB_BLOCK_SIZE initialization parameter).
17:39:24 sys@felix SQL>show parameter db_recycle_cache_size NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recycle_cache_size big integer 0
17:39:42 sys@felix SQL>
|
Property |
Description |
|
Parameter type |
Big integer |
|
Syntax |
DB_RECYCLE_CACHE_SIZE = integer [K | M | G] |
|
Default value |
0 (DB_RECYCLE_CACHE_SIZE is not configured by default) |
|
Modifiable |
ALTER SYSTEM |
|
Range of values |
Minimum: 0 (values greater than zero are automatically modified to be either the granule size * number of processor groups, or 4 MB * number of CPUs, whichever is greater) Maximum: operating system-dependent |
|
Basic |
No |
DB_RECYCLE_CACHE_SIZE specifiesthe size of the RECYCLE bufferpool. The size of the buffers in the RECYCLE pool
is the primary block size(the block size defined by the DB_BLOCK_SIZE initialization parameter).
17:39:42 sys@felix SQL>show parameter cache_size NAME TYPE VALUE
---------------------------------------------------------- ------------------------------
client_result_cache_size big integer 0
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
db_cache_size big integer 0
db_flash_cache_size big integer 0
db_keep_cache_size big integer 0
db_recycle_cache_size big integer 0
同一时候还能够看到。在Oracle9i以后存在一系列的db_nk_cache_size參数。这是Oracle9i中引入的多块大小支持。Oracle9i以后同意在同一个数据库中存在多种Block_size的表空间,分别支持:
2k,4k,8k,16k和32k 的Block_size,当中。由db_block_size定义的块大小被称为主Block_size。
假设在数据库中创建不同block_size的表空间则须要分别设定db_nk_cache_size參数。
各缓冲池的设置。我们能够通过查询v$buffer_pool得到:
17:43:03 sys@felix SQL>select id,name,block_size,current_size,target_size from v$buffer_pool;
ID NAME BLOCK_SIZE CURRENT_SIZE TARGET_SIZE
---------- ---------------------------------------- ---------- ------------ -----------
3 DEFAULT 8192 72 72
17:46:03 sys@felix SQL>
1.4.1.2 Shared Pool
Shared Pool通常被称为共享池。包括共享内存结构,如SQL区等。SQL区包括SQL解
析树、运行计划等信息,通过共享池。重复运行的SQL能够在不同Session间得到共享。
1.4.1.3 Redo Log Buffer
Redo Log Buffer-日志缓冲区存储重做日志条目(redo entries),日志记录数据库变更,终于将被写出到重做日志文件里,在数据库崩溃或故障时用于恢复。假设 数 据 库 运 行 在 归 档 模 式下,终于日志文件还会被写出到归档日志中,这些归档能够在介质恢复时用于进行数据恢复。
日志缓冲区的大小由初始化參数log_buffer决定。这是一个静态參数。不能动态调整。
Oracle内存管理(之四)的更多相关文章
- Oracle内存管理技术
1.Oracle内存管理技术 2.配置自动内存管理(AMM) 3.监视自动内存管理(AMM) 4.配置自动共享内存管理(ASMM) 5.配置自动PGA内存管理 Reference 1.Oracle内存 ...
- 这篇关于Oracle内存管理方式的介绍太棒了!我必须要转发,很全面。哈哈~
"Oracle内存管理可分为两大类,自动内存管理和手动内存管理.其中手动内存管理又可分为自动共享内存管理,手动共享内存管理,自动PGA内存管理以及手动PGA内存管理.本文会简单的介绍不同的内 ...
- Oracle 内存管理
--内存分配建库时可以先分配系统内存的50%-80%给Oracle,后期根据业务再进行调整.SGA.PGA分配比例:OLTP:SGA %80 , PGA %20OLAP:SGA %50 , PGA % ...
- Oracle内存管理(五)
[深度分析--eygle]学习笔记 1.4. 2其他内存组件 Large Pool-大池是SGA的一个可选组件,通经常使用于共享server模式(MTS). 并行计算或 RMAN的备份恢复等操作. J ...
- Oracle内存管理(之二)
[深入解析--eygle] 学习笔记 1.2.2 UGA和CGA UGA(用户全局区)由用户会话数据.游标状态和索引区组成.在共享server模式下,一个共享服务进程被多个用户进程共享,此时UGA是S ...
- Oracle内存管理(之五)
[深入解析--eygle]学习笔记 1.4. 2其它内存组件 Large Pool-大池是SGA的一个可选组件,通经常使用于共享server模式(MTS). 并行计算或 RMAN的备份恢复等操作. J ...
- Oracle内存管理方式由amm切换为asmm
(一)ASMM和AMM 在Oracle 10g时,Orale推出ASMM(Automatic Shared Memory Managed),实现了SGA和PGA各自内部的自调节.在Oracle 11g ...
- ORACLE内存管理之ASMM AMM
ORACLE ASMM ORACLE AMM ASMM转换至AMM AMM转换至ASMM
- Oracle内存管理理论篇二
目标 了解oracle内存管理方式 掌握ASMM管理方式 掌握AMM管理方式 监控内存使用 学习一个知识点时,最好先了解其历史.ORACLE近期的版本都对内存管理做了简化,从9i通过PGA_AGGRE ...
随机推荐
- single-page关于vue-router
最近复习了vue,项目实战前有练手,做一个简单的单页面应用. 1.router-view就是我们渲染的组件,router-view被包裹在一个div中,一旦路由跳转,router-view就会被渲染为 ...
- Codefroces Educational Round 27 (A,B,C,D)
A. Chess Tourney time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Oracle数据库安装时 environment variable path 大于 1023
提示的内容如下: 打开系统的环境变量设置, 编辑Path,全选将其中的路径全部复制出来放到文本文档中.新建一个系统变量取名Path_Old_1,剪切Path中的所有变量复制进path1然后保存,将Pa ...
- RK3066 实现LED闪烁的代码分析
实现LED灯的闪烁,须要在驱动里加入一个定时器函数,详细实现涉及到了LED GPIO驱动.用户空间程序调用驱动程序. 1.首先来看LED设备驱动注冊过程,代码位于../kernel/drivers/l ...
- Leetcode:signal_number_ii
一. 题目 给一个数组,当中仅仅有一个数出现一次.其它的数都出现3次,请找出这个数.要求时间复杂度是O(n).空间复杂度O(1). 二. 分析 第一次遇见这种题,真心没思路-.前面的s ...
- 洛谷 P3386 【模板】二分图匹配 Dinic版
题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...
- BZOJ3160: 万径人踪灭(FFT,回文自动机)
BZOJ传送门: 解题思路: FFT在处理卷积时可以将自己与自己卷,在某一种字母上标1其他标0,做字符集次就好了. (回文就是直接对称可以联系偶函数定义理解,根据这个性质就可以将字符串反向实现字符串匹 ...
- Mysql 简介二
Mysql 数据库引擎: 数据库引擎是用于存储.处理和保护数据的核心服务 Mysql支持的引擎一般有这几种: MyISAM Mysql 5.1版本之前默认的存储引擎,仅仅支持表锁,但查询速度较Inno ...
- 蚂蚁金服入股36Kr给我的一点警示:应该相信自己的理性分析,不能盲目迷信权威
最近3年,关注互联网和创业投资比较多,每周都会关注下本周发生的创业投融资大事件. 我注意到,一些自媒体作者经常会发布一些有"前瞻性"的文章,比如"美团大众要合并了&quo ...
- CISP/CISA 每日一题 20
CISSP 每日一题(答) What methods can be used to protectmobile devices such as a smartphone? Encryption,GPS ...