数据库内存和进的配置和优化

MEMORY_MAX_TARGET设置数据库实例的最大内存大小:设置内存大小的上限
MEMORY_TARGET 设置内存大小(可动态调整,不需要重启数据库)

自动共享内存管理
    SGA_TARGET:初始化参数指定数据库实例总SGA的总数量
    所有SGA组件都以粒度(GRANULE)为最小单位分配和回收空间,粒度是连续虚拟内存分配的单位
    SGA >=1G        粒度大小为4M
    SGA >1G            粒度大小为8M
    粒度大小为4M,DB_CACHE_SIZE为10M,则实际分配3*4=12M空间给数据库高速缓存,即3个粒度单位
    
    SGA_MAX_SIZE设置SGA的最大空间,这个空间值包含高速缓存池,共享池,大型池,JAVA池和流池的总大小
    SYS AS [email protected]>SHOW PARAMETER SGA_MAX_SIZE;

NAME                     TYPE          VALUE
    ------------------------------------ -------------------- ------------------------------
    sga_max_size                 big integer      404M
    
    共享池    SHARED_POOL_SIZE
    大型池    LARGE_POOL_SIZE
    JAVA池    JAVA_POOL_SIZE
    缓冲区高速缓存    DB_CACHE_SIZE
    流池    STREAM_POOL_SIZE
    
    启用自动共享内存管理功能:设置SGA_TARGET设置非零值,将取代控制单独SGA组件分配内存和其他参数,再将共享池,大型池等的值设置为0值,才能由ORACLE自动为SGA组件分配内存空间
    
    
    
    手动共享内存管理
    
    自动PGA内存管理
    PGA_AGGREGATE_TARGET用来控制PGA内存数量,这是PGA参数值的最大值
    SYS AS [email protected]>SHOW PARAMETER PGA_AGGREGATE_TARGET;

NAME                     TYPE          VALUE
    ------------------------------------ -------------------- ------------------------------
    pga_aggregate_target             big integer      0
    
    
    手动PGA内存管理
    WORKAREA_SIZE_POLICY参数设置为MANUAL
    
    
    专用服务器进程(会话内存从PGA中分配)和共享服务器进程(会话内存从SGA中分配)
    
    数据库驻留连接池(会话内存从PGA中分配)
    DATABASE RESIDENT CONNECTION POOLING(DRCP):通常为WEB应用程序提供连接池
    
    
    
    使用V$SGAINFO视图查看SGA基本信息
    SYS AS [email protected]>SELECT * FROM V$SGAINFO;

NAME              BYTES RES
-------------------- ---------- ---
Fixed SGA Size        1336960 No
Redo Buffers        6094848 No
Buffer Cache Size      75497472 Yes
Shared Pool Size      176160768 Yes
Large Pool Size     4194304 Yes
Java Pool Size        8388608 Yes
Streams Pool Size    4194304 Yes
Shared IO Pool Size          0 Yes
Granule Size        4194304 No    //表示粒度的大小,这里为4M
Maximum SGA Size      422670336 No
Startup overhead in    58720256 No
Shared Pool

Free SGA Memory Available  146800640

使用V$SGASTAT视图查看SGA统计信息    //查看各个池中SGA组件的内存使用情况
    shared pool  KKSSP              497144
shared pool  quiesce system conte     300
         xt

shared pool  SGA structure for KP    2824
         ON kp

shared pool  SGA struct - SWRF Me    2160
         trics

如何启用自动内存管理:
    SYS AS [email protected]>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      404M
memory_target                 big integer      404M
parallel_servers_target          integer          8
pga_aggregate_target             big integer      0
sga_target                 big integer      0

查看分配的最大PGA容量:
SYS AS [email protected]>SELECT VALUE FROM V$PGASTAT WHERE NAME=‘maximum PGA allocated‘;

VALUE
----------
 158905344
    
计算MEMORY_TARGET参数值的公式:
memory_target=sga_target+max(pga_aggregate_target,maximum PGA allocated)

修改值
    1.使用SPFILE启动数据库实例:使用下面的命令设置MEMORY_MAX_TARGET的值:
    ALTER SYSTEM SET MEMORY_MAX_TARGET=nM SCOPE=SPFILE;
    ALTER SYSTEM SET MEMORY_TARGET=mM
    ALTER SYSTEM SET SGA_TARGET=0
    ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0

2.使用文本服务器参数文件启动数据库实例:
    memory_max_target=nM
    memory_target=mM
    n代表:MEMORY_MAX_TARGET
    m代表:MEMORY_TARGET

监测和调整自动内存管理
    查看所有动态内存组件的当前大小包括SGA和PGA的总大小
    SYS AS [email protected]>SELECT * FROM V$MEMORY_TARGET_ADVICE ORDER BY MEMORY_SIZE;

MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR    VERSION
----------- ------------------ ------------ ------------------- ----------
    303           .75        276         1.0024      0
    404             1        275              1      0
    505          1.25        275              1      0
    606           1.5        275              1      0
    707          1.75        275              1      0
    808             2        275              1      0

监测和SGA目标大小:(自动内存管理模式)
    SYS AS [email protected]>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
    ---------- --------------- ------------ ------------------- -------------------
       198           .75       6394          1.0203          19427
       264         1       6267           1          19282
       330          1.25       6246           .9966          18231
       396           1.5       6245           .9965          18231
       462          1.75       6245           .9965          18231
       528         2       6245           .9965          18231
    
    启动自动共享内存管理(ASMM)[自动共享内存管理:指自动管理SGA大小] [自动内存管理:指自动管理SGA,PGA等的大小]
    运行以下语句得到SGA总的使用量,不是总量
    SYS AS [email protected]>SELECT( (SELECT SUM(VALUE) FROM V$SGA)-(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY))     "SGA_TARGET" FROM DUAL;

SGA_TARGET
    ----------
     275869696

1 row selected.
    
    启动手动共享内存管理
    
    1.设置缓冲区高速缓存初始化参数
    一般数据库块大小是一定的,如果设置了不同的数据块的大小,可以通过设置不同数据块分配不同的缓冲区大小级不同的数据块进行数据缓存
    eg:
    DB_BLOCK_SIZE=4096M    //设置标准数据块的大小8K
    DB_CACHE_SIZE=1024M    //设置不同块大小的必选项
    DB_2K_CACHE_SIZE=256M    //2k数据块分配缓冲区的大小
    DB_8K_CACHE_SIZE=512M
    
    V$BUFFER_POOL:跟踪不同高速缓存组件的大小和挂起的修改大小的操作
    SYS AS [email protected]>SELECT NAME,BLOCK_SIZE,CURRENT_SIZE FROM V$BUFFER_POOL;

NAME             BLOCK_SIZE CURRENT_SIZE
    -------------------- ---------- ------------
    DEFAULT            8192       72    //块大小8k   DATABASE_BUFFER_CACHE大小:72M
    
    可以使用独立的缓冲池来配置数据库缓冲区高速缓存
    使用:1.在缓冲区高速缓区中保存数据
          2.可以在其他缓冲区中应用新的数据块后立即用于保存新的数据
    缓冲池的种类:
        1.保持(KEEP)缓冲池,在内存中保留数据库对象的数据块
        2.回收(RECYCLE)缓冲池,当不需要使用某些数据块时,缓冲池将其从内存中回收以保存新的数据
        3.默认(DEFAULT)缓冲池,包含尚未分配给其他缓冲池的数据库对象的数据块,就好像这些对象被分配给默认缓冲池一样
    
    配置:
        参数:DB_KEEP_CACHE_SIZE    KEEP缓冲池
            DB_RECYCLE_CACHE_SIZE    RECYCLE缓冲池
    
    
    2.指定共享池的大小    
        初始化参数:SHARED_POOL_SIZE是一个动态参数    
        共享池大小=SHARED_POOL_SIZE+系统内部SGA系统开销值(大约为12M)
    
    3.设置大型池的大小
        初始化参数:LARGE_POOL_SIZE是一个动态参数
    4.设置JAVA池的大小
        初始化参数:JAVA_POOL_SIZE是一个动态参数
    5.设置流池的大小
        初始化参数:STREAMS_POOL_SIZE是一个动态参数
    
    6.设置结果集缓存(RESULT CACHE)的最大大小
        初始化参数:RESULT_CACHE_MAX_SIZE是动态参数,如果是0,就是禁用,要启用设置为非0值,然后重启数据库实例
        查看结果集有没有启用:
        SYS AS [email protected]>select dbms_result_cache.status() from dual;

DBMS_RESULT_CACHE.STATUS()
        -----------------------------------------------------------
        ENABLED
    
    启用自动PGA内存管理
    
    设置PGA的总容量
        PGA_AGGREGATE_TARGET    //设置总容量
    有效PGA内存的总容量=PGA_AGGREGATE_TARGET值-为其他目的分配给PGA的内存容量(例如会话内存)
    
    相关统计视图:
        V$SYSSTAT
        V$SESSTAT
        V$PGASTAT    //PGA内在使用情况的统计信息
        V$SQL_WORKAREA
        V$SQL_WORKAREA_ACTIVE
    V$PROCESS:查看ORACLE数据库进程所分配和使用的PGA内存使用情况:
    SYS AS [email protected]>SELECT PID,PROGRAM,PGA_USED_MEM,PGA_ALLOC_MEM,PGA_FREEABLE_MEM,PGA_MAX_MEM FROM V$PROCESS;

