一般在I/O 使用中,为了提高系统处理速度,系统提前将数据读入一块内存区,叫高速缓存,但提前读入的数据未必就是需要的,这就是命中率.。计算公式为

命中率=1-(physical reads/(db blockgets+consistent gets)
其中:
db block gets 数据请求总数
consistent gets 存取所满足要求的请求
physical reads 造成对磁盘上数据文件存取的数据请求总数
还是:------看内存缓冲区使用效率的指数是命中率HITS:
Hits=Logical_reads/(logical_reads+physical_reads)
其中:logical_reads=db_block_gets+consistent_reads
可以调整db_cache_size的大小或起用多个cache_buffer 如:
db_keep_cache_size
db_recycle_cache_size
SGA命中率
select a.value + b.value "logical_reads", c.value "phys_reads",
    round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"
    from v$sysstat a, v$sysstat b, v$sysstat c
    where a.statistic# = 38 and b.statistic# = 39
    and c.statistic# = 40;
SGA中共享缓存的命中率,应该小于1%
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
    sum(reloads)/sum(pins) *100 libcache
    from v$librarycache;
    select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent"
    from v$librarycache;
SGA中重做日志缓存区的命中率,应该小于1%
SELECT name, gets, misses, immediate_gets, immediate_misses,
    Decode(gets,0,0,misses/gets*100) ratio1,
    Decode(immediate_gets+immediate_misses,0,0,
    immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
    FROM v$latch WHERE name IN ('redo allocation', 'redo copy');
高速缓存与主存采用全相联地址映象方式,高速缓存的容量为4mb,分为4块,每块1mb,主存容量为256mb。若主存读写时间为30ns,高速缓存的读写时间为3ns,平均读写时间为3.27ns,则高速缓存的命中率是?
命中的话,读写时间为3ns,不命中,读写时间就是33ns,假设命中率是p,

则 3 x p + 33 x (1 - p) = 3.27,可以求出 p = 99.1%

Oracle检查命中率的SQL

在数据库启动2小时后,可以通过以下SQL来测试数据库性能

1.  缓冲区命中率:

www.2cto.com

缓冲区命中率表示在不需要进行磁盘访问的情况下在内存结构中找到常用数据块的频率

select (1-(sum(decode(name, 'physical reads',value,0))/(sum(decode(name, 'db block gets',value,0))

+sum(decode(name,'consistent gets',value,0))))) * 100 "Hit Ratio"

from v$sysstat;

大于98%为最佳

2.数据字典缓存命中率:

数据字典缓存命中率显示了对数据字典和其他对象的内存读操作所占的百分比。

select (1-(sum(getmisses)/sum(gets))) * 100 "Hit Ratio" from v$rowcache;

大于98%为最佳

www.2cto.com

3.库缓存命中率:

库缓存命中率显示了对实际语句和PL/SQL对象的内存读操作所占的百分比。注意,很高的命中率并不总是一件好事。

select Sum(Pins)/(Sum(Pins) + Sum(Reloads)) * 100 "Hit Ratio" from V$LibraryCache;

大于98%为最佳

4.PGA内存排序命中率

自动PGA内存管理简化了分配PGA内存的方法。Oracle动态调整工作区PGA内存的大小(以SGA内存大小的20%为基础)。在自动PGA内存管理模式下运行时,所有会话的工作区大小都是自动的。实例中活动工作区可用的PGA内存总量自动由SORT_AREA_SIZE或PGA _ AGGREGATE_ TARGET(首选)初始化参数导出。PGA内存排序率的值应该大于98%。依据初始化参数PGA_AGGREGATE_TARGET(或者用于向后兼容的SORT _AREA _ SIZE)的值,用户排序可能在内存或者在指定的临时表空间中的磁盘上完成,如果这个初始化参数不是太高的话。

select a.value "Disk Sorts", b.value "Memory Sorts",round((100*b.value)/decode((a.value+b.value),0,1,(a.value+b.value)),2)"Pct Memory Sorts" from v$sysstat a, v$sysstat b where   a.name = 'sorts (disk)'and b.name = 'sorts (memory)';

5. 空闲的数据缓冲区的比例

从您首次启动Oracle数据库的那一天开始,用户们的查询就开始使用内存。空闲的记录数除以X$BH表中的记录总数(即所分配的数据块缓冲区的总数)就得到这个百分比。同时请注意,您必须以SYS的权限来运行该查询。此外,拥有众多的空闲缓冲区并不一定是就最佳环境。5%-10% 为最佳。当空闲比例高于25%时,数据缓冲区设置得太大了,可能会浪费资源。

select decode(state,0, 'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),3, 'BEING USED', state) "BLOCK STATUS",count(*) from x$bh group by decode(state,0,'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),3, 'BEING USED', state);

6. 最浪费内存的前10个语句占所有语句的比例

在没有调整的情况下,大多数系统中10个最常使用的SQL语句的访问量占了整个系统中内存读操作的50%以上。本节测量了最影响性能的代码对整个系统所造成危害的严重性,以百分比表示。

select sum(pct_bufgets) "Percent" from (select rank() over ( order by buffer_gets desc ) as rank_bufgets,to_char(100 * ratio_to_report(buffer_gets) over (),'999.99') pct_bufgets from v$sqlarea ) where rank_bufgets < 11;

小于5%为最佳。

7.调整滥用磁盘读操作的主要语句

www.2cto.com

我发现在没有作调整的情况下,在绝大多数的系统中,访问量占前25位的语句的磁盘读操作将占用整个系统所有磁盘和/或内存读操作的75%。

select disk_reads, substr(sql_text,1,4000) from v$sqlarea  order by disk_reads desc;

8.表和与它们相关联的索引应当放置在不同的物理磁盘上,以便减少文件I/O。

以上测试也可以通过AWR和STATSPACK来查看. 在分析结果中,我们首先要看的十项内容:

1. 首要的5个等待时间(定时事件)

2. 负载简档(Load profile)

3. 实例效率点击率(Instance efficiency hit ratios)

4. 等待时间(Wait events)

5. 闩锁等待(Latch waits)

6. 首要的SQL(Top SQL)

7. 实例活动(Instance activity)

8. 文件I/0和段统计数据(File I/0 and segement statistics)

9. 内存分配(Memory allocation)

10.缓冲区等待(Buffer waits)

查询缓冲区命中率:

select   (1 - (sum(decode(name, 'physical reads',value,0)) /

(sum(decode(name, 'db block gets',value,0)) +

sum(decode(name, 'consistent gets',value,0))))) * 100 "Hit Ratio"

from      v$sysstat;

数据字典缓存命中率:

SQL> select (1-(sum(getmisses)/sum(gets))) * 100 "Hit Ratio"from  v$rowcache;

Hit Ratio

----------

99.715218

如果数据缓存命中率低于95%,必须增大初始参数文件里的SHARED_POOL_SIZE 参数的值。

查询库缓存命中率:

select     Sum(Pins) / (Sum(Pins) + Sum(Reloads)) * 100 "Hit Ratio"

from       V$LibraryCache;

库缓存命中率显示了对实际语句和PL/SQL对象的内存读操作所占的百分比。注意,很高的命中率并不总是一件好事

查询PGA内存排序命中率:

select a.value "Disk Sorts", b.value "Memory Sorts",round((100*b.value)/decode((a.value+b.value),0,1,(a.value+b.value)),2) "Pct Memory Sorts" from v$sysstat a, v$sysstat b where a.name = 'sorts (disk)' and  b.name = 'sorts (memory)';

查询空闲的数据缓冲区:

SQL> select  decode(state,0, 'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'), 3, 'BEING USED', state) "BLOCK STATUS", count(*) from x$bh group by  decode(state,0,'FREE',1,decode(lrba_seq,0,'AVAILABLE','BEING USED'),3, 'BEING USED', state);

