Chinaunix首页 | 论坛 | 博客
  • 博客访问: 442647
  • 博文数量: 35
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 444
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-02 21:42
文章分类
文章存档

2009年(35)

我的朋友

分类: Oracle

2009-09-08 15:45:28

Oracle 性能调优学习笔记
附件有图,
 
文件: Oracle 性能调优学习笔记.pdf
大小: 1917KB
下载: 下载

一.三条数据库总体性能查询的sql,
select  (select SUM(pins) FROM v$librarycache)/((select SUM(pins) FROM v$librarycache)+(select SUM(reloads) FROM v$librarycache))*100 from dual;
--库高速缓存(Library Cache)
SELECT (1-(SUM(getmisses)/(SUM(gets)+SUM(getmisses))))*100 FROM v$rowcache;
--Dictionary Cache 命中率
SELECT (1-(SELECT value FROM V$SYSSTAT WHERE name='physical reads')/((SELECT value FROM V$SYSSTAT WHERE name='db block gets')+(SELECT value FROM V$SYSSTAT WHERE name='consistent gets')))*100
FROM DUAL;
--高速缓存命中率
如上三条sql查询得出的结果如果都是大于99%的,表明数据库没有出现较大的性能问题,我曾在PC项目的数据库中跑过这三条sql,其结果都是99%以上的,

性能调优的目标,最直接的体现就是减少响应时间.
 
 
 
 
 
 
可以使用上面的sql查询到当前登录oracle系统的用户,上面的只有sys登陆
 
执行上面这个包的作用是对指定session进行sql trace,
 
Statspack是一个比较好的性能报告工具,不会其产生的报告一般都比较长,也比较的难懂,估计需要比较牛的人才能较好的理解.
 
Statspack的使用比较简单,但是首先需要收集信息的话需要设置timed_statistics的值为true,
下图是对时间点做一个快照,一般在时间间隔15分钟左右快照一次,最后生成报告的时候系统会提示你选择某两个快照来进行对比,从而得出报告,
  
下面是几个重要的视图,可以通过较好的查询视图来得出性能的报告,
根据下图的视图时间的关系可以查询到session所对应的相关事务,特别是可以得到事务的等待时间.
 
根据下面的sql可以查询到某一个sid的事件等待时间,比如图中的129是代表等待数据库文件读操作的毫秒数
   
下图为oracle进程的I/O关系,
 
关于较好性能的一些原则,主要是要让磁盘的读写尽量的减少,然后是尽量的加速磁盘的读写速度,
 
 
这张图是要说明最好把不同的表空间,索引放在不同的磁盘上面,这样读写速度会快一些.
 
 
系统表空间尽量与其他用户的表空间独立
  
下面这张图是我对PC系统表空间的物理读写的一个查询
 
 

下面一张图中的sql查询关于表扫描的一下参数,其中长表扫描的值应该小一点好.
 
下图是要说明redo log放在不同的磁盘上面也能提升性能.
   
下图是对绑定变量提升性能的一个比较,我分别创建p1和p2两个procedure,一个是不是用绑定变量,一个是使用绑定变量,然后对执行时间做一个比较,
 

下面我直接插入100万条记录作了一个比较,一个是1分19秒,另一个是9分06秒,
差距比较的大. 不过,我在procedure里面是使用的动态构造的sql,如果我之间写sql为:
Insert into t1 values(i); 的话执行的结果也是1分19秒,这是因为oracle自动对sql进行了优化,也使用了绑定变量.
其实使用绑定变量的原因是减少了sql硬解析的次数,绑定变量之后只需要对sql进行一次的硬解析,如果没有使用则每次都会对这个sql进行硬解析,这样不仅浪费了时间,同时也加到了share pool的容量.
 
阅读(1677) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~