Oracle数据库之内存管理

大页内存


备注

备注1:不能使用oracle自动内存管理

备注2:目的是减少swap的使用

备注3:建议SGA大于8G

备注4:只限于linux系统

备注5:不会使用/dev/shm空间

备注6:需要设置内存锁

如果配置了大页内存但没有被oracle使用

1.sga_max_size超过了大页内存

2.没有设置内存锁

3.没有取消自动内存管理

查看系统大页内存的使用情况

cat /proc/meminfo | grep -i HugePages

备注1:一般大页内存的默认大小为2M;

备注2:单个内存页的大小有OS内核决定,不能修改;

设置大页内存的数量

查看sga_max_size

show parameter sga_max_size

计算大页内存的总内存数(单位全部为M)

sga_max_size(MB)/每个大页内存的大小(默认2M) +200(预留)

配置大页内存参数

vi /etc/sysctl.conf

添加或修改为如下内容:

vm.nr_hugepages = 600

使配置生效

sysctl -p

查看大页内存的使用情况

cat /proc/meminfo | grep -i HugePages

备注1:则不断的"sysctl -p",直到达到设定值为止;或者重启系统;

设置内存锁

配置limits.conf文件

vi /etc/security/limits.conf

添加或修改为如下内容:

oracle soft memlock -1

oracle hard memlock -1

备注:-1为不限制,如果设置,则memlock的数据要大于大页内存的数量

查看修改(oracle用户)

ulimit -l

配置swap空间

清空swap空间

swapoff -a && swapon -a

修改sysctl.conf文件

vi /etc/sysctl.conf

添加或修改为如下内容:

vm.swappiness=0

使之生效

sysctl -p

lock_sga与pre_page_sga


备注

备注1:不能使用oracle自动内存管理

备注2:目的是减少swap的使用

备注3:建议SGA小于8G

备注4:不会使用/dev/shm空间

备注5:与大页内存二选一

备注6:需要设置内存锁

 

描述

lock_sga:把sga被锁定在物理内存中,这样可以防止sga被换出到swap中

pre_page_sga:在数据库启动的时候将整个sga读取到物理内存,而不走swap空间,从而有效的提高数据库效率;但会增加数据库的启动时间。

设置内存锁

配置limits.conf文件

vi /etc/security/limits.conf

添加或修改为如下内容:

oracle soft memlock -1

oracle hard memlock -1

备注:-1为不限制,如果设置,则memlock的数据要大于大页内存的数量

查看修改(oracle用户)

ulimit -l

修改参数

sqlplus / as sysdba

SQL>alter system set lock_sga = true scope=spfile;

SQL>alter system set pre_page_sga = true scope=spfile;

SQL>shutdown immediate;

SQL>startup open;

错误

错误1

SQL>startup;

ORA-27102: out of memory

Linux-x86_64 Error: 12: Cannot allocate memory

解决方法:设置内存锁

自动内存管理(系统才上线的数据库内存最佳配置)


内存设置建议

可以将服务器总物理内存的80%分配给数据库(SGA+PGA)

PGA内存管理参数

通过两个参数来实现自动PGA内存管理(v$parameter)

workarea_size_policy——默认是是AUTO,也就是自动分配内存;

pga_aggregate_target——PGA手动分配内存大小,一般设置为SGA大小的30%;

查看PGA实际大小

set pagesize 100

set linesize 100

col NAME for a22

col Used_Size for a9

select NAME, round(VALUE / 1024 / 1024 / 1024 , 2)||‘ GB‘ as Used_Size

from v$pgastat

where name like ‘%PGA allocated‘;

SGA内存管理参数

查看SGA的实际大小

set pagesize 100

set linesize 100

col Pool_Name for a15

col Used_Size for a9

select nvl(pool, name) as Pool_Name,

round(sum(bytes) / 1024 / 1024 / 1024 , 2) || ‘ GB‘ as Used_Size

from v$sgastat
group by nvl(pool, name)
order by nvl(pool, name);

db_keep_cache_size与db_recycle_cache_size 

1.设置keep|recycle池大小

2.使用keep|recycle池和不使用

alter table|index .... storage(buffer_pool keep|recycle|default);