PID PROGRAM                        PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM
---------- ------------------------------------------------ ------------ ------------- ---------------- -----------
     1 PSEUDO                               0         0             0       0
     2 [email protected] (PMON)                   520972    612508             0      612508

启用手动PGA内存管理
    将初始化参数;WORKAREA_SIZE_POLICY设置为MANUAL
    通过配置以下参数的大小来手动配置PGA:
        SORT_AREA_SIZE,HASH_AREA_SIZE,BITMAP_MERGE_AREA_SIZE,CREATE_BITMAP_AREA_SIZE  控制SQL工作区的最大大小
        
    
    通过初始化参数配置共享服务器
        SHARED_SERVERS
        MAX_SHARED_SERVERS
        SHARED_SERVER_SESSIONS
        DISPATCHERS
        MAX_DISPATCHERS
        CIRCUITS
    
    启用共享服务器
        将参数SHARED_SERVERS设置为一个大于0
        ALTER SYSTEM SHARED_SERVERS=1
        
    
    配置调度器进程
        参数配置如下:
            dispatchers="(PROTOCOL=tcp)"
            dispatchers="(ADDRESS=(PROTOCOL=tcp)(PORT=5000))"
            dispatchers="(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.120))(DISPATCHERS=2)"
        调度器的数量=CELL(<并发会话的最大值>/每个调度器的连接数)
        
    查看调度器进程的信息
        V$QUEUE
        V$DISPATCHE
        V$DISPATCHE_RATE
    SYS AS [email protected]>SELECT * FROM V$DISPATCHER;
    
    显示处理等待调度器进程和等待的时间
    SYS AS [email protected]>SELECT DECODE(SUM(TOTALQ),0,‘NO RESPONSES‘,SUM(WAIT)/SUM(TOTALQ)) "AVERAGE WAIT TIME"     FROM V$QUEUE Q,V$DISPATCHER D WHERE Q.TYPE=‘DISPATCHER‘ AND Q.PADDR=D.PADDR;

关闭指定的调度器进程
    1.增加调试器
    SYS AS [email protected]>ALTER SYSTEM SET DISPATCHERS=‘(PROT=TCP)(DISP=2)‘,‘(PROT=TCPS)(DISP=2)‘;

2.查看所有调度器的情况
    SYS AS [email protected]>SELECT NAME,NETWORK FROM V$DISPATCHER;

3.关闭指定的调度器
    SYS AS [email protected]>ALTER SYSTEM SHUTDOWN IMMEDIATE ‘D003‘;
    
    禁用共享服务器
    初始化参数SHARED_SERVERS=0 禁用共享服务器,
    MAX_SHARED_SERVERS=0    //以上如果两个参数都为0,则所有共享服务器将终止
    
    中止调度器进程(所有连接到共享服务器的客户端断开连接)
    ALTER SYSTEM SET DISPATCHERS=‘‘;

启用数据库驻留连接池(SYS_DEFAULT_CONNECTION_POOL)
    
    1.启用数据库驻留连接池(数据库重启时会自动启动)
        SYS AS [email protected]>EXECUTE DBMS_CONNECTION_POOL.START_POOL();

PL/SQL procedure successfully completed.
    2.在客户端连接池中显示的指定要使用系统的连接池
        (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MYHOST)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SALES)(SERVER=POOLED)))
    
    3.禁用数据库驻留连接池
        EXECUTE DBMS_CONNECTION_POOL.STOP_POOL();
    
    配置数据库驻留连接池
    将连接池中服务器的最小数量修改为10
        EXECUTE DBMS_CONNECTION_POOL.ALTER_PARAM(‘‘,‘MINSIZE‘,‘10‘);
    恢复连接池的默认设置
        EXECUTE DBMS_CONNECTION_POOL.RESTORE_DEFAULTS();
    
    查看数据库驻留连接池的视图
        DBA_CPOOL_INFO
        V$CPOOL_STATS
        V$CPOOL_CC_STATS

终止会话
    1.查看指定用户的会话SID,SERIAL#
    SYS AS [email protected]>SELECT SID,SERIAL#,STATUS FROM V$SESSION WHERE USERNAME=‘SYS‘;

SID    SERIAL# STATUS
    ---------- ---------- --------
           125        5 ACTIVE/INACTIVE  //ACTIVE:表示在执行SQL语句,INACTIVE:表示没有执行SQL语句
    
    2.终止指定的会话:
        ALTER SYSTEM KILL SESSION ‘<会话SID>,<会话序列号>‘
        SYS AS [email protected]>ALTER SYSTEM KILL SESSION ‘19,122‘;
    
        SYS AS [email protected]>SELECT SID,SERIAL#,STATUS FROM V$SESSION WHERE USERNAME=‘HR‘;

SID    SERIAL# STATUS
    ---------- ---------- --------
        19      122 KILLED

时间: 2024-11-05 13:44:57

数据库内存和进的配置和优化的相关文章

