sql monitor的使用(一)
在sql调优中,对于sql语句的实时监控显得尤为重要,如果某条sql语句的性能比较差。可能从前端的直观感觉就是执行时间比较长。对于dba来说,可能关注的相关因素需要多一些.1)可以通过top命令来监控sql的性能情况,查看cpu使用率较高的oracle process,然后通过查看session和process得绑定得到对应的session,然后得到对应的...
通过shell定制dbms_advisor.quick_tune
在平时的调优工作中,在11g中的新特性sql monitor可以极大的简化性能监控的工作,对于执行时间超过5秒的sql语句都会记入v$sql_monitor中。但是如果某个sql语句还没有执行,或者执行时间已经是几天前了,等发现性能问题进行调优的话就会比较困难,采用dbms_advisor.quick_tune是一个不错的选择。如果sql语句比较庞大,比较迷...
使用sqlt手工创建sql_profile
在生产环境中有一些sql语句出现问题,大多是一些很紧急的问题,可能有些sql语句出现了执行计划的问题,通过hint能够做很大的改进,但是如果想让变更尽快生效,可以使用sql_profile来实现。说起sql_profile的创建有两种方式,一种是自动,通过sql tuning的功能能够得到一些建议,会自动生成sql_profile,只需要启用即可,如...
Oracle PL/SQL 自治事务的说明
自治事务是PL/SQL静态SQL的一个特性,可声明于存储过程、函数或触发器中。它是和主事务分开的事务,可以独立执行事务,不与主事务共享锁、资源,不受主事务提交的影响。自治事务可以用来记录日志,记录计数值,而不受主事务回滚的影响。--创建自治事务的存储过程create or replace procedure proc2 is PRAGMA AUT...
Oracle 查询转换初探
Oracle查询转换器的作用是把原始sql重写为语义相同的语句,目的是为了获得更高效的sql。查询转换主要有四种技术:子查询展开,视图合并,谓词推入,星型转换。了解查询转换是掌握SQL优化的基础,本文将对这四种技术做一些简单的介绍。
强大的awr format
awr报告对于dba而言是工作中重要的一部分内容,有些时候感觉跟去医院看病的化验单一样,各种指标和参数。有些高了,有些低了都是需要注意的内容。之前打印了一份awr报告,竟然有将近40页的样子,但是阅读awr报告也只能按照一定的思路来看,如果通读,那确实是云里雾里。awr format 是在http://tylermuth.wordpress.com/这个...
优良的sql语句在书写过程中要注意的细节
我们要做到不但会写SQL,还要做到写出性能优良的SQL语句。 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,您必须选择记录条数最少的表作为基础表...
Oracle DBMS_STATS.SET_TABLE_STATS 模拟大数据量进行 SQL 调试和优化
生产上有一张 200 万条的表,需要进行 SQL 优化;测试环境中的这张表,里面只有 10 万行的数据。不需要真正插入 190 万条的数据,可以通过DBMS_STATS.SET_TABLE_STATS 这个包进行表统计信息的设置,来模拟大数据量的场景。首先,对测试环境的这张表进行统计信息收集,以得到准确的统计信息BEGIN DBMS_STA...
Oracle中常见的33个等待事件小结
一. 等待事件的相关知识1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件。 1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件。 2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务...
awr性能问题排查第一篇
对于awr,里面涵盖的内容比较杂,有时候看报告的时候总是不知道该怎么下手。时间长了,可能会有一些阅读习惯或者心得。今天在看大师chris lawson的一篇博文对于awr的一些心得(http://www.oraclemagician.com/white_papers/10awr.pdf ),还是蛮有收获,赶紧按照这个方子来细细品味一番。首先是查看等待事件,这个也是...
merge语句导致的CPU使用率过高的优化(二)
之前分享过一篇关于merge语句导致的CPU使用率过高优化的案例。的http://blog.itpub.net/23718752/viewspace-1819471/后续的跟进没有补充,也“秀”一张图,红色的火焰是原来的系统负载,右边的部分是最近的逻辑读情况,不过惭愧的是,这个不是优化的效果,因为应用的高峰期已经处理完了,后面的sql调用频率极低,所以感觉...
基于CBO优化器谓词选择率的计算方法
选择率selectivity是Oracle的CBO中比较重要的一个概念。和selectivity经常一起提到的一个概念是cardinality,其实这两个概念的本质上是一样的。selectivity是指一个SQL操作的得出结果集占原来结果集的百分比,而cardinality就是指一个SQL操作的得出结果集的行数,CBO是通过selectivity来计算cardinality的,也就是说cardi...
oracle 优化统计数据之直方图(histograms)
直方图是一种按数据出现的频率来进行分类存储的方法.在oracle中直方图是用来描述表中列数据的分布情况.每一个sql在被执行前都要经过优化这一步骤那么在优化器给出一个最优执行计划之优化器应该要知道sql语句中所引用的底层对象的详细信息.直方图描述的对象包括列中不同值的数量和它们出现的频率.现在存储每一个不同值...
oracle优化器之执行计划
什么是执行计划执行计划显示了执行一个sql语句所需步骤的详细信息.这些步骤代表了一组数据库操作它们会消费和生产行数据.这些操作的顺序以及它们的实现取决于查询优化器对查询转换和物理优化技术的联合使用.执行计划通常是以表格形式来显示,这个执行计划实际上是一个树形结构.例如下面是一个基于sh方案的查询:SELECT pr...
执行时间在1秒以下的SQL同样也会引发性能问题
某客户的操作人员反应很慢不能操作,管理人员登录小机系统后发现CPU使用到了95%以上。而且这种情况持续了几个月。小机是IBM的P520,配置是2颗4核的CPU,内存是32G,Oracle是10.2.0.5。topas与生成的AWR报告如下:从上面的load profile部分可以看到每秒执行的sql与事务数并不高,因为是周末并没有太多人使用系统...
百倍性能提升:谓词条件(a||b) vs (a,b)
某系统维护人员在执行一查询需要1个多小时才能执行完成,根本不能满足业务需求,通过应用系统日志找到了该SQL:DEBUG: 2016-04-05 12:18:48,203: com.powerise.hygeia.framework.jdbclogger.PreparedStatementWrapper: exec : 2456844ms at com.powerise.hygeia.biz.medicare.entity.EnLiquidateDetailInfo.getLiquida...
Oracle性能优化之虚拟索引
虚拟索引是定义在数据字典中的伪索引,但没有相关的索引段。虚拟索引的目的是模拟索引的存--而不用真实的创建一个完整索引。这允许开发者创建虚拟索引来查看相关执行计划而不用等到真实创建完索引才能查看索引对执行计划的影响,并且不会增加存储空间的使用。如果我们观察到优化器生成了一个昂贵的执行计划并且SQL调整指...
Oracle中的表结构导出到word
``` SELECT t1.Table_Name AS "表名称", t3.comments AS "表说明", t1.Column_Name AS "字段名称", t1.Data_Type AS "数据类型", t1.Data_Length AS "长度", t1.NullAble AS "是否为空", t2.Comments AS "字段说明", t1.Data_Default "默认值" FROM cols t1 left join user_col_comments t2 on t1.Table_name=t2...
统计信息过期导致SQL进行NESTED LOOPS查询缓慢
今天qq上一好友发过来一个sql让我帮他看看,说这个sql加上一个条件查询时间在3~4秒左右,而不加上这个条件则非常快,正好这段时间也在学习优化,就看看问题所在。sql语句大致如下:SQL> SELECT a.mc_id AS company_id, a.mc_name AS company_na...
buffer busy wait 解析
一:首先解释buffer busy wait等待事件出现的原因:进程获取SGA中的buffer会遵循以下步骤:1.获得cache buffers chains latch,遍历那条buffer chain直到找到需要的buffer header。 #块在缓存中的排列成的链 就是 cache buffers chains2.根据需要进行的操作类型(读或写),它需要在buffer header上获...