备注:db_keep_cache_size——可以使表长期驻留在这个区域

3.缓存|不缓存keep池中

alter table table_name cache|nocache;

4.刷新缓存

alter system flush shared_pool

5.查看表是否已经缓存到keep池中

select table_name,CACHE,BUFFER_POOL from user_tables;

自动内存管理

设置PGA参数

alter system set workarea_size_policy=auto;

设置PGA大小

alter system set pga_aggregate_target=0;

设置SGA大小

alter system set sga_target=0;

设置共享池大小

alter system set shared_pool_size=0;

设置数据库缓冲区大小

alter system set db_cache_size=0;

设置大池大小

alter system set large_pool_size=0;

设置流池大小

alter system set streams_pool_size=0;

设置JAVA池大小

alter system set java_pool_size=0;

设置数据库最大总内存值

alter system set memory_max_target=20G scope = spfile;

设置数据库总内存参数

alter system set memory_target=20G;

备注1:memory_target=sga_target+pga_aggregate_target

备注2:memory_target<=memory_max_target

取消自动内存管理

alter system reset memory_target scope=spfile;

alter system reset memory_max_target scope=spfile;

OLTP系统

alter system set sga_target = (总物理内存* 0.8) * 0.7 scope=spfile;

alter system set sga_max_size = (总物理内存* 0.8) * 0.7 scope=spfile;

alter system set pga_aggregate_target= (总物理内存 * 0.8) * 0.3 scope=spfile;

OLAP系统

alter system set sga_target = (总物理内存* 0.8) * 0.5 scope=spfile;

alter system set sga_max_size = (总物理内存* 0.8) * 0.5 scope=spfile;

alter system pga_aggregate_target= (总物理内存 * 0.8) * 0.5 scope=spfile;

内存顾问(系统运行一段时间后的内存配置参考)


设置内存顾问参数

启用内存顾问需要把参statistics_level设置为ALL或者TYPICAL

PGA内存顾问

set pagesize 100

set linesize 100

SELECT round(pga_target_for_estimate / 1024 / 1024, 0) as estimate_pga_mb, --预测的PGA内存值

pga_target_factor as pga_rate, --若为1,则pga_target_for_estimate表示当前的PGA内存值
       estd_pga_cache_hit_percentage, --PGA的估算得到的Cache命中率的百分比
       estd_overalloc_count --若为0表示可以消除PGA的过载,也就是可以将PGA内存值设置为pga_target_for_estimate
  FROM v$pga_target_advice;

备注1:pga_target_for_estimate为预测的PGA内存值

备注2:pga_target_factor为预测PGA值与当前实际PGA值的比值,若为1,则表示pga_target_for_estimate就是当前的实际PGA值

备注3:如果estd_overalloc_count为0或者estd_pga_cache_hit_percentage为100时 ,那么就可以将pga内存值(pga_aggregate_target)设置为相应的pga_target_for_estimate值

SGA内存顾问

set pagesize 100

set linesize 100

select sga_size as estimate_sga_mb, --预测的SGA内存值

sga_size_factor as sga_rate, --若为1,则sga_size表示当前的SGA内存值
       estd_physical_reads --物理读的百分比
  from v$sga_target_advice;

备注1:sga_size为预测的SGA内存值

备注2:sga_size_factor 为预测SGA值与当前实际SGA值的比值,若为1,则表示sga_size就是当前的实际SGA值

备注3:当estd_physical_reads不在减少时,那么就可以将SGA内存值(sga_target)设置为相应的sga_size

总内存顾问

set pagesize 100

set linesize 100

select memory_size as estimate_memory_mb, --预测的总内存值

memory_size_factor, --若为1,则memory_size 表示当前的总内存值
       estd_db_time,
       estd_db_time_factor --消耗数据库时间的比例因子

from v$memory_target_advice;

备注1:memory_size为预测的总内存值

备注2:memory_size_factor为预测总内存值与当前实际总内存值的比值,若为1,则表示memory_size就是当前的实际总内存值

备注3:当estd_db_time_factor不在减少时,那么就可以将总内存值(memory_target)设置为相应的memory_size

查看各个内存组件的大小

v$memory_dynamic_components

时间: 2024-08-06 11:53:09

