Automatic Memory Management

1. 如果要启动Automatic Memory Management,如何确定MEMORY_TARGET的值呢?

1> 在SQL*Plus下show parameter target,结果如下:

SQL> show parameter target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
db_flashback_retention_target integer 1440
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 0
memory_target big integer 0
parallel_servers_target integer 256
pga_aggregate_target big integer 4779M
sga_target big integer 14368M

2> 确定maximum PGA allocated的值

SQL> select value/1024/1024 from v$pgastat where name='maximum PGA allocated';

VALUE/1024/1024
---------------
4331.59961

3> memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)

在本例中,则memory_target至少为14368+4779=19147M

2. 如何优化Memory Target Size,SGA Target Size,PGA Target Size。

可分别查询V$MEMORY_TARGET_ADVICE,V$SGA_TARGET_ADVICE,V$PGA_TARGET_ADVICE表,下面以V$SGA_TARGET_ADVICE为例。

SQL> select * from v$sga_target_advice order by sga_size;

  SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
290 .5 448176 1.6578 1636103
435 .75 339336 1.2552 1636103
580 1 270344 1 1201780
725 1.25 239038 .8842 907584
870 1.5 211517 .7824 513881
1015 1.75 201866 .7467 513881
1160 2 200703 .7424 513881

SGA_SIZE_FACTOR和ESTD_DB_TIME_FACTOR为1的行对应的是当前SGA的值,该本例中,当前SGA的SIZE为580M。可根据ESTD_DB_TIME和ESTD_PHYSICAL_READS的期望值来相应调整SGA的值。

3. 关于MEMORY_TARGET和MEMORY_MAX_TARGET的关系

MEMORY_TARGET是动态参数,可在数据库运行过程中动态修改,MEMORY_MAX_TARGET是静态参数,只有重启数据库才能生效。MEMORY_TARGET的值不能超过MEMORY_MAX_TARGET。设置MEMORY_MAX_TARGET有两个好处:一、防止意外将MEMORY_TARGET的设置得过高。二、为将来增大MEMORY_TARGET的值保留空间。

在pfile中,如果你忽略了MEMORY_MAX_TARGET的值,只设置了MEMORY_TARGET的值,则MEMORY_MAX_TARGET默认将设置为MEMORY_TARGET的值。如果只设置了MEMORY_MAX_TARGET的值,而没有设置MEMORY_TARGET的值,则MEMORY_TARGET默认为0。

4. 可通过v$memory_dynamic_components查看内存各组件的信息

SQL> select component,current_size,min_size,max_size,user_specified_size from v$memory_dynamic_components;

COMPONENT                      CURRENT_SIZE   MIN_SIZE     MAX_SIZE USER_SPECIFIED_SIZE
------------------------------ ------------ ---------- ---------- -------------------
shared pool 92274688 41943040 92274688 0
large pool 8388608 8388608 71303168 0
java pool 4194304 4194304 4194304 0
streams pool 0 0 0 0
SGA Target 205520896 205520896 205520896 0
DEFAULT buffer cache 92274688 37748736 100663296 0
KEEP buffer cache 0 0 0 0
RECYCLE buffer cache 0 0 0 0
DEFAULT 2K buffer cache 0 0 0 0
DEFAULT 4K buffer cache 0 0 0 0
DEFAULT 8K buffer cache 0 0 0 0 COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPECIFIED_SIZE
------------------------------ ------------ ---------- ---------- -------------------
DEFAULT 16K buffer cache 0 0 0 0
DEFAULT 32K buffer cache 0 0 0 0
Shared IO Pool 0 0 0 0
PGA Target 109051904 109051904 109051904 0
ASM Buffer Cache 0 0 0 0 16 rows selected.

5. 如何启动Automatic Memory Management,设置如下:

ALTER SYSTEM SET MEMORY_TARGET = nM;
ALTER SYSTEM SET SGA_TARGET = 0;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;

注意:如果SGA_TARGET和PGA_AGGREGATE_TARGET没有设置为0,则设置的值将是其最小值。

SGA

6. SGA各组件的分配以granule为单位,而granule的大小以SGA_MAX_SIZE为衡量标准,具体如下:

关于granule的大小,可通过以下语句进行查询

SQL> select * from v$sgainfo where name='Granule Size';

NAME                                  BYTES RES
-------------------------------- ---------- ---
Granule Size 4194304 No

注意:SGA给各组件分配空间,都是granule的整数倍,譬如,如果你的granule size是4M,你将DB_CACHE_SIZE的值设置为10M,则SGA实际为DB_CACHE_SIZE分配的内存空间是12M。

7. 关于SGA_MAX_SIZE

SGA_MAX_SIZE是静态参数,具体说明和默认值如下所示:

8. ASMM

Automatic shared memory management通过设置SGA_TARGET的值来启动。在SGA各组件中,有些组件可通过ASMM自动分配内存,有些组件必须显性指定值。具体如下:

Automatically Sized SGA Components and Corresponding Parameters