项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

作者:泥沙砖瓦浆木匠 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 如果我的帮到了你,是否乐意捐助一下或请一杯啤酒也好呢?有你支持,干的更好~ 点这参与众筹 我的支付宝:13958686678 一. 前言 泥瓦匠又和大家见面了,最近两天我在Code Review ,顺便代码小小的Refactoring(重构)下.先了解这个项目吧,这次解决的是数据源配置优化.因为这web项目中配置数据源的地方很多.例如JDBC要配置数据源,Mybatis要配置数据源,Quartz定时任务要配

【百度地图API】今日小年大进步,齐头共进贺佳节——API优化升级上线,不再增加内存消耗

原文:[百度地图API]今日小年大进步,齐头共进贺佳节--API优化升级上线,不再增加内存消耗 任务描述: 今天是2011年01月26日,小年夜.百度地图API在小年夜献给广大API爱好者一份给力的礼物!那就是,百度地图API内存消耗优化升级了! 此次API优化升级后,内存消耗保持平稳,绝大部分测试中,内存消耗趋于一条直线.(如图所示) 如何实现: a)         本次测试全部采用IE6浏览器: b)         本次测试的覆盖物全部采取随机方式创建: c)         本次测试覆

Nginx与Tomcat安装、配置与优化

Nginx与Tomcat安装.配置与优化 Nginx的安装与使用 Nginx是一款优秀的反向代理服务器 安装: rpm(或者是pkg安装),是预编译好的程序包安装 yum(或者apt-get)安装,自动联网下载安装包,自动管理依赖关系 编译安装 检查和安装依赖项 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel configure make && make install 启动.停止.重启: 安

MySQL必须调整的10项配置mysql优化

from:http://www.opsers.org/server/10-configuration-mysql-mysql-must-adjust-optimization.html 大多数配置能在运行时使用SET GLOBAL改变.这是非常便捷的方法它能使你在出问题后快速撤销变更.但是,要永久生效你需要在配置文件里做出改动. 一个变更即使重启了MySQL也没起作用?请确定你使用了正确的配置文件.请确定你把配置放在了正确的区域内(所有这篇文章提到的配置都属于 [mysqld]) 服务器在改动一

一:MySQL数据库的性能的影响分析及其优化

MySQL数据库的性能的影响分析及其优化 MySQL数据库的性能的影响 一. 服务器的硬件的限制 二. 服务器所使用的操作系统 三. 服务器的所配置的参数设置不同 四. 数据库存储引擎的选择 五. 数据库的参数配置的不同 六. (重点)数据库的结构的设计和SQL语句 1). 服务器的配置和设置(cpu和可用的内存的大小) 1.网络和I/O资源 2.cpu的主频和核心的数量的选择 (对于密集型的应用应该优先考虑主频高的cpu) (对于并发量大的应用优先考虑的多核的cpu) 3.磁盘的配置和选择 (

Greenplum配置参数优化:5.10.2

Greenplum参数配置优化: 查询参数 gpconfig --show max_connections 修改参数配置命令 gpconfig-c <parameter name> -v <parameter value> 比如:gpconfig-c log_statement -v DDL 删除配置 gpconfig -r <parameter name> work_mem work_mem(,global,物理内存的2%-4%),segment用作sort,hash

大数据技术之_30_JVM学习_01_JVM 位置+JVM 体系结构概览+堆体系结构概述+堆参数调优入门+JVM 的配置和优化+Tomcat 的配置和优化

1.JVM 位置2.JVM 体系结构概览3.堆体系结构概述4.堆参数调优入门5.JVM 的配置和优化6.Tomcat 的配置和优化 熟悉 JVM 架构与 GC 垃圾回收机制以及相应的 JVM 调优,有过在 Linux 系统下的调优经验. 淘宝的周志明<深入理解 Java 虚拟机>中说 JVM 的优化,其中 99% 优化的是堆,1% 优化的是方法区. 内地女歌手照片--李嘉欣,贴在桌面上. 1.JVM 位置 JVM 是运行在操作系统之上的,它与硬件没有直接的交互 2.JVM 体系结构概览 详解如

面试官:Redis 数据库内存数据满了,会宕机吗?有内存回收?

Redis 数据库内存数据满了,会宕机吗?答案是:不会让他出现存满的情况,在使用Redis的时候我们要配置Redis能使用的最大的内存大小,存到一定容量的时候还有Redis的内存淘汰策略呢,还有LRU算法进行淘汰,等等...接下来就跟着作者一起探讨,Redis的内存淘汰策略. Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小. 1.通过配置文件配置 通过在Redis安装目

Redis配置与优化

Redis配置与优化 Redis概述 Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用.它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便. Redis优点 具有极高的数据读写速 支持丰富的数据类型 支持数据的持久化 原子性 支持数据备份 Redis配置文件(/et