Oracle数据库之内存管理的相关文章

Toad for Oracle针对于Oracle数据库的可视化管理工具使用

Toad for Oracle安装包下载地址:http://pan.baidu.com/s/1mgBOLZU 在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的.Quest Software为此提供了高效的Oracle应用开发工具-Toad(Tools of Oracle Application Developers).在Toad的新版本中,还加入了DBA(Database Administrator

Oracle数据库共享内存分配不足问题的解决

问题: ORA-04031: unable to allocate 19204 bytes of shared memory ("shared pool","unknown object","sga heap(1,0)","session param values") 错误原因: 共享内存太小,分配给共享池的内存不足以满足用户请求,或者存在一定碎片,没有有 效的利用保留区,造成无法分配合适的共享区.一个ORACLE例程的系统全

Oracle数据库web维护管理软件

TreeSoft数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能包括:数据库的展示,库表的展示,表字段结构的展示, SQL语句的在线编辑批量执行,表结构的在线设计维护,数据的在线编辑维护,查询语句保存,JSON数据格式化,SQL语法帮助,在线数据源选择配置等.系统内置14套UI皮肤,45套代码编辑区UI方案,使用中可以依个人喜好选择配色方案. 本系统不但稳定,实

oracle 数据库碎片化管理

******************************************************************************** 1.表空间碎片 ******************************************************************************** ----1.查看fsfi值 select a.tablespace_name, trunc(sqrt(max(blocks)/sum(blocks))* (10

oracle数据库的基本命令管理与操作

启动数据库 查看表空间 查看数据文件 创建一个名为t373的数据文件,大小为10M,设置为自动增长 重置数据文件的大小 查看数据文件重置大小成功 设置数据文件为只读 添加一份数据文件 再次解除只读状态,设置为可读写 添加一个大小为80M的数据文件 添加成功 创建一个mapengfei的用户,密码为123456,默认使用t373的表空间,限额为50M,密码在第一次登陆时失效重置 创建初期是没有相应的登陆数据库的权限的 授予mapengfei用户可以连接数据库的权限,登陆成功 创建一个名字为bene

【读书笔记】ORACLE 内存管理

<Administrator's Guide>第6章介绍了ORACLE实例的内存管理,在11g中,ORACLE默认使用自动内存管理(AMM)来管理SGA和PGA的大小.除了默认的方法之外,还可以使用自动共享内存管理SGA(ASMM).手动共享内存管理SGA.自动PGA内存管理.手动PGA内存管理. 一.自动内存管理 自动内存管理是最方便的内存管理方式,只需要设定参数MEMORY_TARGET的值,ORACLE 就会根据实际需要分配SGA和PGA. 1.1应用自动内存管理 1.用SYSDBA的身

设置数据库为自动内存管理

设置数据库自动内存管理主要是设置两个参数: memory_max_target memory_target 如果这两个参数设置为0说明数据库内存采用手动管理,反之则为自动管理. 关闭数据库. SQL> startup nomount ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 6384M --这里之所以报错是我之前alter system set MEMORY_TARGET='153

Oracle数据库的体系结构和用户管理

一.Oracle体系结构 数据库的体系结构是指数据库的组成.工作过程.以及数据库中数据的组织与管理机制,要了解Oracle数据库的体系结构,必须理解Oracle系统的主要组件和重要概念. 1.Oracle体系结构概述 Oracle体系结构包含一系列组件,如下图所示,图中显示了Oracle体系结构中的主要组件,包括实例.用户进程.服务器进程.数据文件及其他文件,如参数文件.口令文件和归档日志文件等.从图中可以看出,实例和数据库是Oracle数据库体系结构的核心组成部分,也是最重要的两个概念:DBA

Oracle数据库——数据库安全性管理

一.涉及内容 1.验证系统权限管理. 2.验证角色管理. 3.验证概要文件管理. 二.具体操作 (一) 1.根据以下要求进行系统权限的授予与回收操作. (1)创建用户user1,并为它授予create table.create view 的系统权限以及connect 的系统角色. (2)以user1用户的身份登录系统. (3)回收user1 的create table.create view 的系统权限. 2. 根据以下要求进行角色的创建与授予操作. (1)创建用户角色myrole. (2)为角