• 解决SGA 不能超过4G,数据库关闭缓慢的问题


    OS:redhat 4 64bit

    Database:oracle10gR2 for linux 64bit

    Physical memory:32G

    昨天晚上一哥们Q我说数据库关闭缓慢,我叫他贴出告警日志,部分关键信息如下:

    Waiting for dispatcher 'D000' to shutdown
    All dispatchers and shared servers shutdown

    然后我又问他数据库是专有模式还是共享模式,他说专有模式,OK 根据告警信息可以判断 数据库打开了shared_servers,还有dispatcher,于是叫他运行如下两个命令

    alter system set shared_servers=0;

    alter system set dispatchers='';

    然后重启数据库。到此 数据库关闭正常。

    可过了不久 关闭数据库又极为缓慢,再次贴出告警信息,关键部分如下

    SHUTDOWN: Active processes prevent shutdown operation

    可以知道 数据库有一个活动进程阻止了shutdown 操作,OK,shutdown abort,重启

    select sid,event from v$session;

    查询到有一个 等待事件 jobq slave wait

    ok 设置job_queue_processes=30;再次关闭数据库 ,正常关闭 job_queue_processes默认为10

    重启数据库,再次关闭数据库 还是比较缓慢,告警日志如下

    Shutting down instance (immediate)
    License high water mark = 2
    Fri Feb 12 11:33:27 2010
    Stopping Job queue slave processes, flags = 7
    Fri Feb 12 11:33:27 2010
    Job queue slave processes stopped

    呵呵,job queue这个进程延缓了 数据库的关闭。如果想要

    彻底解决这个问题可以设置job_queue_processes=0,

    一个生产系统是不会经常关闭的,如果没有出现 jobq slave wait等待事件就别理它了吧。

    另外查看它的SGA 为3G,PGA为6G,我当时就郁闷了,怎么这样分配内存呢,然后叫他分配12G给SGA,12G给PGA(其实内存分配多少没有一个定值,根据实际情况调整,方法很多比如看等待事件,各种顾问程序...关键是要找到PGA,SGA的平衡点)之后重启数据库,结果报错,信息如下

    SQL> startup
    ORA-27102: out of memory
    Linux-x86_64 Error: 28: No space left on device

    这个错误提示就是说SGA超过了最大值这里分配了12G

    由于os是64bit,db也是64bit,不存在db限制,那么这个限制应该是linux内核参数引起的。这个内核参数就是

    /etc/sysctl.conf 中的kernel.shmmax,这个参数决定了OS的最大共享内存,由于SGA是共享的,此参数设置过小必然导致SGA不能设置过大。更改kernel.shmmax解决问题。

  • 相关阅读:
    C#Task和async/await使用
    jQuery实现C#CheckBoxList模糊搜索
    [转载].NET ASP.NET 中web窗体(.aspx)利用ajax实现局部刷新
    MD5加密方法HashPasswordForStoringInConfigFile(string,string)过时问题处理方法
    .NET WebFrom跨时区项目时间问题处理方法
    C# 中的Async 和 Await 的用法详解
    cron表达式
    ASP.NET MVC实现单用户登录
    一个简单便捷的树形显示Ztree
    身份证代码
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330617.html
Copyright © 2020-2023  润新知