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

【DB笔试面试581】在Oracle,绑定变量是什么?绑定变量有什么优缺点?

因为同一条SQL语句仅仅由于谓词部分变量不同而在执行时候就需要重新进行一次解析,造成SQL执行计划不能共享,这极大地耗费了系统时间和系统CPU资源。...这里同一类型SQL语句指的是除SQL文本对应输入不同外其它部分都一模一样SQL语句。例如,银行查询余额SQL语句,在成千上万次查询中都只是账户名不同,而SQL语句其它部分都一样。...绑定变量通常出现在SQL文本,用于替换WHERE或VALUES子句中具体。 绑定变量优点如下所示: ① 可以在库缓存(Library Cache)中共享游标,避免解析以及之相关额外开销。...③ 提高了代码可读性(避免拼接式编码)和安全性(防止SQL注入)。 绑定变量缺点主要体现在当使用绑定变量时,查询优化器会忽略其具体,因此,其预估准确性远不如使用字面量值真实。...需要注意是,目标SQL绑定变量个数不宜太多,否则可能会导致目标SQL执行时间大幅度增长。

2.5K20

OracleAWR报告分析

第三步输入开始结束:(你可以看到上面列出数据,snap) 这个输入开始,结束 第四步输入导出表名称:名称自定义 回车 第五步,由程序自动导完。...Parse CPU to Parse Elapsd 说明在解析sql语句过程,cpu占整个解析时间比例,,期望是100%,说明没有产生等待,需要说明是,即使有解析,只要cpu没有出现性能问题,...可以看出,在整个sql执行时间sql execute elapsed time)时间为5552019秒,解析时间(parse time elapsed)用了36秒,解析时间(hard parse...elapsed time)用了34秒虽然解析时间占了整个解析时间绝大部分,但解析时间很少,所以可以判断出,sql解析没有成为性能瓶颈,进一步推测,sql在获取数据过程遇到了瓶 颈...等待次数,时间,频率都是最高,我们重点看逻辑读,物理读,和执行时间最长sql,把排在前几位拿出来优化 优化原则为降低物理读,逻辑读,sql语句中操作执行次数尽量少,在看oracle估计出来执行计划是看不出操作执行次数

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

【DB笔试面试579】在OracleSQL解析过程解析、软解析和软软解析区别有哪些?

♣ 题目部分 在OracleSQL解析过程解析、软解析和软软解析区别有哪些?...如果在库缓存找不到匹配父游标,那么Oracle就会新生成一个会话游标和一对共享游标(即父游标和游标);如果找到了匹配父游标,但找不到匹配游标,那么Oracle就会新生成一个会话游标和一个游标...解析实际上有两种类型:一种是在库缓存找不到匹配父游标(Parent Cursor),此时Oracle会从头开始解析目标SQL,新生成一个父游标和一个游标,并把它们挂在对应HashBucket...,并发数量很少,目标SQL也很少被并发重复执行,而且在执行目标SQL解析所耗费时间和资源SQL执行时间和资源消耗相比是微不足道,这种情况下用解析是没问题,此时解析对系统性能影响微乎其微...而软解析是不需要持有Shared Pool Latch,所以软解析比起来,解析持有Library Cache Latch时间会更长,当然对Library Cache Latch争用程度就会更严重

1.4K20

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

Oracle这样等待事件是:SQL*Net message from DBLINK。 正巧,前段时间我们Oracle生产库正好也碰到了这样几条类似的SQL。...可想而知,在当前高并发情况下,这样一条SQL语句很长时间执行不完也就不足为奇了,整个过程如下图所示。 ?...我都不敢想…… 总体上看,加一个no_mergeHint,先是让SQL执行时间原先相比降低了好多。...然而只需4毫秒就显示查询结果,带统计信息执行计划如下图所示, ? 接下来,我和开发同事进行了沟通并把我改写后SQL发给他,他测试运行和原先SQL相比,也认为在运行时间上差了一个数量级。...第三天,再次查看相应时间DBLINK等待事件总数,发现原来相比已经降低了很多。 ? 再查看SQL_ID为a50rh3659p44qSQL在相应对间段执行次数,见下图。 ?

