SGA/PGA的设置与调整
2013-04-10SGA是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。 PGA包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反,PGA 是只被一个进程使用的区域,PGA 在创建进程时分配,在终止进程时回收。
1、基本概念
(1)SGA(SGA_TARGET):System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
(2)共享池(shared_pool_size):Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)。 共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。
(3)缓冲区高速缓存(db_cache_size):Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。
(4)大型池(large_pool_size):Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。
(5)Java池(java_pool_size):Java Pool为Java命令的语法分析提供服务。
(6)PGA(pga_aggregate_target):Process Global Area是为每个连接到Oracle database的用户进程保留的内存。
2、查询SGA和PGA:
SQL> show sga;
Total System Global Area 4294967296 bytes
Fixed Size 2101808 bytes
Variable Size 2550140368 bytes
Database Buffers 1728053248 bytes
Redo Buffers 14671872 bytes
获得sga_max_size和sga_target的值
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 4G
sga_target big integer 4G
获得pga_aggregate_target的值
SQL> show parameter pga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 6425M
SQL> select name, value from v$pgastat;
aggregate PGA auto target:表示PGA内存中共享可调整的部分,与aggregate PGA target相比,该值不能太小; over allocation count:表示oracle违反pga_aggregate_target参数的次数,当PGA太小并且oracle不能提供PGA untunable内存+执行work area workload所需的最小内存时会发生over allocation,理想情况下该值应为0;
pga调整建议
SQL> SELECT round (PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,
ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT
FROM
v$pga_target_advice;
3、参考值:
现场服务器是08G内存,SGA设置为04G,PGA设置为1G
现场服务器是16G内存,SGA设置为10G,PGA设置为2G
现场服务器是32G内存,SGA设置为20G,PGA设置为4G
4、调整SGA_MAX_SIZE直接修改pfile方法:
cd $ORACLE_HOME/dbs
vi initSID.ora
*.sga_max_size=4294967296
*.sga_target=4294967296
通过命令修改
create pfile from spfile;
alter system set sga_max_size=4G scope=spfile;
alter system set sga_target=4G scope=spfile;
重启oracle实例sga_max_size才能生效
5、shared_pool_size修改后可立即生效,但是需要SGA支持
查看共享池大小:
SQL> show parameter shared_pool_size
oracle 10g shared_pool_size 默认 0,因为10G 自动分配shared_pool_size所以这个值是0
查看共享SQL区的使用率:
select(sum(pins-reloads))/sum(pins) "Library cache" from v$librarycache; --动态性能表
LIBRARY命中率命中率命中率命中率应该在90%以上,否则需要增加共享池的大小。
查看数据字典缓冲区的使用率:
select (sum(gets-getmisses-usage-fixed))/sum(gets) "Data dictionary cache" from v$rowcache; --动态性能表
这个使用率也应该在90%以上,否则需要增加共享池的大小。
修改共享池的大小 :
create pfile from spfile;
alter system set shared_pool_size=2G scope=both;
alter system set large_pool_size=32M scope=both;
6、缓冲区高速缓存 Database Buffer Cache:
查看大小:
SQL> show parameter db_cache_size
SQL> show parameter db_cache_advice
查看数据库数据缓冲区的使用情况:
SELECT name,value FROM v$sysstat order by name WHERE name IN(''DB BLOCK GETS'',''CONSISTENT GETS'',''PHYSICAL READS'');
SELECT * FROM V$SYSSTAT WHERE NAME IN ('parse_time_cpu','parse_time_elapsed','parse_count_ hard');
计算出来数据缓冲区的使用命中率=1-(physical reads/(db block gets+consistent gets)),这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。
调整大小:
alter system set db_cache_size =xxx;
7、PGA的调整命令
系统级更改:
SQL> ALTER SYSTEM SET WORKAREA_SIZE_POLICY = {AUTO | MANAUL};
SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET=239075328;
SQL> ALTER SYSTEM SET SORT_AREA_SIZE = 65536 SCOPE = SPFILE;-->使用AUTO方式时该参数不起作用
SQL> ALTER SYSTEM SET HASH_AREA_SIZE = 65536 SCOPE = SPFILE;-->使用AUTO方式时该参数不起作用
会话级更改
SQL> ALTER SESSION SET WORKAREA_SIZE_POLICY = {AUTO | MANAUL};
SQL> ALTER SESSION SET SORT_AREA_SIZE = 65536;-->使用AUTO方式时该参数不起作用
SQL> ALTER SESSION SET HASH_AREA_SIZE = 65536;-->使用AUTO方式时该参数不起作用
相关日志
- oracle中drop一个表,让数据文件释放空间
- oracle批量杀掉死锁进程
- ORA-00257: archiver error. Connect internal only, until freed. (DBD ERROR: OCISessionBegin)
- oracle同义词SYNONYM
- substr()函数
- oracle create dblink
- oracle 启动归档模式
- oracle表空间文件
- linux删除oracle表空间文件后空间不释放
- nagios check_oracle_health install shell
- oracle最大连接数processes
- nagios check_oracle_health
- cx_Oracle for python
- 数据库查询重复行shell脚本
- oracle导入txt数据文件实例
- mysql导入txt数据文件实例
- 修改NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET字符集
- NLS_NCHAR_CHARACTERSET和NLS_CHARACTERSET的区别
- 如何安装mysql-5.6.12
- 设置NLS_LANG环境变量
- Oracle Golden Gate数据库同步技术
- mysql或oracle合并行函数
- Oracle InstantClient安装步骤
- shell sqlplus run sql
- oracle误删datafile
- mysqld_safe — MySQL Server Startup Script
- 如何禁用mysql端口3306
- oracle触发器实例 (8)
- sql语句处理BLOB (8)
- Drizzle A database for the Cloud (1)
- 根据v$SGA_TARGET_ADVICE设置SGA SIZE (6)
- shmmax/shmall和sga_max_size/sga_target应该设置多大 (3)
- exp/imp和expdp/impdp的逻辑哲学 (1)
- oracle安装后期stop big port (1)
- OLTP和OLAP的区别 (3)
- mysql创建数据库及用户 (1)
- Mysql分支MariaDB简介 (6)
- ORA-01843: not a valid month (3)
- sql语句where 1=1和1=2的作用 (4)
- 如何安装mysql-5.5.31 (8)
- rlwrap实现sqlplus使用上下键查历史命令
- CentOS_x64_6.3 install Oracle 10.2.0.1报错ins_emdb.mk (2)