设置缓存和共享池大小时需要记住的建议:

字典缓存命中率很低(低于95%),可以考虑增大shared_pool_size . 如果库缓存重载率很高(>1%) 可以增大shared_pool_size

Oracle之SQL命中率相关推荐

  1. oracle查看sql命中率,关于Oracle检查命中率的SQL

    关于Oracle检查命中率的SQL 如果传统安全厂商只是一味的采取防御等待战术,只是守着手里即将耗尽的资源,不正视市场变化的趋势,不积极探索新的商业模式,很有可能被新的厂商代替正在数据库开动2小时后, ...

  2. Oracle中各个命中率的总结及调优笔记整理

    Oracle中各个命中率的总结及调优笔记整理 关于Oracle中各个命中率的计算以及相关的调优 1)Library Cache的命中率: .计算公式:Library Cache Hit Ratio = ...

  3. oracle pl/sql 程序设计 历史笔记整理

    20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/yjkhecc@10.85.23.92:1521/orcl 在java ...

  4. ORACLE分页SQL

    ORACLE分页SQL 1,使用rownum SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ...

  5. oracle bom层级sql,oracle bom_tree.sql

    oracle bom_tree.sql CREATE OR REPLACE FUNCTION BOM_TREE(vpart_no IN parts.part_no%TYPE,mm in varchar ...

  6. Oracle查看SQL执行计划的方式

    Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...

  7. Oracle如何代码编辑,配置UltraEdit为Oracle PL/SQL代码编辑器

    配置UltraEdit为Oracle PL/SQL代码编辑器[@more@] 将下文复制到UltraEdit的wordfile.txt的最后,就能实现UltraEdit中对PL/SQL文件语法突出显示 ...

  8. cmd进入Oracle的sql*plus

    Oracle里sql*plus的用户名即system用户,密码是自己设置的密码. 如果密码忘记,可通过如下方法重置. 1.win键+R键,输入cmd,打开命令提示符. 2.输入sqlplus /nol ...

  9. oracle12测试骤,Oracle中SQL语句解析的步骤

    我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.那么这两种解析有何不同之处呢?它们又分别是如何进行解析呢?Oracle内部解析的步骤又是如何进行的呢?下面 ...

最新文章

  1. mysql日志文件相关的配置【2】
  2. 关闭ES动态创建type
  3. 在Centos 5.2下编译安装LAMP
  4. 开发遇到的问题---【spring-security权限控制框架】
  5. 【数据结构与算法】之深入解析“合并两个有序数组”的求解思路与算法示例
  6. 用Python实现一个SVM分类器策略
  7. MyBatis 多表联合查询及优化
  8. 整理Excel表格中的批注
  9. Storm入门(七)可靠性机制代码示例
  10. 数据库之如何解决SQL Server 2008 R2连接不上服务器?
  11. C# 使用iTextSharp中间件打印PDF
  12. 为什么大容量的服务器SAS硬盘普遍都只有7200rpm的转速?
  13. Google Play安装应用一直在等待下载的解决方案
  14. SPRD Android12 设备解锁
  15. Python学生信息管理系统(增删查改、模糊查找、txt文件输出)# 谭子
  16. 你想要的宏基因组-微生物组知识全在这(2020.5)
  17. 二阶常微分方程的数值解法(中心差分法和有限体积法)
  18. docker- health check
  19. Java使用jdbc连接sqlserver2000与2005的语句差别
  20. 期货做空是什么意思?探讨期货做空和做多

热门文章

  1. 数字资产原力觉醒,颠覆性创新来自于Turing差价合约
  2. 【文学文娱】《贺吾司11载之奥森健康跑》
  3. date java 格式化 sss_JAVA时间格式为yyyy-MM-ddTHH:mm:ss.SSS+SSSS转为常用时间格式
  4. 前5个android游戏,盘点Android平台战胜iPhone的5个优势
  5. 关于星座斗地主隐私政策内容
  6. 华为手机,雨中的禅定欢喜
  7. 用普通摄像头测量距离
  8. 全志h6对比晶晨s905_晶晨S905X3和晶晨S912两个芯片哪个好?差距表现在什么地方?...
  9. Charles抓取Https安装证书
  10. 彩票摇号器java代码_多线程的简单应用----彩票摇号器