2.9K90

深入解析:由SQL解析失败看开发DBA性能之争

这个时间 TOP 5 等待事件 latch: library cache kksfbc child completion 排在前列,library cachelatch 占到将近有 70%。...数据库正常时间解析也只有不到 5%左右,也就是解析没有大变化,但是解析失败确认翻了几倍。是什么原因导致这么多解析失败呢?另外解析失败 SQL 是否会导致大量 latch 竞争?...父游标游标结构是一样,区别在于 sql 文本存储在父游标对应对象句柄,而 sql 执行计划等信息存储在游标对应库缓存对象句柄 heap 6 。...通过以上测试我们很容易找到 sql 父游标的句柄还有游标的句柄在内存地址。 下面做另外一个简单测试解析错误 SQL 是否有父游标还有游标生成。...回顾以下SQL 解析过程需要获取latch.

1.6K50

【重磅推荐】从Library Cache等待事件深入剖析SQL解析

这个时间 TOP 5 等待事件 latch: library cache kksfbc child completion 排在前列,library cachelatch 占到将近有 70%。...数据库正常时间解析也只有不到 5%左右,也就是解析没有大变化,但是解析失败确认翻了几倍。是什么原因导致这么多解析失败呢?另外解析失败 SQL 是否会导致大量 latch 竞争?...当 sql 执行时候,首先会对 sql 文本进行 hash 运算然后根据 hash 去相关 hash bucket 遍历,如果找到了就直接用该 sql 缓存执行计划等,如果找不到则从头解析,并把解析后执行计划等缓存在...父游标游标结构是一样,区别在于 sql 文本存储在父游标对应对象句柄,而 sql 执行计划等信息存储在游标对应库缓存对象句柄 heap 6 。...回顾一下,SQL 解析过程需要获取latch.

1.1K40

绑定变量及其优缺点

绑定变量是Oracle解决解析首要利器,能解决OLTP系统library cache过度耗用以提高性能。然刀子磨太快,使起来锋利,却容 易折断。...本文讲述了绑定变量使用方法,以及绑定变量优缺点、使用场合。 一、绑定变量     提到绑定变量,就不得不了解解析软解析。...而软解析呢,则是由于在library cache已经存在SQL语句一致SQL语句文本 、运行环境,即有相同父游标游标,采用拿来主义,直接执行即可。...有关更多解析软解析以及父游标,游标请作如下参考:     有关解析软解析,请参考:Oracle 解析软解析     有关父游标、游标,请参考:父游标、游标与共享游标    ...> select sql_id,hash_value,child_number,sql_text from v$sql -->查询视图v$sql查看该SQL对应游标,且CHILD_NUMBER为0

1.4K20

【DB笔试面试586】在Oracle,什么是自适应游标共享(1)?

Oracle 10g及其后续版本Oracle会自动收集直方图统计信息,这意味着之前版本相比,在Oracle 10g及其后续版本Oracle有更大概率会知道目标列实际数据分布情况,也就是说绑定变量窥探副作用将会更加明显...总的来说,Oracle会根据执行目标SQL时所对应runtime统计信息(比如所耗费逻辑读和CPU时间,对应结果集行数等)变化,以及当前传入绑定变量输入所在谓词条件可选择率,来综合判断是否需要触发目标...先介绍Oracle数据库自适应游标共享相关一些基本概念。...从查询结果也可以看到,目标SQL对应IS_BIND_SENSITIVE为Y,IS_BIND_AWARE为N,IS_SHAREABLE为Y,之前比这些均没有发生变化。...对应列VERSION_COUNT从之前1变为现在2,列EXECUTIONS为3,说明Oracle在第三次执行该SQL时确实用解析。

65220

