数据库调优,前期准备

--重要参数
select name, value from v$parameter where name in ('sga_max_size','pga_aggregate_target','db_cache_size','shared_pool_size','sga_target');


--数据高速缓存区命中率
--计算公式:1-(physical reads / (db block gets + consistent gets))
--命中率应大于0.90最好

--缓存命中率,最差缓存命中率也应该>0.9;从0.9 提高到 0.95,可以使性能翻倍;【保证数据缓存命中率超过0.95】从0.9 提高到 0.98 可以使性能提高 500%【oracle 10g性--能调整与优化】从0.95 到 0.98的提高 将显著提升系统性能(一般低于0.95的命中率都应增加缓存大小DB_CACHE_SIZE)
--但是缺少索引或限制了索引的使用也可能降低命中率

column phys    format 999,999,999 heading 'Pyhsical Reads'
column gets     format 999,999,999 heading 'DB Block Gets'
column con_gets format 999,999,999 heading 'Consistent Gets'
column hitratio format 99.99       heading 'Hit Ratio'
select sum(decode(name,'physical reads',value,0)) phys,
sum(decode(name,'db block gets',value,0)) gets,
sum(decode(name,'consistent gets',value,0)) con_gets,
(1- (sum(decode(name,'physical reads',value,0)) / (sum(decode(name,'db block gets',value,0)) + sum(decode(name,'consistent gets',value,0)))))*100 hitratio
from v$sysstat;

/
--共享区库缓存区命中率
--计算公式:SUM(pins - reloads) / SUM(pins)
--命中率应大于0.99

select sum(Pins) "Hits",sum(Reloads) "Misses",sum(Pins) / (sum(Pins) + sum(Reloads)) "Hits Ratio" from V$librarycache;

select sum(pins-reloads)/sum(pins)
from v$librarycache;
/

--共享区字典缓存区命中率
--计算公式:SUM(gets - getmisses - usage -fixed) / SUM(gets)
--命中率应大于0.85

select sum(gets-getmisses-usage-fixed)/sum(gets)
from v$rowcache;
/

--检测回滚段的争用
--SUM(waits)值应小于SUM(gets)值的1%

select sum(gets),sum(waits),sum(waits)/sum(gets)
from v$rollstat;
/

--检测回滚段收缩次数

select name,shrinks
from v$rollstat, v$rollname
where v$rollstat.usn = v$rollname.usn;
/

--查询外键无索引,外键无索引会导致全表扫描
SELECT TABLE_NAME,
       CONSTRAINT_NAME,
       CNAME1 || NVL2(CNAME2, ',' || CNAME2, NULL) ||
       NVL2(CNAME3, ',' || CNAME3, NULL) ||
       NVL2(CNAME4, ',' || CNAME4, NULL) ||
       NVL2(CNAME5, ',' || CNAME5, NULL) ||
       NVL2(CNAME6, ',' || CNAME6, NULL) ||
       NVL2(CNAME7, ',' || CNAME7, NULL) ||
       NVL2(CNAME8, ',' || CNAME8, NULL) COLUMNS
FROM (SELECT B.TABLE_NAME,
               B.CONSTRAINT_NAME,
               MAX(DECODE(POSITION, 1, COLUMN_NAME, NULL)) CNAME1,
               MAX(DECODE(POSITION, 2, COLUMN_NAME, NULL)) CNAME2,
               MAX(DECODE(POSITION, 3, COLUMN_NAME, NULL)) CNAME3,
               MAX(DECODE(POSITION, 4, COLUMN_NAME, NULL)) CNAME4,
               MAX(DECODE(POSITION, 5, COLUMN_NAME, NULL)) CNAME5,
               MAX(DECODE(POSITION, 6, COLUMN_NAME, NULL)) CNAME6,
               MAX(DECODE(POSITION, 7, COLUMN_NAME, NULL)) CNAME7,
               MAX(DECODE(POSITION, 8, COLUMN_NAME, NULL)) CNAME8,
               COUNT(*) COL_CNT
          FROM (SELECT SUBSTR(TABLE_NAME, 1, 30) TABLE_NAME,
                       SUBSTR(CONSTRAINT_NAME, 1, 30) CONSTRAINT_NAME,
                       SUBSTR(COLUMN_NAME, 1, 30) COLUMN_NAME,
                       POSITION
                  FROM USER_CONS_COLUMNS) A,
               USER_CONSTRAINTS B
         WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
           AND B.CONSTRAINT_TYPE = 'R'
         GROUP BY B.TABLE_NAME, B.CONSTRAINT_NAME) CONS
WHERE COL_CNT > ALL
(SELECT COUNT(*)
          FROM USER_IND_COLUMNS I
         WHERE I.TABLE_NAME = CONS.TABLE_NAME
           AND I.COLUMN_NAME IN (CNAME1, CNAME2, CNAME3, CNAME4, CNAME5,
                CNAME6, CNAME7, CNAME8)
           AND I.COLUMN_POSITION <= CONS.COL_CNT
         GROUP BY I.INDEX_NAME);

--找出滥用磁盘读操作的25个主要语句
set serverout on size 1000000
declare
  top25 number;
  text1 varchar2(4000);
  x     number;
  len1  number;
cursor c1 is
       select disk_reads, substr(sql_text,1,4000)
       from v$sqlarea order by disk_reads desc;
begin
  dbms_output.put_line('Reads'||' '||'Text');
  dbms_output.put_line('----------'||' '||'----------------------');
  open c1;
  for i in 1..25 loop
    fetch c1 into top25, text1;
    dbms_output.put_line(rpad(to_char(top25),9)||' '||substr(text1,1,66));
    len1:=length(text1);
    x:=66;
    while len1 > x-1 loop
      dbms_output.put_line('" '||substr(text1,x,66));
      x:=x+66;
      end loop;
  end loop;
end;
/

--最占用资源的查询
select b.username username,a.disk_reads reads,
    a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
    a.sql_text Statement
from  v$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
 and a.disk_reads > 100000   --a.disk_reads 换成a.buffer_gets提供占用最多内存的sql
order by a.disk_reads desc;


--发现禁用的触发器
col       'Owner/Table' format a30
col       'Trigger Name' format a25
col       'Event' format a15
col       'Owner' format a10
select    substr(owner,12) "Owner", trigger_name "Trigger Name",
trigger_type "Type", triggering_event "Event",
table_owner||'.'||table_name "Owner/Table"
from       dba_triggers
where      status <> 'ENABLED'
order by   owner, trigger_name;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值