以下参数SGA可自动调节,如果启动了ASMM,如下值必须设置为0,倘若不是0,则表示其最小值

Manually Sized SGA Components that Use SGA_TARGET Space--以下参数只能手动配置内存

9. 在实际应用中,SGA应该全部放在内存中,如果有一部分放在虚拟内存中,因为分页问题,则整个数据库的性能将受到显著影响。

10. 如果要启动ASMM,如何确定SGA_TARGET的值?

SELECT (
(SELECT SUM(value) FROM V$SGA) -
(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
) "SGA_TARGET"
FROM DUAL;

11. Buffer Cache

Buffer cache的大小影响数据库的性能,较大的buffer cache虽然能减少物理读和写的次数,但由于它占用了大量的内存,可能会导致分页和交换。

Oracle支持不同大小的block size,在创建表空间时,如果指定了非标准的block size,则必须设置相应的DB_nK_CACHE_SIZE的值。注意,system表空间使用的是标准块,标准块的大小可通过如下语句查看:

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192

Oracle支持5种不同大小的block size,相应的cache值,可通过以下参数设置:

DB_2K_CACHE_SIZE
DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE
DB_16K_CACHE_SIZE
DB_32K_CACHE_SIZE

注意:DB_nK_CACHE_SIZE不能用于设定标准块的cache值,标准块的cache size是由db_cache_size决定的。在本例中,标准块的大小是8k,所以设置DB_8K_CACHE_SIZE的值将报以下错误:

SQL> alter system set db_8k_cache_size=10m;
alter system set db_8k_cache_size=10m
*
ERROR at line 1:
ORA-32017: failure in updating SPFILE
ORA-00380: cannot specify db_8k_cache_size since 8K is the standard block size

32k的block size只在64位操作系统中有效。

12. Buffer Pools

buffer cache包含三种池:KEEP池、RECYCLE池、DEFAULT池。其中KEEP池是将对象的数据永久保存在内存中,RECYCLE池是一旦数据不需要,就从内存中剔除。DEFAULT池是默认的。KEEP池和RECYCLE池的大小分别根据DB_KEEP_CACHE_SIZE和DB_RECYCLE_CACHE_SIZE两个参数来设置。这三种池只支持标准块,对于非标准块,只支持DEFAULT池。

13. 如果要手动管理PGA,需要显性设定以下值。

SORT_AREA_SIZE, HASH_AREA_SIZE, BITMAP_MERGE_AREA_SIZE, CREATE_BITMAP_AREA_SIZE。

《Administrator's Guide》之Managing Memory的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. android wifi 获取扫描结果

    1.1 framework部分: 1.2 supplicant部分: hdd_cfg80211_scan_done_callback -> wlan_hdd_cfg80211_update_bs ...

  2. mysql 性能配置优化

    修改mysql配置文件 my.cnf ,内容如下: [mysqld]datadir=/data/mysql/datasocket=/var/lib/mysql/mysql.sockuser=mysql ...

  3. 【sqlyog(mysql)Test Connection功能实现的原理】

    sqlyog这个软件中有:Test Connection(测试连接)这样的一个功能, 现在我的开发环境是java和mysql,接下来一起探索这个功能的实现过程:

  4. java日志框架slf4j与log4j

    日志记录自然是非常重要的,但恐怕能记住slf4j与log4j等日志框架配置的人就很少了,这个东西不难,只是配置好后很少会去动它,开发新项目一般也是从其他项目拷贝,或者参照文档 废话不多说,先说log4 ...

  5. addEventListener、attachEvent、cancelBubble兼容性随笔

    一.前言 1. element.addEventListener(eventType, handler, capture); (1)参数eventType是要注册句柄的事件类型名. (2)参数hand ...

  6. xUtils 1.8.4 (Android工具库) 发布 - http模块优化

    感谢关注xUitls的网友最近一段时间给予的热心反馈,xUtils近期做了很多细节优化,同时修复和优化了大家反馈的一些问题.重要的变化有http请求返回更全面的结果信息:下载设置断点续下时,如果服务器 ...

  7. RCP:给GEF编辑器添加拖拽辅助线

    当图形边缘碰触时,会产生一条帮助拖拽的辅助线 这里需要三个类: 1.SnapToGeomotry 2.SnapToGuide(非必须) 3.SnapFeedbackPolicy

  8. 【面试必备】CSS盒模型的点点滴滴

    从接触CSS布局开始,就一直在听盒模型的概念了,网上的文章有很多,深浅不一.有些人会认为盒模型很简单,不就是border.margin.padding.content嘛,一个元素所占的空间就是把它们都 ...

  9. CSS样式重置

    ;;;;;;;;;; } input, select {     vertical-align:middle; }

  10. ASP.NET MVC实现仪表程序

    1.1.1 摘要 在大多数情况下,我们的Web程序不仅仅需要给用户提供具体数据,在一些情况下,我们还需要给高级的用户或管理者提供数据汇总和分析图表之类的功能. 如果我们不想显示一大堆烦心的数据,希望通 ...