查询优化器基础知识—SQL语句处理过程

此哈希Oracle 数据库版本是确定性,因此单个实例或不同实例相同语句具有相同 SQL ID。...SQL语句哈希以下不同: 语句内存地址 Oracle 数据库使用 SQL ID 在查找表执行键值读取。这样,数据库就可以获得语句可能内存地址。...Latch争用会增加语句执行时间并降低并发性。 软解析 软解析是任何不是解析解析。 如果提交语句与共享池中可重用SQL语句相同,则Oracle Database将重用现有代码。...唯一例外是 DDL 包含 DML 组件,例如需要优化查询。 3.1.3 SQL行源生成 行源生成器是从优化器接收最佳执行计划并生成可由数据库其余部分使用迭代执行计划软件。...3.2.2 读取一致性 通常,查询使用 Oracle 数据库读取一致性机制检索数据,该机制可确保查询读取所有数据块单个时间点保持一致。 读取一致性使用 undo 数据来显示过去数据版本。

3.9K30

Oracle 解析软解析

--======================= -- Oracle 解析软解析 --======================= Oracle 解析软解析是我们经常遇到问题,什么情况会产生硬解析...通常情况下,SQL语句执行过程如下: a.SQL代码语法(语法正确性)及语义检查(对象存在性权限)。 b.将SQL代码文本进行哈希得到哈希。...,下面的查询,尽管其where子句empno不同,Oracle同样为其生成了不同执行计划 select * from emp where empno=7369 select * from emp...五、编码解析改进方法 1.更改参数cursor_sharing 参数cursor_sharing决定了何种类型SQL能够使用相同SQL area CURSOR_SHARING = { SIMILAR...| EXACT | FORCE } EXACT --只有当发布SQL语句缓存语句完全相同时才用已有的执行计划。

87230

【DB笔试面试585】在Oracle,什么是常规游标共享?

♣ 答案部分 游标共享(Cursor Sharing)是指共享游标(Shared Cursor)之间共享,游标共享可以实现重用存储在游标(Child Cursor)解析树和执行计划而不用从头开始做解析...Oracle数据库典型不安全谓词条件有范围查询(使用了>、>=、<、<=、BETWEEN谓词条件),使用了带通配符(%)LIKE,以及对有直方图统计信息目标列施加等值查询等。...在Oracle 12c以及后续版本SIMILAR将过时,不再被继续支持。因为当CURSOR_SHARING设成SIMILAR后会带来一系列问题,并且有太多与SIMILAR相关Bug。...EXACT,所以Oracle不会用系统产生绑定变量来替换上述SQLWHERE条件输入,而上述两个SQLWHERE条件输入并不相同(一个是0,另一个是1),即意味着这两个SQL在执行时均会使用解析...l 如果想在不改一行应用代码情况下,使那些仅仅是SQL文本WHERE条件或者VALUES子句(适用于INSERT语句)具体输入不同目标SQL共享解析树和执行计划,以达到有效降低系统解析数量目的

84440

【MOS】library cache lock 等待事件 原因和解决方案 (Doc ID 2896611.1)

风险细节: ; 保持太多对象并且不定期检查将会增加发生ORA-4031风险。...这将导致游标在下一次执行时被解析,并会影响 CPU 和发生锁竞争。 确认方法 TKProf: 分析解析时间进行排序信息。...SQL 通过用绑定变量重写 SQL 语句,会将仅条件不同 SQL 语句视为相同和可以共享,这是促使在 library cache SQL 语句共享最佳方式。...或者,也可以查询 V 查询 VSQLAREA视图确认是否有versioncount大于500SQL语句。查询VSQL_SHARED_CURSOR 视图检查SQL没有共享原因。...这可以防止使用不适合执行计划。例如,如果指定了使用“>”范围条件,那么指定范围会根据指定条件而改变,并影响成本和执行计划,因此如果指定了不同,则会生成一个新游标。

24710

