oracle学习小结10

来源:互联网 发布:程序员的工作要求 编辑:程序博客网 时间:2024/04/25 14:20

  1  打开统计日志信息

      set autot on stat

2  ORACLE的内存分配大致小结
    SGA的查看:
     select * from v$sga;

    (注意oracle在unix下是多进程的,在windows下是单进程的)
    查看系统实际分配的各类pool
    select * from v$sgastat;

     sga大小估计:
   查看UGA大小

     show parameter area_size
    windows上存在32bit的限制,如AIX、HP UNIX 等有明确的64BIT OS and ORACLE的版本,32bit oracle可以装在64bit os 上,64  bit oracle不能装在32 bit  OS上

不管oracle是32 bit ORACLE还是 64  bit 的,假定应用存在没有很好的使用bind  var 的情况,也不能设置 shared_pool_size 过大,通常应该控制在200M--300M,如果是 ORACLE ERP 一类的使用了很多存储过程函数、包 ,或者很大的系统,可以考虑增大shared_pool_size ,但是如果超过500M可能是危险的,达到1G可能会造成CPU的严重负担,系统甚至瘫痪。所以shared_pool_size 如果超过300M还命中率不高,那么应该从应用上找原因而不是一味的增加内存,shared_pool_size 过大主要增加了管理负担和latch 的开销。

log_buffer :  128K ----  1M 之间通常问题不大,不应该太大

large_pool_size :如果不设置MTS,通常在 RMAN 、OPQ 会使用到,但是在10M ---  50M 应该差不多了。假如设置 MTS,则由于 UGA 放到large_pool_size 的缘故,这个时候依据 session最大数量和 sort_ares_size 等参数设置,必须增大large_pool_size 的设置,可以考虑为  session *  (sort_area_size + 2M)。这里要提醒一点,不是必须使用MTS,我们都不主张使用MTS,尤其同时在线用户数小于500的情况下。

java_pool_size : 若不使用java,给30M通常就够了

data  buffer ,在做了前面的设置后,凡可以提供给oracle的内存,都应该给data buffer = (db_block_size * db_block_buffers)
在9i 中可以是 db_cache_size

还有2个重要参数我们需要注意

sort_area_size and  hash_area_size
这两个参数在非MTS下都是属于PGA ,不属于SGA,是为每个session单独分配的,在我们的服务器上除了OS + SGA,一定要考虑这两部分

(****)  : OS 使用内存+  SGA + session*(sort_area_size + hash_area_size + 2M) < 总物理RAM  为好


这样归结过来,假定oracle是 32 bit ,服务器RAM大于2G ,注意你的PGA的情况,,则建议

shared_pool_size + data buffer +large_pool_size + java_pool_size < 1.6G


再具体化,注意满足上面(****) 的原则的基础上可以参考如下设置
如果512M RAM
建议 shared_pool_size = 50M, data buffer = 200M

如果1G RAM  
shared_pool_size = 100M , data  buffer = 500M

如果2G
shared_pool_size = 150M ,data  buffer = 1.2G

物理内存再大已经跟参数没有关系了


假定64  bit  ORACLE

内存4G
shared_pool_size =  200M , data  buffer = 2.5G

内存8G
shared_pool_size = 300M , data  buffer = 5G

内存 12G
shared_pool_size = 300M-----800M , data  buffer = 8G

  其中shared_pool_size主要是放已经执行过的SQL语句,是SQL语句的缓冲池

3 内存参数的调整
    数据缓冲区命中率
