Oracle性能优化一

性能优化(性能定位)

客户对产品的依赖性越强,对产品性能差的忍耐性越低。

 

性能优化原则

  • 性能优化是一种面向客户的主观的感觉,不是所有的数据库都需要(能够)优化
  • 数据库的性能,大多数都不是从数据库层面能够解决的
  • 在不了解业务之前,不可能找到正确的优化思路
  • 优化要有一个度,并不是“没有最优,只有更优”

导致性能问题的可能原因

  • 表没有正确的创建索引——错误的执行计划
  • 表没有及时的分析——错误的执行计划
  • 热块——数据块的争用(反向索引解决?)
  • 锁的阻塞——业务设计的缺陷
  • SQL解析消耗大量CPU——变量绑定
  • 低效的SQL——SQL自身的问题
  • 数据库整体负载过程——架构设计的问题

性能问题的定位

原则:尽可能从小范围分析问题

SQL层

工具  执行计划 10053,10046

会话层(最有用的最靠谱,用的最多的)

V$SESSION,V$SESSTAT,V$SESSION_WAIT,V$SQL,V$LOCK,SQL_TRACE

系统层

AWR(STATSPACK),OS tools(top,iostat)

AWR数据报告(还是需要结合业务,此项并不重要,不要随便分析AWR),结合操作系统的工具

不要迷恋优化器

不要迷恋优化器,优化器永远无法知道你的业务需求

  • 优化器永远无法按照你的业务需求来重写你的SQL语句
  • 优化器只能在数学(集合)逻辑上做SQL得重写

高效的SQL来自于对业务的理解和对SQL执行过程的理解。

不要迷恋高级工具,关注底层原理,基础,和业务

SQL的难不在于写出功能性SQL,而在于在业务的基础上,写出运行高效的SQL

对结果集,SQL执行过程理解,才能写出高效的SQL

为什么高效的SQL这么难

1、SQL语言本质上是集合的运算

2、语言的效率,是SQL语言最难的地方

很多种访问的方式:

tablescan(全表扫描)

index range scan(索引范围扫描)

index fast scan(索引快速扫描)

nested loop join(嵌套循环表关联)

merge join(先各自排序,再作关联)

hash join(将各自哈希,再比对关联)

3、优化器机制开发者无法掌控

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值