首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

经典案例:如何优化Oracle使用DBlinkSQL语句

Oracle中这样等待事件是:SQL*Net message from DBLINK。 正巧,前段时间我们Oracle生产库正好也碰到了这样几条类似的SQL。...所以,今天向大家分享一下,一次针对Oracle中使用DBLINKSQL语句优化思路分析过程。 发现问题 首先从EMCC监控上,发现一条SQL语句执行好长时间没有执行完毕。 ?...看第3步NESTED LOOPS,Starts*E-Rows=1*2=2,而A-Rows=926K,我们说Starts*E-Rows值和A-Rows值应该相等或者相差不多,再看第8REMOTE...接下来再看第5VIEW操作,执行1次,估行行为5754,实际行为66165,这个相差10倍左右,估计还有优化空间。...通过上面的执行计划,大家可以看出Starts、E-Rows、A-Rows值都变得很小了,A-Time值为1~2毫秒。

2.9K90

见微知著:一条 SQL 性能问题引发核心系统悲剧

第一篇为:性能为王:SQL标量子查询优化案例分析 第二篇为:SQL审核:OR展开与子查询优化案例详解 本篇为系列案例之三:IN子查询返回结果集很小 这是不久前在一个客户现场遇到一条 SQL 性能问题...,此 SQL 子查询结果集返回最多10,但是整个 SQL 性能却不好,此 SQL 最后还导致了一个核心系统故障,引起了一个悲剧事情。...在整个 SQL 中,就只存在2处过滤信息,一个是 redu_owner_id,一个是 status_cd。...基础信息分析 在 V$SQL 中查看每个 child 统计信息 这里看到,存在两个子游标,他们执行计划相等,但是两个子优化性能相差很大,并且性能不好子优化执行次数很多。...在上面我们提到主查询就只存在两个过滤条件。执行计划+谓词信息可以看到驱动表使用那个列来过滤数据。

79160
您找到你想要的搜索结果了吗?
是的
没有找到

数据库 IO 到底有多慢?

用国际标准 TPCH 工具生成数据表,选用其中 customer 表,3000 万,8 个字段。生成原始文本文件有 4.9G。将这些数据导入到 Oracle 和 MySQL 中。...硬件环境是单台 2CPU 共 16 核服务器,文本文件和数据库都在 SSD 硬盘上。所有测试都在本机完成,没有实质上网络传输时间。...将整个 3000 万表全部读出,Oracle 大约耗时 280 秒,平均每秒 10 万,MySQL 约 380 秒,平均每秒 8 万。...读完 3000 万仅用了 42 秒。比 Oracle 快了 6 倍多,比 MySQL 快了 9 倍!...事实上,如果用 SQL 针对这个数据表做一次遍历式聚合运算,返回很小结果集,就会发现速度也挺快,会比基于文本文件上做同样运算快得多。

14921

MySQL相关

Oracle:从右往左去执行WHERE条件。 结论:写WHERE条件时候,优先级高部分要去编写过滤力度最大条件语句。...SQL查询执行时间 * 第二,执行SQL查询连接信息,用户和连接IP * 第三,记录了一些我们比较有用信息,如下解析 Query_time,这条SQL执行时间,越长则越慢 Lock_time...④ Serializable (串行化):可避免脏读、不可重复读、幻读发生。 默认隔离级别 大多数数据库默认隔离级别是Read committed,比如Oracle、DB2等。...级锁定(row-level) 级锁定最大特点就是锁定对象颗粒度很小,也是目前各大数据库管理软件所实现锁定颗粒度最小。...虽然能够在并发处理能力上面有较大优势,但是级锁定也因此带来了不少弊端。由于锁定资源颗粒度很小,所以每次获取锁和释放锁需要做事情也更多,带来消耗自然也就更大了。

46610

Oracle优化05-执行计划

生成SQL执行计划时Oracle在对SQL做硬分析时一个非常重要步骤,它制定出一个方案告诉Oracle在执行这条SQL时以什么样方式访问数据: 索引扫描? 全表扫描?...大致意思是: 从T2表读取第一数据 是否符合条件 如果符合就拿出一来,然后到索引IND_T1 中找到对应值,然后重复,直到把整个T2表全表扫描完,这个过程就叫NESTED LOOPS ....Rows 列: 就是当前操作cardinality,Oracle估算当前操作返回结果集 Cost(cpu): Oracle计算出来一个数值(代价),用于说明SQL执行代价 Time列: Oracle...估算当前操作时间。...filter,表示谓词条件值并不会影响数据访问路径,只起到过滤作用。

