Oracle ACS 绑定变量窥视 条件】的更多相关文章

1. ACS简介 Oracle Database 11g提供了Adaptive Cursor Sharing (ACS)功能,以克服以往不该共享的游标被共享的可能性.ACS使用两个新指标:sensitivity and bindawareness来实施该特点. 2. ACS机制 2.1. Adaptive Cursor Sharing Metadata:Oracle 11g也提供了三个新视图和动态视图V$SQL的两个新列来允许DBA来确定优化器是否已经确定一个SQL语句为一个ACS的候选,并且,…
绑定变量窥视功能是数据库的一个特性,自ORACLE9i版本开始引入,默认是开启的. “绑定变量窥视”表示,查询优化器在第一次调用游标时,会观察用户定义的绑定变量的值,允许优化器来确认过滤条件的选择性,以及是否使用绑定变量代替了常量.之后调用游标时不会出现窥视,且会根据指针共享标准来共享游标,即使随后的调用使用不同的绑定值. 使用绑定变量窥视,第一次解析包含绑定谓词的SQL语句时,优化器将查看绑定变量的值,并使用该值为查询创建执行计划.然后,不管更改的绑定值如何,该计划都将被存储并用于未来的所有执…
SELECT * FROM DBA_HIST_SQLBIND WHERE SNAP_ID>67073 AND SNAP_ID<=67079 AND SQL_ID='3DR3410F086P4';SELECT * FROM v$sql_bind_capture where sql_id='' http://blog.itpub.net/22034023/viewspace-689802/ 通过v$sql_bind_capture视图,可以查看绑定变量,但是这个视图不太给力,只能捕获最后一次记录的…
初始化操作 SQL> alter system flush shared_pool; SQL> set timing on; 1. 未使用绑定变量的时候代码如下 declare type rc is ref cursor; l_rc rc; l_dummy all_objects.object_name%type; l_start number default dbms_utility.get_time; begin .. loop open l_rc for 'select object_n…
Oracle 数据库的绑定变量特性及应用[-----]转载自https://www.cnblogs.com/rootq/(原地址) 关键词: 绑定变量(binding variable),共享池(shared buffer pool), SGA(system global area); 在开发一个数据库系统前,有谁对Oracle 系统了解很多,尤其是它的特性,好象很少吧;对初学者来讲,这更是不可能的事情;仅仅简单掌握了SQL的写法,就开始了数据库的开发,其结果只能是开发一个没有效率,也没有可扩展…
目录 一.SQL执行过程简介 二.绑定变量典型用法 2.1.在SQL中绑定变量 2.2.在PL/SQL中使用绑定变量 2.3.PL/SQL批量绑定变量 2.4.Java代码里使用绑定变量 最近在看<基于Oracle的SQL优化一书>,并做了笔记,作者的个人博客:http://www.dbsnake.net/ @ 一.SQL执行过程简介 继上一篇博客Oracle的cursor学习笔记:Oracle的游标Cursor原理简介,再介绍oracle的绑定变量 介绍绑定变量之前,先介绍SQL执行过程和硬…
今天我们要探讨的是 custom执行计划和通用执行计划.这一技术在 Oracle中被称为绑定变量窥视.但 Kingbase中并没有这样的定义,更严格地说,Kingbase叫做custom执行计划和通用执行计划. 什么是custom执行计划,什么是通用执行计划,我们先来看一个例子,我创建了一个100011行的表,其中有两列分别为 id. name.在name列就2种类型的值,一种值为"aaa",有整整100000行, 而值为bbb列的仅有11行.这就是我们常说的数据倾斜.在oracle数…
概述: 对于数据严重倾斜的,极端如以下例子,不同的传入值,可能执行计划不同,制定执行计划时,就要求知道变量的值.对于绑定变量的情况,我们知道Oracle 有 _optim_peek_user_binds 参数,控制是否启用变量窥探.KingbaseES 也有类似参数,控制是否启用变量窥探. 窥探机制 KingbaseES 采用以下判断机制,决定是否固定执行计划: 前5次执行时,每次都会根据实际传入的实际绑定变量新生成执行计划进行执行,即每次都是硬解析,同时会记录这5次的执行计划: 当第6次开始执…
声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并且在内部进行变量的内存分配操作. 在ORACLE里面占位符的表示方法与其他数据库不同,在ORACLE里面的占位符是通过带有冒号的前缀来表示的,如::f1/:supervisor_name/:employee_id等,并且同一个占位符可能在同一个SQL语句里面使用多次. 在ODBC或DB2 CLI里面…
声明绑定变量 本章节将详细的说明如何在otl_stream流里面声明绑定变量. SQL语句.SQL语句块或存储过程在程序里面使用的时候总是带有占位符.OTL里面带有一个小的解析器用来解析这些占位符,并且在内部进行变量的内存分配操作. 在ORACLE里面占位符的表示方法与其他数据库不同,在ORACLE里面的占位符是通过带有冒号的前缀来表示的,如::f1/:supervisor_name/:employee_id等,并且同一个占位符可能在同一个SQL语句里面使用多次. 在ODBC或DB2 CLI里面…
课程目标 完成本课程的学习后,您应该能够: •变量绑定的目的 •父子游标 •游标共享 •绑定窥探 •SQL语句处理流程 •硬解析.软解析.软软解析 •变量绑定的应用场景   1.游标 游标可以理解为SQL语句的一个句柄,也叫SQL语句的指针,游标指向一条SQL语句,oracle会话要执行一条SQL时,首先要打开游标. 1.1父子游标: 同样的SQL,因某些其它的差异,会产生另外的cursor.解析操作的结果是将一个父游标与子游标保存到库缓存中.很显然,将它们保存到共享内存的目的是为了重用它们,从…
“绑定变量”这个词也许对于某些人来说看以来陌生,其实我们在很早的时候就已经开始运用它了. 在java中使用的PrepareStatement对象,大家一定会说这不是将sql语句做预编译操作嘛,被封装的sql语句可以包含动参数,减少编译的次数,提高数据库性能,减轻jvm的负荷. 其实“绑定变量”的用途就是如上边所说. 那么我们用到它的前提是,大量批量操作,条件相同,但参数值不同. 网上有这样的例子 CREATE TABLE TTT1 (X INT); CREATE OR REPLACE PROCE…
一. 什么是绑定变量 绑定变量(bind variable) : select * from emp where empno=:empno; 是用户放入查询中的占位符,它会告诉Oracle“我会随后为这个变量提供一个值,现在需要生成一个方案,但我实际执行语句的时候,会提供应该使用的实际值”. 实质就是用于替代sql语句中常量的替代变量.绑定变量能够使得每次提交的sql语句都完全一样. 二. 为什么使用绑定变量 使用绑定变量可以减少硬语法分析,优化共享池的使用.在oracle 中,对于一个提交的s…
这篇是7788凑的:":="是赋值语句 如: l_name :='sky';..."=" 是判断是否相等. 如: if 1=1 then...":" 是变量绑定 如: if :P_NAME ='sky' then... 变量绑定 是指在sql语句的条件中使用变量而不是常量.比如shared pool里有两条sql语句,select * from tab1 where col1=1;select * from tab1 where col1=2;对…
1.背景知识介绍 2.构造测试用例 3.场景测试 4.总结 1.背景知识介绍     我们知道,Oracle在传统的OLTP(在线事务处理)类系统中,强烈推荐使用绑定变量,这样可以有效的减少硬解析从而增加系统的并发处理能力.甚至在有些老旧系统,由于在开始开发阶段缺乏认识没有使用到绑定变量,后期并发量增长且无法改造程序时,运维DBA还会不得已去设置cursor_sharing=force来强制使用系统的绑定变量(这是一个万不得已的方案,并不是最佳实践).     虽然使用绑定变量给OLTP系统带来…
之前整理过一篇有关绑定变量的文章,不太详细,重新补充一下. Oracle 绑定变量 http://www.cndba.cn/Dave/article/1275 一.绑定变量 bind variable: A variable in a SQL statement that must be replaced with a valid value, or the address of a value, in order for the statement to successfully execut…
select * from table where id = ? 类似于上面这样的sql,如果不用绑定变量,每次执行时Oracle会认为是不同的sql,会在每次执行时生成一遍执行计划,而执行计划的生成是非常耗CPU,试想一下,如果1000个并发都在执行这条语句,等于同时在生成1000个执行计划. 如果使用了绑定变量,那么即使id的值在变化,Oracle也认为是同一个语句,只在第一次生成一遍执行计划,保存到共享池中.后面的999次执行都不需要再生成执行计划,直接用就可以. CPU性能是一方面,另一…
转:http://blog.csdn.net/wanghai__/article/details/4778343 在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析. 一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决.之所以这样是因为门闩是为了顺序访问以…
之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:.&.&&.DEIFINE.VARIABLE……等等.今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方便学习. ================================================================================== 在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析. 一个硬解析需要经解析,制定执…
今天在oracle中执行插入语句的时候报了一个奇怪的错误,在程序中报的错误是ORA-01745: 无效的主机/绑定变量名,网上一查说是缺失逗号,在查询分析器执行的时候报缺失的逗号,仔细看了一下也没有缺啊,原因最后被找到了 错误的代码INSERT INTO TABLE (GROUPID,GROUPDOCTORID,GROUPWORK,"LEVEL",OPERATORID,OPERATORTIME) VALUES ('1','1','1','1','1',2016/11/18 11:05:…
参考:http://f.dataguru.cn/thread-208881-1-1.html 参考:http://blog.sina.com.cn/s/blog_4d9ece9a0100caw8.html 注:加粗皆为参考引用 不废话,直接说: 因为oracle对于sql语句的首先的解析逻辑,会先匹配是否可以软解析,不行则会进行硬解析,相对而言 硬解析比较麻烦. select * from table where id = '1' 和 select * from table where id =…
今天在oracle中执行插入语句的时候报了一个奇怪的错误,在程序中报的错误是ORA-01745: 无效的主机/绑定变量名,网上一查说是缺失逗号,在查询分析器执行的时候报缺失的逗号,仔细看了一下也没有缺啊,原因最后被找到了 错误的代码INSERT INTO TABLE (GROUPID,GROUPDOCTORID,GROUPWORK,"LEVEL",OPERATORID,OPERATORTIME) VALUES ('1','1','1','1','1',2016/11/18 11:05:…
-如何确定系统中是否存在绑定变量的情况:首先创建一个表,用于存放整理过得数据:create table t1 as select sql_text from v$sqlarea;----V$SQLAREA本视图持续跟踪所有shared pool中的共享cursor,--在shared pool中的每一条SQL语句都对应一列.本视图在分析SQL语句资源使用方面非常重要./***1.查看消耗资源最多的SQL:SELECT hash_value, executions, buffer_gets, di…
Oracle数据库,用mybatic批量插入数据: <insert id="saveBatch" parameterType="io.renren.entity.NodeDataEntity" databaseId="oracle"> insert into "NODE_DATA" ( "NODE_ID", "DATA_TIME", "DATA_VALUE"…
1.创建测试数据 2.查看cursor_sharing的值 SQL> show parameter cursor_sharing; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cursor_sharing string EXACT 3.打开SQL追踪 SQL> alter session set sql_trace=true; Session al…
年后一次系统升级后,监控数据库的工具DPA发现数据库的Total Wait时间突然飙增,如下截图所示,数据库的总体等待时间对比升级前飙增了非常多 另外就是发现出现了较多的等待事件,主要有latch: cache buffers chains. latch: shared pool .db file scattered read.根据这边的监控发现TOP SQL里面从升级前的0次变为了一天的一万多次(有些甚至更多),分析过后我们就找开发人员了解一下系统升级变跟的内容和改动 开发人员坚定的告诉们介绍…
使用 CURSOR_SHARING 参数 EXACT  默认,不替换 SIMIAR 当替换不会影响到执行计划时,才会将字面量替换成绑定变量 FORCE 只要有可能,字面量会被替换为绑定变量…
拿1个sql举个例子,我只贴出了where后面部分 实际环境中有init_date 和direct_no的组合索引IDX_DATE_NO 上诉标红处,:b3=0 和:b3<>0这两种情况oracle在选择执行计划的时候会有很大的区别. 如果是:b3<>0,则oracle会在index_range_scan IDX_DATE_NO 时一次过滤出同时符合 init_date和direct_no列的数据.执行效果如下: 如果是:b3=0,则oracle会在index_range_scan…
一个SQL,通过SPM固定它的执行计划,可以通过DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE实现.也可以通地此功能在不修改原SQL的情况下对其加HINT来固定执行计划.DB VERSION:Oracle 11.2.0.4OS:CentOS 6.6例如:原SQL走索引:SELECT * FROM SCOTT.TB_SPM WHERE OBJECT_ID=10;想通过加HINT让其走全表扫描:SELECT /*+FULL(TB_SPM)*/* FROM SCOTT.TB…