ORACLE TURNNING
文章平均质量分 69
指尖上的程序
座右铭:做人、做事、做学问;
展开
-
no_swap_join_inputs 与 leading
http://blog.csdn.net/jgmydsai/article/details/18221751?ADUIN=604178834&ADSESSION=1389577130&ADTAG=CLIENT.QQ.5275_.0&ADPUBNO=26274首先建立测试用表如下[sql] view plaincopyc转载 2014-01-13 15:57:38 · 1671 阅读 · 0 评论 -
几条Oracle数据库开发的原则归纳(下)
上篇中,我们主要介绍了进行Oracle数据库开发应该关注的几条原则问题,本篇继续讨论这个话题。 4、The Trap In Your Where Condition and Order/Group clause 我们进行的日常数据库开发,主要集中在DML操作类型,以select/update/insert/delete为核心。在这些类型操作,我们最需要关注的并不是select的结果转载 2013-11-28 15:16:05 · 582 阅读 · 0 评论 -
几条Oracle数据库开发的原则归纳(上)
目前绝大多数的MIS系统,都是基于对数据库的交互式操作,开发人员大部分的工作都是直接或者间接与数据库打交道。作为开发人员,正确的使用数据库技术,不但可以提高数据库相关开发的效率,而且可以有效的减少投产运维阶段的工作量。本篇从笔者的实际工作体会入手,简单介绍几个Oracle相关开发原则。 1、 “Never Treate Database Like A blackbox” “绝不转载 2013-11-28 15:15:25 · 567 阅读 · 0 评论 -
Oracle调优总结
Oracle调优总结 收藏 /*========================================================================== *Author: MartriWang@gmail.com *Date: 09/05/2007 *Description:ORACLE Summary *===================转载 2013-06-27 11:32:16 · 2129 阅读 · 2 评论 -
介绍几种获取SQL执行计划的方法(下)
上篇中,我们介绍了几种获取执行计划的方法。本篇我们继续探讨其他获取到执行计划详细信息的方法。 4、从shared_pool中直接抽取执行计划 我们执行过的SQL,在Oracle中会将执行计划缓存一段时间,就在shared_pool的library cache中。这是真实使用的执行计划,我们可以使用手段加以抽取展现。 在shared_pool中,执行计划主要是以share原创 2013-11-27 12:57:38 · 723 阅读 · 0 评论 -
介绍几种获取SQL执行计划的方法(上)
SQL调优是很多Oracle DBA和开发人员的重要工作。一个高效的SQL改写调优,可以大幅度优化执行计划,提高执行效率,进而增强关键用例模块的可用性和满意度。 进行SQL调优中不可缺少的操作就是获取指定SQL的执行计划。在目前的Oracle版本中,有很多可以使用的执行计划获取方法。本篇就加以总结,供需要的朋友不时之需。 1、方便易用的explain plan Explai原创 2013-11-27 12:52:51 · 1927 阅读 · 0 评论 -
虚拟列(Virtual Column)——时间换空间
从Oracle11g开始,提供了虚拟列(Virtual Column)功能。和传统的数据列差异在于,虚拟列在数据库中并不存在实际保存的数值,而是通过计算公式,进行计算获取列值。 我们从Oracle官方文档中,找到下面对于虚拟列技术的描述。 “Tables can also include virtual columns. A virtual column is like any o转载 2013-11-27 11:44:26 · 1348 阅读 · 0 评论 -
位图索引(Bitmap Index)——索引共用
位图索引区别于传统B*树索引有两个结构特点:其一是叶子节点上是一个可能的索引列取值对应一个叶子节点。另一个就是叶子节点上通过一个位图向量表示对应行是否取定这个索引值。 使用位图向量记录对应行的取值情况不仅可以带来存储空间上的节省,而且可以借助计算机位图运算的快速特性来提高索引结果利用率。下面我们通过模拟情况来进行分析。 Bitmap Index模拟说明 假设存在数据表T,有转载 2013-11-27 11:41:12 · 758 阅读 · 0 评论 -
位图索引(Bitmap Index)——从B*树索引到位图索引
索引是我们最常使用的一种性能优化手段。本质上讲,使用索引的优势就是通过付出一个额外的索引块扫描过程,获取到符合条件的rowid集合,之后依据rowid集合访问数据表块。从而节省下进行全表搜索的I/O消耗。 在各类型索引中,我们已经习惯使用的就是B*树索引,也就是将索引列的取值构建为一颗平衡二叉树。索引列每个非空行对应一个叶子节点,叶子节点上的内容包括索引取值和对应的rowid。B*树的特点转载 2013-11-27 11:34:09 · 1125 阅读 · 0 评论 -
位图索引(Bitmap Index)——位图索引与数据DML锁定
位图索引相对于传统的B*树索引,在叶子节点上采用了完全不同的结构组织方式。传统B*树索引将每一行记录保存为一个叶子节点,上面记录对应的索引列取值和行rowid信息。而位图索引将每个可能的索引取值组织为一个叶子节点。每个位图索引的叶子节点上,记录着该索引键值的起始截止rowid和一个位图向量串。 从本质上将,位图索引通过一个bit位来记录一个数据行是否存在对应键值。这样做对比传统的B*转载 2013-11-27 11:32:18 · 803 阅读 · 0 评论 -
查看统计信息_脚本
我们要去 check 为啥过期了----看一下 为啥 统计信息过期了,简化了,自己考虑复杂情况 ----select * from all_tab_modifications where table_owner in (select object_owner from plan_table) and table_name in (select object_nam原创 2013-11-26 22:31:55 · 608 阅读 · 0 评论 -
DBA任务---确保统计信息准确性
最近忙得不可开交,项目进入了cut over阶段,压力之大,前所未有。我的任务就是,负责优化long running的SQL,让其可以在3小时以内完成。昨天就出现一个Long running 的SQL,它跑了16小时,经过2小时的奋斗,终于把它优化到了2小时10分钟。 虽然那个Long running SQL 与统计信息无关,但是我还是提出要确保统计信息的准确性。作为DBA,我必须定制出转载 2013-11-26 21:23:17 · 461 阅读 · 0 评论 -
使用WITH AS 优化SQL
http://blog.csdn.net/robinson1988/article/details/6953019马上就要单身节了,正在想今年我去祸害谁家的姑娘,突然QQ好友发来信息,说能否帮忙优化一个SQL,SQL调优做得实在太多了,都已经麻木了,反正优化一个SQL也就几秒钟到几分钟的事情。哥们说下面的SQL要跑5个多小时[html] view plainco转载 2013-11-29 23:11:25 · 650 阅读 · 0 评论 -
单表收集统计信息
单表收集统计信息:select /*+ dynamic_sampling(t 4) */ * from t where id > 1234原创 2013-12-02 21:19:08 · 718 阅读 · 0 评论 -
不能抛弃的analyze
本文基于Oracle10g。现在收集统计信息有两种方法,一是使用analyze命令,另外就是使用dbms_stats包,Oracle推荐使用dbms_stats来代替analyze。还需要使用Analyze收集统计信息的有:1) 行迁移/行连接 信息。可以查看v$dba_tables.chain_cnt来确定表是否有行连接/行迁移。不过使用dbms_stats无法统计这个信息转载 2013-11-19 15:51:16 · 879 阅读 · 0 评论 -
oracle执行计划说明
如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题。 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以断定是执行计划出了问题。 看懂执行计划也就成了SQL优化的先决条件。 这里的SQL优化指的是SQL性能问题的定位,定位后就可以解决问题。 一.转载 2013-12-26 15:20:06 · 904 阅读 · 0 评论 -
HINT 基本的30个用法
在SQL语句优化过程中,经常会用到hint,下面我们来介绍一下在SQL优化过程中常见Oracle中"HINT"的30个用法:1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化。 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS原创 2013-12-16 11:57:50 · 1664 阅读 · 0 评论 -
DBLINK HINT /*+ driving_site(org) */ 优化策略和思路
使用DBLINK远程访问数据库的优化策略和思路:策略:远程访问,网络传输占很大部分,优化原则,减少网络传输,将小的结果集拉到本地处理;思路1:在远端建立视图;思路2:使用DRIVING_SITE将数据拉到本地处理;优化案例:--create or replace view v_fasp_bjjzzfyszxqkfld2 asselect a.bdgmanagediv原创 2013-12-16 11:35:29 · 11887 阅读 · 0 评论 -
ORACLE Delete/Update 重复记录优化案例
Delete c_ora_group A where stdno in (select stdno from c_ora_group group by stdno having count(stdno)>1) and rowid>(select min(rowid) from c_ora_group B whe原创 2013-10-31 14:40:42 · 1785 阅读 · 1 评论 -
不是笛卡尔积的问题
优化前:explain plan for merge into dw_cmcc_split_detail_t a using (select /*+ opt_param('_optimizer_mjc_enabled', 'false') */t.id, t.cp_id, t.cp_name, t.price from inf_cmcc_split_t t, d原创 2013-12-11 15:50:43 · 639 阅读 · 0 评论 -
Oracle_merge_into 用法详解
Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和updates操作. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表.Oracle 10g中MERGE有如下一些改进:1、UPDATE或INSERT子句是可选的2、UPDATE和INSERT子句可以加WHER原创 2013-12-04 18:01:47 · 571 阅读 · 0 评论 -
HINT收集
1、/*+ FULL(TABLE)*/ 表明对表选择全局扫描的方法. SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT'; 2、/*+ INDEX(TABLE INDEX_NAME) */ 表明对表选择索引的扫描方法. SELECT /*+INDEX(BSEMPMS SEX_INDEX)原创 2013-12-02 21:23:27 · 841 阅读 · 0 评论 -
Oracle中Hint深入理解
Hint概述基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行。例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫转载 2013-12-02 20:48:37 · 10390 阅读 · 0 评论 -
HINT的神奇
橙子和落落帮我优化的SQL,使用HINTSELECT /*+ use_hash(t1,t2) */ T2."TYPE_NAME", SUM(T1."USERS_ACCESS"), SUM(T1."USERS_USE"), SUM(T1."USERS_USE_PAY"), SUM(T1."USE_ACCORD"),原创 2013-12-02 17:57:16 · 771 阅读 · 0 评论 -
NO_MERGE视图合并案例
/*+NO_MERGE(TABLE)*/ 对于有可合并的视图不再合并. 例如: SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO原创 2013-12-02 22:02:02 · 2587 阅读 · 0 评论 -
利用分析函数优化自连接
:[html] view plaincopyprint?select distinct decode(length(a.category_id), 5, decode(a.origin_type, 801, 888888, 99转载 2013-11-30 22:18:33 · 886 阅读 · 0 评论 -
试图合并-分析
今天遇到一个View Merging 的案例具体SQL如下:SELECT /*+ INDEX(d CUST_ASSOC_DNORM_IDX2) */ DISTINCT e.geo_id, d.ctrl_perd cust_ctrl_perd, d.parnt_id cust_idFROM( -- customer list SELECT s.node_i转载 2013-11-26 22:02:40 · 565 阅读 · 0 评论 -
用Merge代替复杂的Update
merge into dw_cmcc_split_detail_t a using ( select t.id, t.cp_id, t.cp_name from inf_cmcc_split_t t,dw_cmcc_split_detail_t t1 where t.id=t1.id ) ng on (ng.id=a.原创 2013-11-12 13:41:26 · 444 阅读 · 0 评论 -
Oracle优化器和优化模式
Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer) 来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。相信你一定会用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First r转载 2013-09-24 16:41:43 · 945 阅读 · 0 评论 -
通过rowid逻辑并行抽取数据
在我们迁移数据,或者进行同步数据的时候,对于应用变更频繁的表进行抽取数据,经常会碰到oracle需要读取回滚段,会导致很慢,有时候甚至会报ora01555错误,比如我们有个表比较大是40G左右,就是一个月的按月分区数据,这个时候如果想尽快抽取数据到另外一个库,有几种方法:方法1: 大家都知道的使用append,然后不写日志,parallel抽取方式:代码类似转载 2013-07-11 18:07:49 · 969 阅读 · 0 评论 -
Oracle统计分析函数集,over(partition by..) 的运用
Oracle统计分析函数集,over(partition by..) 的运用oracle的分析函数over 及开窗函数一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。下面通过几个例子来说明其应用。 1:统计某商店的营业额。 date sa原创 2013-07-10 15:18:32 · 809 阅读 · 0 评论 -
SQL执行计划
在sql plus中,输入set autotrace on ; 直接写条sql,按F5,就可以调出执行计划,但在pl/sql developer 的情况下,只能用下面这个语句了,explain plan for select ....然后再来一句select * from table(dbms_xplan.display());就会出现一个类似下面的信息PLAN_TABLE_O原创 2013-07-25 11:16:08 · 798 阅读 · 0 评论 -
分区索引
本文基于oracle10gR2分区索引分为本地(local index)索引和全局索引(global index)。其中本地索引又可以分为有前缀(prefix)的索引和无前缀(nonprefix)的索引。而全局索引目前只支持有前缀的索引。B树索引和位图索引都可以分区,但是HASH索引不可以被分区。位图索引必须是本地索引。一:本地索引:创建了一个分区表后,如果需要在表上面创建索引,并且索转载 2013-08-26 11:27:29 · 555 阅读 · 0 评论 -
Oracle 分析及动态采样
之前在说Oracle Optimizer中的CBO时讲到,当表没有做分析的时候,Oracle 会使用动态采样来收集统计信息。 获取准确的段对象(表,表分区,索引等)的分析数据,是CBO存在的基石,CBO的机制就是收集尽可能多的对象信息和系统信息,通过对这些信息进行计算,分析,评估,最终得出一个成本最低的执行计划。 所以对于CBO,数据段的分析就非常重要。一. 先演示一个示例,来理解分析的作转载 2013-09-24 17:18:02 · 596 阅读 · 0 评论 -
如何看懂ORACLE执行计划
一、什么是执行计划An explain plan is a representation of the access path that is taken when a query is executed within Oracle.二、如何访问数据At the physical level Oracle reads blocks of data. The smallest amo转载 2013-09-24 17:07:01 · 647 阅读 · 0 评论 -
SQL优化案例(3)
1 索引选择性2 列定义允许null,可能导致Index Hint提升不走索引3 Full Hint4 USE_HASH5 USE_NL6 驱动表7 CURSOR_SHARING,VERSION_COUNT8 ORACLE SQL执行步骤转载 2013-08-14 23:21:01 · 528 阅读 · 0 评论 -
执行计划+光标移动大法——落落
执行计划SQL> grant dba to scott;Grant succeeded.SQL> conn scott/scottConnected.创建测试表testSQL> create table test as select * fromdba_objects;Table created.查看执行计划SQL> explain plan for selec转载 2013-08-14 22:06:06 · 3187 阅读 · 0 评论 -
SQL优化案例(2)
帮哥们优化一个数据仓库的烂SQL利用分区优化SQLVIEW PUSHED PREDICATE(谓词推入)引发的惨剧一次访问ORACLE数据字典的优化使用UNION代替OR 提升查询性能组合索引怎么应该怎么选取引导列?转载 2013-08-14 23:16:32 · 529 阅读 · 0 评论 -
SQL优化案例(1)
利用分析函数优化自连接 http://blog.csdn.net/robinson1988/article/details/7219958一个超超超烂SQL的优化 http://blog.csdn.net/robinson1988/article/details/6886065系统设计时应尽量避免出转载 2013-08-14 22:35:54 · 757 阅读 · 0 评论 -
oracle嵌套循环的执行计划优化
嵌套循环连接处理的两个数据集被称为外部循环(outer loop,也就是驱动数据源,driving row soulce )和内部循环〔 inner loop )。外部循环为左子节点,内部循环为右子节点.如图10 一6 所示,当外部循环执行一次的时候,内部循环需要针对外部循环返回的每条记录执行一次。外部循环称为外表或者驱动表,而内部循环称为内表或者被驱动表嵌套循环连接有以下几点特征:转载 2013-07-17 14:30:13 · 1995 阅读 · 0 评论