PL/SQL批处理语句:BULK COLLECT 和 FORALL对优化的贡献
我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理 这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销 请看下图: 但是,FORALL...
Nested loops、Hash join、Sort merge join(三种连接类型原理、使用要点)
nested loop 嵌套循环(原理):oracle从较小结果集(驱动表、也可以被称为outer)中读取一行,然后和较大结果集(被侦查表,也可以叫做inner)中的所有数据逐条进行比较(也是等值连接,也可以是非等值连接),如果符合规则,就放在结果集中,然后取驱动表的下一条数据继续循环,直到结束。简单的理解就是:从A表抽一条...
如何加快建 index 索引 的时间
朋友在500w的表上建索引,半个小时都没有结束。所以就讨论如何提速。一.先来看一下创建索引要做哪些操作:1. 把index key的data 读到内存==>如果data 没在db_cache 中,这时候很容易有大量的db file scatter read wait2. 对index key的data 作排序==>sort_area_size 或者pga_aggregate_target 不...
虚拟索引
从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个“伪造”的索引,它的定义只存在数据字典中并有存在相关的索引段。虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否改变,执行效率是否能得到提高。一、虚拟索引支持类型虚拟索引支持B-TREE索引和BIT位图索引,在CBO模式下ORACLE优...
普通表转分区表(交换分区、在线重定义)
将普通表转换成分区表有 4 种方法:1. Export/import method2. Insert with a subquery method3. Partition exchange method4. DBMS_REDEFINITION下面我们来讨论:交换分区 Partition exchange method 与 在线重定义 DBMS_REDEFINITION理论背景:交换分区 Partition exchange method:对数据字典中分区和表的定...
Merge into使用详解( 同时执行inserts和updates操作 )
Merge是一个非常有用的功能,类似于MySQL里的insert into on duplicate key.Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A...
MOVE降低高水位 HWM
...
直方图、基数、选择性、群集因子
基本概念 基数(Cardinality) 列唯一键(Distinct_keys)的数量,比如性别,该列只有男女之分,所以这一列基数是2。选择性(Selectivity) 列唯一键(Distinct_Keys)与行数(Num_Rows)的比值。直方图 (Histogram)是一种对数据分布质量情况进行描述的工具。它会按照某一列不同值出现数量多少,以及出现的频率高低...
单机 Oracle 11g(11.2.0.4)手动打补丁PSU(11.2.0.4.8)
环境说明:database : 11.2.0.4 x64os: centos6.7 x64准备内容:OPatch : p6880880_112000_Linux-x86-64.zipDB PSU : p21352635_112040_Linux-x86-64.zip信息检查,查看环境是否符合打该 patch , optch版本安装环境详细请看 mos 与 readme 。-- 查看组件信息set linesize 500 pagesize 60...
图形化升级单机oracle 11.2.0.1 到 11.2.0.4
1. 讲补丁包上传到 oracle server ,解压、安装[root@11g ~]#unzip p13390677_112040_Linux-x86-64_1of7.zip -d /tmp && unzip p13390677_112040_Linux-x86-64_2of7.zip -d /tmp2. 检查当前版本SQL> select * from v$version;BANNER----------------------------------------------------------...
oracle隐含参数的查看与修改
v$parameter视图中查询参数的时候其实都是通过x$ksppi和x$ksppcv这两个内部视图中得到的。 1. 可以通过如下方式查询当前实例的所有隐含参数:col name for a30;col value for a10;selectx.ksppinm name,y.ksppstvl value,y.ksppstdf isdefault,decode(bitand(y.kspp...
Failover 之 Client-Side Connect time Failover、Client-Side TAF、Service-Side TAF
三种 Failover 之 Client-Side Connect time Failover、Client-Side TAF、Service-Side TAF理论背景Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障...
oracle表分区详解(按天、按月、按年等)
分区表的概念: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。分区表的优点:1) 改善...
B-index、bitmap-index、text-index使用场景详解
索引的种类:B-tree索引、Bitmap索引、TEXT index1. B-tree索引介绍: B-tree 是一种常见的数据结构,也称多路搜索树,并不是二叉树。B-tree 结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。适用场景:索引字段有着很高的selectivity或者结果集很小的时候。例如 身份证号码 手机号...
等待事件分析
在Oracle 10g中的等待事件有872个,11g中等待事件1116个。 我们可以通过v$event_name 视图来查看等待事件的相关信息。1.1 查看v$event_name视图的字段结构:SQL> desc v$event_name Name --------------------------- EVENT# EVENT_ID NAME PARAMETER1 PARAMETER2 P...
Oracle Hints详解
在向大家详细介绍Oracle Hints之前,首先让大家了解下Oracle Hints是什么,然后全面介绍Oracle Hints,希望对大家有用。基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。此时就需要DBA进行人为的...
执行计划-数据访问方式(全表扫描与4种索引的方式)
执行计划Oracle执行计划的相关概念: Rowid:系统给oracle数据的每行附加的一个伪列,包含数据表名称,数据库id,存储数据库id以及一个流水号等信息,rowid在行的生命周期内唯一。 Recursive sql:为了执行用户语句,系统附加执行的额外操作语句,譬如对数据字典的维护等。 Row source(行源...
latch: cache buffers chains故障处理总结(转载)
一大早就接到开发商的电话,说数据库的CPU使用率为100%,应用相应迟缓。急匆匆的赶到现场发现进行了基本的检查后发现是latch: cache buffers chains 作祟,处理过程还算顺利,当时忘了记录log,这里总结下处理思路,以便下次查看。故障分析思路 查看等待事件,判断故障起因SQL>select * from (select si...
锁的种类,阻塞,死锁产生与解决办法。
TM锁的种类: TM锁几种模式的互斥关系:阻塞定义:当一个会话保持另一个会话正在请求的资源上的锁定时,就会发生阻塞。被阻塞的会话将一直挂起,直到持有锁的会话放弃锁定的资源为止。4个常见的dml语句会产生阻塞INSERTUPDATEDELETESELECT…FOR UPDATE ——...
10046事件跟踪会话sql
一: 跟踪当前会话sql1. sys用户给执行跟踪dblink用户授权SQL> grant alter session to dblink;Grant succeeded.2. 返回dblink用户操作 SQL> show user;USER is "DBLINK"3. 查询sid,serial#SQL> select sid,serial# from v$session where username='DBLINK'; &n...