oracle SGA中包含数据高速缓冲,重做日志缓冲,以及共享池(share_pool)。共享池中包含库高速缓冲(所有的SQL,执行计划等)和数据字典缓冲(对象的定义,权限等)。

所以,如果SQL中没有绑定变量,那么会产生大量的SQL以及对应的执行计划,对共享池 造成影响

测试:

1.清空共享池

ALTER SYSTEM FLUSH SHARED_POOL;

2.执行不带绑定变量的SQL

SQL> declare
2 begin
3 for x in 1..1000 loop
4 execute immediate 'select * from monkey.testtable where id='||x;
5 dbms_lock.sleep(1);
6 end loop;
7 end;
8 /

执行动态SQL并且直接拼接而不使用绑定变量

3.查看sqlarea中sql的状况

select sql_text,PARSE_CALLS,executions,FIRST_LOAD_TIME,LAST_LOAD_TIME from v$sqlarea where sql_text like '%monkey.testtable%' order by FIRST_LOAD_TIME desc;

从这里看到看到,不绑定变量的情况下,每一条SQL及其执行计划都会放进share_pool中,如果share_pool很小的情况下,就会出问题。同时,解析次数和执行次数都是1,即这个sql没有被复用,每一次都需要硬解析,影响性能。

4.执行带绑定变量的SQL

--清空share_pool
ALTER SYSTEM FLUSH SHARED_POOL;
--执行
SQL> declare
2 begin
3 for x in 1..1000 loop
4 execute immediate 'select * from monkey.testtable where id=:x' using x;
5 end loop;
6 end;
7 /

5.查看sqlarea中sql的情况

select sql_text,PARSE_CALLS,executions,FIRST_LOAD_TIME,LAST_LOAD_TIME from v$sqlarea where sql_text like '%monkey.testtable%' order by FIRST_LOAD_TIME desc;

可以看到,绑定变量的SQL解析了1次,执行了1000次,即被复用了。节省了sqlarea的空间,减少了硬解析。

6.使用DDL将相关对象的SQL提出share_pool

查看sqlarea中与monkey.testtable相关的sql及其状态

select sql_text,OBJECT_STATUS from v$sqlarea where sql_text like '%monkey.testtable%';

可以看到,有并且是可用的

--执行DDL语句
grant select on monkey.testtable to monkey02;
--查看sqlarea中是否还有与monkey.testtable的sql
select sql_text,OBJECT_STATUS from v$sqlarea where sql_text like '%monkey.testtable%';

可以看到,这个sql并没有被踢出,但是状态已经变为不可用。当share_pool空间不足时,会将其踢出。

未使用绑定变量对share_pool的影响的更多相关文章

  1. PLSQL_性能优化系列07_Oracle Parse Bind Variables解析绑定变量

    2014-09-25 Created By BaoXinjian

  2. 【PLSQL】绑定变量,活跃SQL,软硬解析解析

    ************************************************************************   ****原文:blog.csdn.net/clar ...

  3. oracle 使用绑定变量极大的提升性能

    初始化操作 SQL> alter system flush shared_pool; SQL> set timing on; 1. 未使用绑定变量的时候代码如下 declare type ...

  4. [转]SQL注入漏洞及绑定变量浅谈

    1.一个问题引发的思考 大家在群里讨论了一个问题,奉文帅之命写篇作文,且看: String user_web = "user_web" String sql = "upd ...

  5. [转]ORACLE 绑定变量用法总结

    转:http://blog.csdn.net/wanghai__/article/details/4778343 在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析 ...

  6. ORACLE 绑定变量用法总结 .

    之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:.&.&&.DEIFINE.VARIABLE……等等.今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方 ...

  7. Oracle 数据库的绑定变量特性及应用

    Oracle 数据库的绑定变量特性及应用[-----]转载自https://www.cnblogs.com/rootq/(原地址) 关键词: 绑定变量(binding variable),共享池(sh ...

  8. ORACLE 参数设置绑定变量

    使用 CURSOR_SHARING 参数 EXACT  默认,不替换 SIMIAR 当替换不会影响到执行计划时,才会将字面量替换成绑定变量 FORCE 只要有可能,字面量会被替换为绑定变量

  9. Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名

    Oracle数据库,用mybatic批量插入数据: <insert id="saveBatch" parameterType="io.renren.entity.N ...

随机推荐

  1. Vagrant批量安装CentOS7

    环境准备 下载virtualbox https://download.virtualbox.org/virtualbox/6.1.10/VirtualBox-6.1.10-138449-Win.exe ...

  2. Docker(六):Docker安装Kibana

    查找Kibana镜像 镜像仓库 https://hub.docker.com/ 下拉镜像 docker pull kibana:7.7.0 查看镜像 docker images 创建Kibana容器 ...

  3. antdv的Upload组件实现前端压缩图片并自定义上传功能

    Ant Design of Vue的Upload组件有几个重要的api属性: beforeUpload: 上传文件之前的钩子函数,支持返回一个Promise对象. customRequest: 覆盖组 ...

  4. Python高级语法-对象实例对象属性-类与实例,class方法静态方法等(4.6.1)

    @ 目录 1.说明 2.代码 关于作者 1.说明 python中属性:类属性,实例属性 方法:类方法,实例方法,静态方法 想修改类属性,只能是类方法,因为只有类方法把cls(类)传入数据里面 静态方法 ...

  5. ctf/web源码泄露及利用办法

    和上一篇文章差不多,也算是对web源码泄露的一个总结,但是这篇文章更侧重于CTF 参考文章: https://blog.csdn.net/wy_97/article/details/78165051? ...

  6. 【剑指offer】01 二维数组中的查找

    题目地址:二维数组中的查找 题目描述                                    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照 ...

  7. .Net Core的简单单元测试基于Mock和自定义

    首先创建 使用mock 外部依赖一般用Mock 模拟 下载包 例如 3.1:首先先要使用MOCk来模拟测试方法需要的参数,这一步为 Arrange; 简单的模拟 var mock = new Mock ...

  8. ASP.NET Core WebAPI实现本地化多语言(单资源文件)

    在Startup ConfigureServices 注册本地化所需要的服务AddLocalization和 Configure<RequestLocalizationOptions> p ...

  9. [.NET] - EventSource类的使用

    EventSource类: 这个类是在.NET 4.5新推出的一个类,用来提供创建事件用于 Windows 事件跟踪的功能 (ETW).在之前如果要配置一个Event Tracing for Wind ...

  10. Kotlin 简单使用手册

    在昨天和做android的前辈一番交谈后,觉得很惭愧,许多东西还只是知其然而不知其所以然,也深感自己的技术还太浅薄.以后要更加努力地学习,要着重学习原理.方法论,不能只停留在会用的阶段. 今天又要献丑 ...