74910

SQL基础-->分组与分组函数

|ALL]n) -- 求平均值,忽略空值 COUNT({*|[DISTINCT|ALL]expr}) -- 统计个数,其中expr用来判定非空值(使用*计算所有选定,包括重复和带有空值)...GROUP BY 列可以不出现在分组中 七、分组过滤: 使用having子句 having使用情况: 已经被分组 使用了组函数 满足having子句中条件分组将被显示 八、演示:*...,count(expr)过滤空值,count(distinct expr)即过滤空值,也过滤重复SQL> select count(*),count(mgr),count(distinct mgr...(SAL)) ------------- 2916.66667 /* 九、更多 */ Oracle 数据库实例启动关闭过程 Oracle 10g SGA 自动化管理 使用OEM,SQL*Plus...,iSQL*Plus 管理Oracle实例 Oracle实例和Oracle数据库(Oracle体系结构) SQL 基础-->常用函数 SQL基础-->过滤和排序 SQL 基础-->SELECT 查询

3.2K20

深入并行:从数据倾斜到布隆过滤深度理解Oracle并行

每个蓝色 PX 进程重复扫描 customer, 并行扫描lineorder_skew 时, 是采用基于地址区间 granule 为扫描单位, 见第 7 ’PX BLOCK ITERATOR’....实例2蓝色 PX 进程p001消耗了57.1秒db time, sql执行时间58秒,这个PX进程在sql过程中一直是活跃状态....根据集合元素个数, 合理设置 数组大小 m, 可以把错误判断几率控制在很小范围之内。 布隆过滤对 hash join 性能改进 布隆过滤优势在于使用很少内存, 就可以过滤大部分数据....我们观察 使用布隆过滤和不使用布隆过滤时性能差别. SQL 执行时间为 1 秒, db time 为 7.9 秒. 优化器默认选择 replicate 方式....SQL 执行顺序为每个 PX 进程重复扫描 customer表(第7),对符合c_nation=’CHINA’数据集, 60K(240K/4)记录,在c_custkey列生成布隆过 滤:BF0000

2.1K90

sql优化几种方法面试题_mysql存储过程面试题

,因为大部分数据更新需要同时更新索引) 唯一索引可以确保每一数据唯一性,通过使用索引,可以在查询过程中使用优化隐藏器,提高系统性能 索引需要占物理和数据空间 索引分类: 唯一索引:唯一索引不允许两具有相同索引值...PRIMARY KEY: 也是用于控件字段内容不能重复,但它在一个表只允许出现一个。...数据库采用自右而左顺序解析WHERE子句,根据这个原理,表之间连接必须写在其他WHERE条件之左,那些可以过滤掉最大数量记录条件必须写在WHERE子句之右。...但是它要通过查询数据字典完成,这意味着将耗费更多时间 使用*号写出来SQL语句也不够直观。 ④用TRUNCATE替代DELETE 这里仅仅是:删除表全部记录,除了表结构才这样做。...⑨SQL写大写 我们在编写SQL 时候,官方推荐是使用大写来写关键字,因为Oracle服务器总是先将小写字母转成大写后,才执行 ⑩避免在索引列上使用NOT 因为Oracle服务器遇到NOT后,

76120

SQL优化

SQL书写习惯 SQL语句尽量使用大写。 Oracle解析SQL语句时,会把小写字母转换成大写再执行。...例:select *from tempagreement where rownum<10; SELECT * FROM TEMPAGREEMENT WHERE ROWNUM<10; 两句查询相差0.5...Oracle从右到左处理FROM子句中表名,所以在FROM子句中包 含多个表情况下,将记录最少表放在最后。 WHERE语句条件顺序。...索引不足: Ø 创建索引和维护索引要耗费时间,这种时间随着数据量增加而增加 Ø 索引需要占物理空间 Ø 当对表中数据进行增加、删除和修改时候,索引也会动态维护,这样就降低了数据更速度 索引限制...Ø 如果是组合索引,总是使用索引第一列。只有第一列被WHERE子句引用时,优化器才会选择使用该索引。当引用索引第二列时,优化器使用全表扫描而忽略了索引。

85730

第一章 Oracle Database In-Memory 相关概念(IM-1.1)

