
oracle sql 语句调优及相关技术
文章平均质量分 74
yrg5101
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
oracle tkprof使用小结及技巧
oracle tkprof使用小结1.chechk init.oratimed_statistics=trueTOP查出最耗资源的PID2.SQL> select s.sid,s.serial# from v$session s,v$process pwhere s.paddr=p.addr and p.spid='17397';3.如果需要在session级别上设置t转载 2012-10-30 20:44:21 · 218 阅读 · 0 评论 -
Script:SQL调优健康检查脚本
以下脚本可以用于收集SQL调优的相关信息,包括统计信息、优化器参数等。When executed for one SQL_ID, this script generates an HTML report with the results of a set of health-checks around the one SQL statement provided. Health-checks转载 2012-10-30 18:46:16 · 225 阅读 · 0 评论 -
Thread: 关于同样的语句和执行计划,同样的数据量效率差距巨大的问题
关于同样的语句和执行计划,同样的数据量效率差距巨大的问题Posted: 2012-10-25 上午12:35 Reply事发问题,测试环境程序测试完后第二天,发布于生产环境,结果出现了大量用户堵塞问题,查看数据库为某一条语句效率很低,紧急调整后事故解决,事后开总结会,开发的提出在测试环境语句效率很高转载 2012-10-29 22:28:18 · 567 阅读 · 0 评论 -
Oracle中v$sqlarea与v$sql_plan全面分析
(1) v$sql 一条语句可以映射多个cursor,因为对象所指的cursor可以有不同用户(如例1)。如果有多个cursor(子游标)存在,在V$SQLAREA为所有cursor提供集合信息。例1:这里介绍以下child cursoruser A: select * from tbluser B: select * from tbl大家认为这两条语句是不是一样的转载 2012-09-24 10:47:47 · 1477 阅读 · 0 评论 -
Oracle三组难缠的hint no_unnest/unnest,push_subq,push_pred
常常有人把这三个hint搞混,主要是因为对三种重写原理不清楚。特总结如下。(实验环境为10204)1. no_unnest, unnestunnest我们称为对子查询展开,顾名思义,就是别让子查询孤单地嵌套(nest)在里面。所以un_unnest双重否定代表肯定,即让子查询不展开,让它嵌套(nest)在里面。现做一个简单的实验:create table hao1 as转载 2012-09-13 09:35:58 · 464 阅读 · 0 评论 -
使用WITH AS 优化SQL
马上就要单身节了,正在想今年我去祸害谁家的姑娘,突然QQ好友发来信息,说能否帮忙优化一个SQL,SQL调优做得实在太多了,都已经麻木了,反正优化一个SQL也就几秒钟到几分钟的事情。哥们说下面的SQL要跑5个多小时[html] view plaincopyprint?SELECT B.AREA_ID,转载 2012-09-06 02:28:48 · 1135 阅读 · 0 评论 -
如何设置最佳的并行度
今天监控 项目上的 日常JOB 发现有人用 PARALLEL 31 去delete table DELETE /*+ PARALLEL(di, 31) */ FROM DICFR_ORDR_CUT_FCT DI WHERE DI.TIME_PERD_START_DATE = :B1 AND DI.SRCE_SYS_ID = :B5 AND DI.DSTBR_ID = :B4 AND转载 2012-09-06 01:57:19 · 282 阅读 · 0 评论 -
直方图统计导致错误的执行计划
今天下午一哥们遇到个case.他说如下SQL语句SELECT WORKITEMID FROM WFWIPARTICIPANT WHERE PARTICIPANT IN ('771', '99999', '41', '146', '李锦');用DBMS_STATS收集统计信息之后会走全表扫描,而用analyze table WFWIPARTICIPANT com转载 2012-09-06 01:11:44 · 265 阅读 · 0 评论 -
使用dbms_sqltune调优sql的步骤
一直没有玩过10g的自动调优建议器,今天将这个包的使用步骤简单记录如下: 1.创建自动调优任务DECLARE my_task_name VARCHAR2(30); my_sqltext CLOB; BEGIN my_sqltext := 'select count(*) from bigtb a, smalltb b where a.object_na转载 2012-06-14 20:29:26 · 276 阅读 · 0 评论 -
一条sql优化
问题:这样一条sql应该怎么优化?select * from sys_user where user_code = 'zhangyong' or user_code in (select grp_code from sys_grp where sys_grp.user_code = 'zhangyong')Execution Plan转载 2012-04-08 21:06:28 · 215 阅读 · 0 评论 -
oracle 中如何定位重要(消耗资源多)的SQL
1、查看值得怀疑的SQLselectsubstr(to_char(s.pct,'99.00'),2)||'%'load, s.executions executes, p.sql_textfrom(selectaddress, disk_reads,转载 2012-06-08 13:10:20 · 264 阅读 · 0 评论 -
运用HINT提高SQL语句的执行效率
运用HINT提高SQL语句的执行效率hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划。我们可以用hints来实现:1) 使用的优化器的类型2) 基于代价的优化器的优化目标,是all_rows还是first_rows。3) 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid。4) 表之间的连接类型5) 表之间的连接顺序转载 2012-01-17 17:19:46 · 206 阅读 · 0 评论 -
oracle 实时查询最耗CPU资源的SQL语句
1. 先通过top命令查看产用资源较多的spid号 2.查询当前耗时的会话ID,用户名,sqlID等:select sid,serial#,machine,username,program,sql_hash_value,sql_id, to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v转载 2012-02-02 16:18:56 · 193 阅读 · 0 评论 -
查看执行计划
如何产生执行计划?1) autotrace准备PLAN_TABLE,/rdbms/admin/utlxplan.sql /sqlplus/admin/plustrace.sqlgrant plustrace to user_name;用法: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]举转载 2012-02-17 12:24:15 · 197 阅读 · 0 评论 -
如何分析执行计划
如何分析执行计划? 假设LARGE_TABLE是一个较大的表,且username列上没有索引,则运行下面的语句:SQL> SELECT * FROM LARGE_TABLE where USERNAME = ‘TEST’; Query Plan ----------------------------------------- SELECT STATE原创 2012-02-17 12:25:23 · 196 阅读 · 0 评论 -
oracle SQL 调优常识
引自:http://bulo.aeeboo.com/group/topic/1815/ORACLE SQL TUNING一.优化器模式ORACLE的优化器共有3种:a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性)为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须定期更新统计信息,以保证数据转载 2012-10-30 18:12:15 · 262 阅读 · 0 评论 -
一种优化的手段 (gather_plan_statistics + cardinality)
其实,许多人已经提到过这个东西了,我这里只是举一个简单的例子演示一遍具体的流程而已比如说优化这个语句:SELECT MAX(P.PAGEVIEW) FROM PRODUCT P, CATALOGRELATEPRODUCT CATAPWHERE CATAP.CATALOGID = 291 AND P.ID = CATAP.PRODUCTID AND PUBLIS转载 2012-10-29 23:30:34 · 312 阅读 · 0 评论 -
找到引起磁盘排序的SQL
下面的这些脚本都可以找到引起磁盘排序的SQL。 SELECT /*+ rule */ DISTINCT a.SID, a.process, a.serial#,TO_CHAR (a.logon_time, 'YYYYMMDD HH24:MI:SS') LOGON, a.osuser,TABLESPACE, b.sql_textFROM v$session a, v$sql b, v转载 2012-10-25 08:36:31 · 154 阅读 · 0 评论 -
子查询sql优化2
我加了很多ORACLE群,自己本人也很喜欢扯淡。最近经常去ORACLE酱油群扯淡,酱油群里有很多大师,还有ORACLE原厂的,神马世界500强的都有。经常看见盖尔拿个SQL出来吆喝,我这人有个爱好,喜欢优化复杂SQL,对神马统计信息缺失/不准,绑定变量窥探,等等的SQL优化很没兴趣,也对神马聚簇因子很大滴优化也没兴趣,就喜欢搞复杂的SQL,其实优化复杂SQL往往需要改写代码,但是我这个人懒转载 2012-09-06 02:25:46 · 435 阅读 · 0 评论 -
子查询优化的经典案例
上周五要下班的时候,盖尔发来一个SQL[html] view plaincopyprint?select tpc.policy_id, tcm.policy_code, tpf.organ_id, to_char(tpf.insert_time, 'YYYY-MM-DD') As inser转载 2012-09-06 02:19:18 · 583 阅读 · 0 评论 -
利用Merge代替复杂的UPDATE语句
有朋友问我一个update语句,下面两种写法哪个性能更高,一个是没HINT的,一个是有HINT的[html] view plaincopyprint?UPDATE CS_PERFORMANCE_CURRENT C SET C.PERFORMANCE_SCORE = '0.00', C.ASSESS_DESC = '劳动纪律考核'转载 2012-09-06 02:14:18 · 276 阅读 · 0 评论 -
全表扫描也可能出现 db file sequential read
今天我要做一个SQL调优,监控该SQL, 利用ASH 监控 该SQL是在sid=4848 上面跑的 SQL> select SESSION_ID,NAME,P1,P2,P3,WAIT_TIME,CURRENT_OBJ#,CURRENT_FILE#,CURRENT_BLOCK# 2 from v$active_session_history ash, v$ev转载 2012-09-06 02:01:18 · 663 阅读 · 0 评论 -
SQL调优之位图索引统计信息出错
老外发来邮件,叫我对2个视图进行优化---------------邮件内容-------------------------------------------------------------------Hi,But this view was yesterday running for 15 minutes – instead of regular 1-2 minse转载 2012-09-06 01:54:55 · 581 阅读 · 0 评论 -
使用组合索引优化SQL案例
老外发来邮件:Hi Robinson, I tried running the attached queries on ADW1U database. Even after 10 mins both the queries were still running. Could you please check the issue?邮件就是老外叫我对附件中的2个SQL进行调转载 2012-09-06 01:26:17 · 593 阅读 · 0 评论 -
Oracle SQL Trace 和 10046 事件及oradebug 命令
一. SQL_TRACE当SQL语句出现性能问题时,我们可以用SQL_TRACE来跟踪SQL的执行情况,通过跟踪,我们可以了解一条SQL或者PL/SQL包的运行情况,SQL_TRACE命令会将SQL执行的整个过程输出到一个trace文件中,我们可以读这个trace 文件来了解在这个SQL执行过程中Oracle 都做了哪些操作。 可以通过sql命令启动SQL_TRACE,或者在初始化参数转载 2012-08-10 07:53:04 · 697 阅读 · 0 评论 -
怎么优化子查询语
怎么优化如下子查询语句: select * from tb_a a where a.id in (select b.id from tb_b b where b.id 回答:这是典型的子查询语句,所谓子查询就是指在in() ,exists()中的select,在from之后的select称为动态视图。 子查询的优化有这么几种方法: (1)in子查询可以优化成关联子查询: s转载 2012-07-16 13:38:09 · 349 阅读 · 0 评论 -
表之间的连接
表之间的连接表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据。连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的。如果一个SQL语句的关联表超过两个,那么连接的顺序如何呢?ORACLE首先连接其中的两个表,产生一个结果集;然后将产生的结果集与下一个表再进行关联;继续这个过程,直到所有的表都连接完成;最后产生所需的数原创 2012-02-17 12:23:37 · 188 阅读 · 0 评论 -
sql执行计划变了
今天数据库做了如下调整,修改了两个节点的local_listener参数alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.244.132)(PORT=1521))))' scope=both sid='orcl2'alter system set loc转载 2012-10-29 23:03:45 · 375 阅读 · 0 评论 -
Hash join算法原理
一、 hash join概念hash join(HJ)是一种用于equi-join(而anti-join就是使用NOT IN时的join)的技术。在Oracle中,它是从7.3开始引入的,以代替sort-merge和nested-loop join方式,提高效率。在CBO(hash join只有在CBO才可能被使用到)模式下,优化器计算代价时,首先会考虑hash join。可以通过转载 2012-10-29 12:39:44 · 503 阅读 · 0 评论 -
DBLINK 无统计信息导致SQL变慢
今天重庆ORACLE社区有位哥们提问,为啥索引重建(alter index rebuil)之后,SQL变慢了,以前15秒就可以完成,现在要2分多种,于是问他要了执行计划[html] view plaincopyprint?SQL> set autotrace traceonly SQL> SELECT SEQ_PAY_CUSTOMEROPER.转载 2012-09-06 02:31:08 · 471 阅读 · 0 评论 -
SQL调优之收集统计信息,重建索引
老外发来邮件,叫Mark做SQL调优。Mark是波兰资深的DBA,是波兰DBA leader。由于是晚上8点半发来的邮件。那么老外肯定认为我休息了。所以把我放在了CC list里面。我有个习惯,就是晚上不开OC,但是邮件打开,如果是紧急的邮件,就会马上处理,不紧急就放到明天去做。谁叫我有5个项目忙得不可开交呢,如果紧急问题不马上处理,那么我第二天肯定无法完成其余工作。 ------转载 2012-09-06 01:44:33 · 1312 阅读 · 0 评论 -
Oracle中获取最低效的 topSQL的语句
oracle提供了很多工具来查找最低效的SQL,但是,本质上就是通过如下SQL语句,从相关系统视图中获取最低效的SQL: select rownum as rank, a.* from (select PARSING_SCHEMA_NAME RUN_USER, --执行用户 SQL_FULLTEXT, --SQL文本,全,带格式 sql_text, --SQL文本前面部分转载 2012-08-08 16:46:50 · 315 阅读 · 0 评论 -
SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)
最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连接的问题,回答不尽理想~现在在这写写关于它们的作用假设有如下表:一个为投票主表,一个为投票者信息表~记录投票人IP及对应投票类型,左右连接实际说是我们联合查询的结果以哪个表为准~1:如右接连 right join 或 right outer join:我们以右边voter表为准,则左表(voteMaster转载 2012-01-17 17:16:22 · 168 阅读 · 0 评论 -
Oracle存储过程编写经验和优化措施
Oracle存储过程编写经验和优化措施 一、前言: 在经过一段时间的存储过程开发之后,写下了一些开发时候的小结和经验与大家共享,希望对大家有益。 二、适合读者对象: 数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。 三、介绍: 在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就转载 2012-01-17 17:19:06 · 155 阅读 · 0 评论 -
WMSYS.WM_CONCAT 函數的用法 (2
select t.rank, t.Name from t_menu_item t; 10 CLARK 10 KING 10 MILLER 20 ADAMS 20 FORD 20 JONES 20 SCOTT 20 SMITH 30 ALLEN 30 BLAKE 30 JAMES转载 2012-01-17 17:19:36 · 169 阅读 · 0 评论 -
Oracle中实现分页的方法
在oracle中显示分页很简单, 利用两次rownum就实现了。 下面的语句用来返回DBA_OBJECTS表中类型为TABLE的所有记录中的第100行至第200行。 select * from( select rownum rnm, a.* from ( select OBJECT_NAME from DBA_OBJECTS where object_type='TABLE'转载 2012-01-18 15:17:20 · 222 阅读 · 0 评论 -
Oracle sql 性能优化调整
Oracle sql 性能优化调整 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种:a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FI转载 2012-01-18 15:18:43 · 242 阅读 · 0 评论 -
set autotrace的用法和含意及区别
Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]说明:前三个参数{OFF | ON | TRACE[ONLY]} 里必需选择一个,而且只能选择一个后两个参数[EXP[LAIN]] [STAT[ISTICS]]是可选的,也可以都不选择TRACE[ONLY]的含意是只显示explain和原创 2012-01-19 15:08:06 · 409 阅读 · 0 评论 -
Oracle数据库重复数据删除的三种情况
在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢? 重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等。 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle转载 2012-02-17 12:19:54 · 170 阅读 · 0 评论 -
oracle执行计划相关概念
oracle执行计划相关概念1. 什么是执行计划?为什么要了解执行计划?为了执行一条sql语句,oracle可能必须要执行某些步骤的操作,每一步骤可能是从数据库中物理检索数据行,或者用某种方法准备数据行,供发出语句的用户使用。Oracle用来执行语句的这些步骤的组合即为执行计划。执行计划是sql优化中最为复杂也是最为关键的部分,只有知道了oracle在内部到底是如何执行转载 2012-02-17 12:22:05 · 235 阅读 · 0 评论