设为首页 收藏本站
查看: 345|回复: 0

[经验分享] oracle数据库内存和进的配置和优化

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-9 08:28:50 | 显示全部楼层 |阅读模式
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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>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 oracle@oracle (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 SYSDBA@ORCL>SELECT * FROM V$DISPATCHER;
   
    显示处理等待调度器进程和等待的时间
    SYS AS SYSDBA@ORCL>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 SYSDBA@ORCL>ALTER SYSTEM SET DISPATCHERS='(PROT=TCP)(DISP=2)','(PROT=TCPS)(DISP=2)';

    2.查看所有调度器的情况
    SYS AS SYSDBA@ORCL>SELECT NAME,NETWORK FROM V$DISPATCHER;

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


        
    启用数据库驻留连接池(SYS_DEFAULT_CONNECTION_POOL)
   
    1.启用数据库驻留连接池(数据库重启时会自动启动)
        SYS AS SYSDBA@ORCL>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 SYSDBA@ORCL>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 SYSDBA@ORCL>ALTER SYSTEM KILL SESSION '19,122';
   
        SYS AS SYSDBA@ORCL>SELECT SID,SERIAL#,STATUS FROM V$SESSION WHERE USERNAME='HR';

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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-42145-1-1.html 上篇帖子: 所有表和动态视图列表(dict)2 下篇帖子: oracle常用的数据字典 oracle 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表