例如,更新少量所有列可以修改少量块。 为了解决与分析查询相关问题,一些数据库供应商引入了列格式。 列式数据库存储选定列,而不是连续。...高级查询优化 Database In-Memory包括针对分析查询多个性能优化。 优化包括: 表达式是一个或多个值、运算符和SQL函数(DETERMINISTIC)组合,可解析为值。...数据不会保留在数据文件中(或生成redo),因此数据库避免了将数据从磁盘读入缓冲区高速缓存开销。 数据修剪 数据库扫描查询所需列,而不是整个数据。...Bloom过滤器通过将小维度表上谓词转换为大型实体表上过滤器来加速连接。 当使用一个大实体表执行多个维度联接时,此优化很有用。 实体表上维度键有很多重复值。...扫描性能和重复值优化加快连接数量级。 提高聚合性能 分析一个重要方面是通过聚合数据来确定模式和趋势。 当数据存储在IM列存储中时,聚合和复杂SQL查询运行速度更快。

1.2K50

Mysql基础

因此尽量使用 SQL 语句来过滤不必要数据,而不是传输所有的数据到客户端中然后由客户端进行过滤。...SELECT col, COUNT(*) AS num FROM mytable GROUP BY col ORDER BY num; WHERE 过滤,HAVING 过滤分组,过滤应当先于分组过滤...按使用方式分:悲观锁、乐观锁) 19 常用数据库默认隔离级别(mysql:可重复oracle:读已提交 SQLServer:读已提交) 20 Oracle高水位理解(Oracle段(segments...)就像水库记录历史水位,一般不会下降,使用truncate命令可以置零) 21 内连接外连接区别(内:指连接结果包含符合连接条件,参与连接两个表都应该符合连接条件 外:连接结果不仅包含符合连接条件行同时也包含自身不符合条件...23 mysql数据库优化(explain写SQL、只要一数据用limit 1、使用enum而不是varchar、固定长度表会更快、分库分表)

1.8K00

SQL优化法则小记

* ‘: oracle在解析过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数 据字典完成, 这意味着将耗费更多时间. 4.减少访问数据库次数: oracle...次数据库访问检索数据量 ,建议值为200 6.使用 decode函数来减少处理时间: 使用 decode函数可以避免重复扫描相同记录或重复连接相同表. 7.删除重复记录: 最高效删除重复记录方法...这也是一条简单而重要规则,当引用索引 第二个列时,优化器使用了全表扫描而忽略了索引. 28.用 union-all替换 union( 如果有可能的话): 当 SQL 语句需要 union 两个查询结果集合时...为了避免oracle对你SQL隐式类型转换, 最好把类型转换用显式表现出来....需要一次排序操作, 而其他至少需要执 两次排序.

2K90

Oracle优化器之自动重新优化(Automatic Reoptimization)功能

概述 通过12c自动重新优化(Automatic Reoptimization 以后简称AR)功能, Oracle进一步扩展和增强了11gR2版本基数反馈(CFB)功能,来重新优化重复执行SQL...SQL文第一次执行时,Oracle会监控操作实际行数(A-Row),然后对比CBO估算行数(E-Row)。2. 如果两个值相差很大,就记录实际行数(A-Row),做上标记。...如果两个值相差不大,CBO就不再监控这条SQL语句。...SQL文根据预估并行度(DOP 1)进行执行,并在执行时监控操作性能信息(如CPU时间等), 然后根据实际性能信息计算出一个新并行度(记为DOP 2).3....Oracle会比较预估并行度(DOP 1)和实际性能信息计算并行度(记为DOP 2)。 如果两个值相差很大,就记录实际性能信息,并做上标记。4.

70810

Mysql基础

因此尽量使用 SQL 语句来过滤不必要数据,而不是传输所有的数据到客户端中然后由客户端进行过滤。...SELECT col, COUNT(*) AS num FROM mytable GROUP BY col ORDER BY num; WHERE 过滤,HAVING 过滤分组,过滤应当先于分组过滤...按使用方式分:悲观锁、乐观锁) 19 常用数据库默认隔离级别(mysql:可重复oracle:读已提交 SQLServer:读已提交) 20 Oracle高水位理解(Oracle段(segments...)就像水库记录历史水位,一般不会下降,使用truncate命令可以置零) 21 内连接外连接区别(内:指连接结果包含符合连接条件,参与连接两个表都应该符合连接条件 外:连接结果不仅包含符合连接条件行同时也包含自身不符合条件...23 mysql数据库优化(explain写SQL、只要一数据用limit 1、使用enum而不是varchar、固定长度表会更快、分库分表)

1.5K00

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day39】—— 数据库6

,但是大多链接 state 其实是 Sleep ,这种其实是空闲状态,没有太多查看价值;我们要观察是有问题,所以可以进行过滤: -- 查询非 Sleep 状态链接,按消耗时间倒序展示,自己加条件过滤...,然后按照消耗时间倒叙展示,排在最前面的,极大可能就是有问题链接了,然后查看 info 一列,就能看到具体执行什么 SQL 语句了,针对分析。   ...优点 在数据库中集中业务逻辑 我们可以使用存储过程来实现可被多条SQL业务逻辑,存储过程有助于减少在许多应用程序中重复相同逻辑工作。...不幸是,MySQL没有像其他企业数据库产品(如OracleSQL Server)那样提供任何调试存储过程功能。...如果你系统很小,并且有50%开发人员熟练掌握PL/SQL,人员结构稳定,那存储过程可以减少很多代码量,并且性能不错。当系统变复杂了,开发人员多了,存储过程弊端就会呈现,这时你需要痛下决心了。

88820

一脸懵逼学习oracle

,结构化查询语言首字母缩写词; (2):sql是数据库语言,oracle使用该语言存储和检索信息; (3):通过sql可以实现与oracle服务器通信; (4):表示主要数据库对象,用于存储数据;...,包括年,月,日,小时,分钟,秒 主要日期时间类型有: Date:存储日期和时间部分,精确到整个秒TIMESTAMP,存储日期,时间和时区信息,秒值精确到小数点后6位;    11:其他数据类型...数据操纵语言命令包括:   (1)select:       a:利用现有的表创建新表         create table 新表表名 as select * from 老表表名称       b:选择无重复...,各子句一般要分行写; 3:连接列符号||:select user_id||user_name from users;  16:过滤where和运算符 1:使用where子句,将不满足条件过滤掉...;           两个日期相减返回日期之间相差天数;     (5):日期函数        MONTHS_BETWEEN两个日期相差月数        ADD_MONTHS向指定日期加上若干月数

2K70

明理知意:复合索引优化及索引访问原理

Note: cpu costing is off 从中可以看到,Oracle评估出,利用索引扫描返回行数高达100万,可想而知,由于选择率过高,产生了大量buffers...而实际上回表之后用STAFF_ID和OPERATION_TYPE列上条件过滤行数约2万(这是评估数据,实际数据远远比这个少)。...下面我们做一个简单测试,测试数据库版本为Linux AS4上Oracle 10.2.0.4: --创建一个只有2列、4表: SQL> create tablet1 as select object_id...从上面的测试可以看到,对即使是很小表,如果返回数据量很小,使用索引都能够减少逻辑读,从而具有更好性能。 索引是始终保持平衡。...由于Oracle索引这个特性,使得IS NULL这种条件SQL不能够使用索引。但是我们可以通过建复合索引形式来使这种SQL也能够使用索引。

1K70

Oracle优化07-分析及动态采样-动态采样

> 在没有做动态分析情况下,CBO 估计记录数是 12498 条,与真实 35249相差甚远。...可能看出 2 个执行计划差别。 在没有采用动态分析情况下, CBO 对 t 表估计还是 12498 记录,但是用动态分析就显示 1 条记录。 而表中数据在查询之前已经删除掉了。...( 2) 表每个列最大值,最小值,重复率,也可能包含直方图。 ( 3) 索引聚合因子,索引叶块数目, 索引高度等。...我们从表中数据可以推断出,其实是不存在这种这种数据,结果为0。 我们来看下CBO估算结果集表现 8467 ,和0天相差甚远了…. 那么CBO是如何估算呢?...那我们来看下动态采样效果吧 ? 此时 CBO估算结果集是1,和实际数0 非常相近了。 由于结果集很小,所以执行计划选择了索引,这才是最优执行计划。

42520

常与无常:SQL语句中常量处理及性能差异解析

,但是两者执行时间相差了将近一倍。...执行全表扫描时,Oracle会根据等式条件对表中每条记录进行过滤,对于等式1和等式2而言,Oracle进行只是一个比较操作。...SQL> insert into tselect * from t; 已创建12546SQL> insert into tselect * from t; 已创建25092。...SQL> insert into tselect * from t; 已创建50184SQL> insert into tselect * from t; 已创建100368。...它们执行计划也完全一样,都是全表扫描,然后分别执行这些语句并记录所需时间。 为了避免数据缓存带来误差,每个SQL都执行两次,这里列出都是第二次执行时间。 语句1:推荐写法,也是标准写法。

1.1K90
领券