SQL> select value from v$sysstat where name ='physical reads';
VALUE
----------
14764
SQL> select value from v$sysstat where name ='physical reads direct';
VALUE
----------
50
SQL> select value from v$sysstat where name ='physical reads direct (lob)';
VALUE
----------
0
SQL> select value from v$sysstat where name ='consistent gets';
VALUE
----------
167763
SQL> select value from v$sysstat where name = 'db block gets';
VALUE
----------
14305
这里命中率的计算应该是
令 x = physical reads direct + physical reads direct (lob)
命中率 =100 - ( physical reads - x) / (consistent gets + db block gets - x)*100
通常如果发现命中率低于90%,则应该调整应用可可以考虑是否增大数据缓冲区
共享池的命中率
SQL> select sum(pinhits)/sum(pins)*100 "hit radio" from v$librarycache;
hit radio
----------
99.809291
假如共享池的命中率低于95%,就要考虑调整应用(通常是没使用bind var )或者增加内存
关于排序部分
SQL> select name,value from v$sysstat where name like '%sort%';
NAME VALUE
---------------------------------------------------------------- ----------
sorts (memory) 67935
sorts (disk) 1
sorts (rows) 7070
SQL>
假如我们发现sorts (disk)/ (sorts (memory)+ sorts (disk))的比例过高,则通常意味着
sort_area_size 部分内存较小,可考虑调整相应的参数。
关于log_buffer
SQL> select name,value from v$sysstat
2 where name in('redo entries','redo buffer allocation retries');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 2325719
redo buffer allocation retries 10
假如 redo buffer allocation retries/ redo entries 的比例超过1%我们就可以考虑增大log_buffer
通常来说,内存的调整的焦点就集中在这几个方面,更多更详细的内容,建议从statspack
入手来一步一步调整。最后关于内存的调整,再强调这一点,一定要结合操作系统来衡量,
任何理论都必须要实践来检验。在操作系统中观察 page in/out 状况,发现问题严重,应
该考虑调小SGA。

 

 

4 在调优时,往往要这样做,就是要查出用户的哪条SQL语句慢了,因为一用户发出了很多个事务,每个事务又包含了很多语句,查询的步骤如下
  1)select addr,ses_addr from v$transcation;

        查看其addr    ses_addr

       比如      592bae00
      通过ses_addr到session表中去查看由哪个用户发起的transcation,v$session.saddr=v$transcation.ses_addr

  2)   select saddr,sid,username,status,paddr from v$session;

      查出
                 saddr     sid    paddr

                   592bae00      12     692906e8

 

   3)   因为 v$process.addr=v$session.paddr,所以
         select addr,spid from v$process

    查出    addr    spid

                 592906E8     3797

   4 )  然后用ps -ef |grep 3797 就可以知道起其客户端连接上来的进程号,

     在windows端,用netstat -anp |more
       就可知道具体由客户端哪个程序连上来
  5) select sid,pre_sql_addr,username,status from v$session;

          查出最近发起的sql

               sid   prev_sql    username

                12   5ab0f3ac    hr

   6)  select sql_text,address from v$sql where address='5ab0f3ac';

     就查出该SQL了

 

  
  

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信没有微游戏商店怎么办 游侠云盒下载慢怎么办2018 安卓手机玩网页游戏卡怎么办 safari点开什么都没有怎么办 康佳电视全网搜索打不开怎么办 脚被图钉扎了怎么办 电脑中毒了打不开软件怎么办 剑三程序不兼容怎么办 玩无主之地卡怎么办 平台老板跑路了怎么办 qq在苹果下载不了怎么办 下载速度快上传速度慢怎么办 苹果7开网页慢怎么办 为什么浏览器下载视频速度慢怎么办 机连WLAN网速慢怎么办 会声会影卸载后无法重新安装怎么办 电视空间不足无法卸载怎么办 堡垒之夜下载慢怎么办 手机网盘下载速度慢怎么办插件 笔记本电脑显示连接不可用怎么办 蓝魔手机充电慢怎么办 360f4手机充电慢怎么办 vivo卡了怎么办小窍门 白色衣服用84泡后变黄怎么办 用祛斑霜脱皮了怎么办 用祛斑霜脸一直蜕皮怎么办 吃热的就流鼻涕怎么办 键盘qaz失灵其他都没事怎么办 时时彩代理抓了怎么办 6p升级ios11卡顿怎么办 微信弄没了又换号了怎么办 快手账号异常请去激活怎么办 九游账号被转移怎么办 绝地求生刺激战场闪退怎么办 qq回执编号忘了怎么办 电脑开机要用户名和密码怎么办 电脑忘记用户名和密码怎么办 微信账号密码忘了怎么办 开发者账号密保忘记怎么办 华为账号忘记密保问题怎么办 fiyme账号忘记密保怎么办