Oracle数据库性能优化(Hbase是什么数据库)

第三多表查询查询,第四尽量使用绑定。...这个SQL平均4个IO(3个索引IO+1个数据IO) IO缓存命中率75%(索引全在内存,数据需要访问磁盘) SQL解析CPU消耗:1ms (常用经验)...SQL软解析CPU消耗:0.02ms(常用经验) 假设CPU每核性能是线性增长,访问内存CacheIO时间忽略,要求计算系统对如上应用采用解析采用软解析支持每秒最大并发数:...一些无需使用绑定变量场景: a、数据仓库应用,这种应用一般并发不高,但是每个SQL执行时间很长,SQL解析时间相比SQL执行时间比较小,绑定变量对性能提高不明显。...采用绑定变量的话,那么只会有一个执行计划,如果走索引访问,那么对于审核查询很快,对审核通过和审核不通过会很慢;如果不走索引,那么对于审核审核通过和审核不通过时间基本一样; 对于这种情况应该不使用绑定变量

1.2K30

【错综复杂】一个执行计划异常变更案例(

绑定变量窥探则是第一次执行SQL解析时,会窥探使用绑定变量值,根据该分布特征,选择更合适执行计划, 其缺点在于如果绑定变量列分布不均匀,由于只有第一次解析才会窥探,所以可能接下来SQL执行会选择错误执行计划...我们此时换一下绑定变量值,发现v$sql_bind_capture信息未变,dbsnake书中曾说过当SQL执行解析时绑定变量值被捕获,并可从视图v$sql_bind_capture查询。...记录这次解析时间为T1,时间为Tmax。但此时,仍是重用了已有游标,不会做解析,不会使用更新统计信息来生成一个新执行计划。...有人曾说过,11g未必会按照_optimizer_invalidation_period参数定义时间产生新游标,我上面用环境是11g,确实如此,等了2分钟,执行目标SQL,仍只有一个游标。...又等了一段时间,再查询V$SQL, ?

86750

数据库SQL优化大总结1之- 百万级数据库优化方案

这个SQL平均4个IO(3个索引IO+1个数据IO) IO缓存命中率75%(索引全在内存,数据需要访问磁盘) SQL解析CPU消耗:1ms (常用经验SQL软解析CPU消耗:0.02ms(常用经验...) 假设CPU每核性能是线性增长,访问内存CacheIO时间忽略,要求计算系统对如上应用采用解析采用软解析支持每秒最大并发数: 是否使用绑定变量CPU支持最大并发数磁盘IO支持最大并发数不使用...所以如果你系统CPU有瓶颈时请先检查是否存在大量解析操作。 使用绑定变量为何会提高SQL解析性能,这个需要从数据库SQL执行原理说明,一条SQLOracle数据库执行过程如下图所示: ?...一些不使用绑定变量场景: a、数据仓库应用,这种应用一般并发不高,但是每个SQL执行时间很长,SQL解析时间相比SQL执行时间比较小,绑定变量对性能提高不明显。...以下列出了可能会发生排序操作SQL语法: Order by Group by Distinct Exists查询 Not Exists查询 In查询 Not In查询 Union(并集),Union

5.5K90

父游标、游标及共享游标

有关游标的定义,声明,使用请参考:PL/SQL 游标             有关解析软解析请参考:Oracle 解析软解析 一、相关定义         shared cursor                ...其元数据被在视图V$sqlareav$sql具体化。如果library cache父游标游标能够被共享,此时则为共享游标。...将该游标(SQL语句)文本进行哈希得到哈希并在library cache寻找相同哈希,如不存在则生存父游标且保存在library cache,按顺序完成D-F步骤。...可以在v$sqlarea, v$sql得到具体游标信息,父子游标通过sql_id关联对于仅仅完成步骤ABSQL语句即为软解析,否则即为解析 三、shared cursorsession cursor...v$sql 每一行表示了一个child cursor,根据hash value和addressparent cursor 关联。

1.5K30

父游标、游标及共享游标

有关游标的定义,声明,使用请参考:PL/SQL 游标             有关解析软解析请参考:Oracle 解析软解析 一、相关定义         shared cursor                ...其元数据被在视图V$sqlarea                 v$sql具体化。如果library cache父游标游标能够被共享,此时则为共享游标。...将该游标(SQL语句)文本进行哈希得到哈希并在library cache寻找相同哈希,如不存在则生存父游标且保存在library cache                 ,按顺序完成D-F...可以在v$sqlarea, v$sql得到具体游标信息,父子游标通过sql_id关联         对于仅仅完成步骤ABSQL语句即为软解析,否则即为解析 三、shared cursorsession...,如经常变动SQL语句,或动态SQL或未使用绑定变量等         2、解决解析办法则通常是使用绑定变量来解决         3、父游标SQL文本完全一致情形下,多个相同SQL语句可以共享一个父游标

1.5K20

Oracle 性能优化总结

这个SQL平均4个IO(3个索引IO+1个数据IO) IO缓存命中率75%(索引全在内存,数据需要访问磁盘) SQL解析CPU消耗:1ms (常用经验SQL软解析CPU消耗:0.02ms(常用经验...) 假设CPU每核性能是线性增长,访问内存CacheIO时间忽略,要求计算系统对如上应用采用解析采用软解析支持每秒最大并发数: 是否使用绑定变量CPU支持最大并发数磁盘IO支持最大并发数不使用...所以如果你系统CPU有瓶颈时请先检查是否存在大量解析操作。 使用绑定变量为何会提高SQL解析性能,这个需要从数据库SQL执行原理说明,一条SQLOracle数据库执行过程如下图所示: ?...一些不使用绑定变量场景: a、数据仓库应用,这种应用一般并发不高,但是每个SQL执行时间很长,SQL解析时间相比SQL执行时间比较小,绑定变量对性能提高不明显。...以下列出了可能会发生排序操作SQL语法: Order by Group by Distinct Exists查询 Not Exists查询 In查询 Not In查询 Union(并集),Union

2.2K21

rolling invalidation对子游标产生影响

10g之后,如果采集对象统计信息使用no_invalidate参数是auto_invalidate,则Oracle会采用如下操作,来缓解可能解析风暴。...记录这次解析时间为T1,时间为Tmax。但此时,仍是重用了已有游标,不会做解析,不会使用更新统计信息来生成一个新执行计划。...如果Tmax已经超过了,则会让此游标失效,创建一个新版本(一个新child cursor游标),使用更新执行计划,并且新游标会标记V$SQL_SHARED_CURSORROLL_INVALID_MISMATCH...有人曾说过,11g未必会按照_optimizer_invalidation_period参数定义时间产生新游标,我上面用环境是11g,确实如此,等了2分钟,执行目标SQL,仍只有一个游标。...又等了一段时间,再查询V$SQL, ?

91010

【DB笔试面试822】在Oracle,AWR报告主要关注哪些方面内容?

v Hard parses:每秒/每事务解析次数,解析太多,说明SQL重用率不高。每秒产生解析次数超过100次,就可能说明绑定变量使用地不好,也可能是共享池设置不合理。...在一个使用大型并行查询DSS(Decision Support System,决策支持系统)环境,20%Buffer Hit Ratio是可以接受,而这个对于一个OLTP系统是完全不能接受。...v 库缓存命中率(Library Hit%):表示Oracle从Library Cache检索到一个解析过SQL或PL/SQL语句比率,当应用程序调用SQL或存储过程时,Oracle检查Library...该太小表示解析消耗CPU时间过多,该越大越好,说明计算机执行大部分工作是执行查询工作,而不是分析查询工作。...v 解析执行比率(Execute to Parse %):指的是SQL语句解析执行比例,如果SQL重用率高,那么这个比例会很高。该越高表示一次解析后被重复执行次数越多。

1.4K41
领券