首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Execute immediate填充库缓存

Execute immediate填充库缓存
EN

Stack Overflow用户
提问于 2015-12-01 07:58:54
回答 2查看 182关注 0票数 0

我有一个关于如何在库缓存中处理通过“execute immediate”执行的查询的问题(我们使用Oracle11)。

假设我有一个这样的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FUNCTION get_meta_map_value (  
  getfield            IN VARCHAR2,  
  searchfield         IN VARCHAR2,  
  searchvalue         IN VARCHAR2  
) RETURN VARCHAR2 IS  
  v_outvalue          VARCHAR2(32767);  
  sql_stmt            VARCHAR2(2000) := 'SELECT '||getfield||' FROM field_mapping, metadata '||  
        'WHERE field_mapping.metadataid = metadata.metadataid AND rownum = 1 AND '||searchfield||' = :1';  
BEGIN  
  EXECUTE IMMEDIATE sql_stmt INTO v_outvalue USING searchvalue;  
...  

getfield和searchfield在一个安装中总是相同的(但在另一个安装中有其他值,这就是我们使用动态sql的原因),所以这就给我们留下了一个只在search值(这是一个参数)上有所不同的sql。此函数在一个循环中调用,该循环从另一个存储过程中执行x次。存储过程在连接生存期内通过ODBC连接执行y次。有z个连接,但每个连接都使用相同的数据库登录。

现在,让我们还假设搜索值在一个循环期间更改了b次。

问题1:在计算库缓存中将保留多少个sql副本时,我们可以忽略搜索值可以具有的不同值(b),因为该值是作为参数发送以执行immediate的吗?

问题2:循环是否会导致查询硬解析x次(查询将在库缓存中创建x次),或者Oracle可以重用该查询吗?(为了简单起见,我们假设此问题中的所有调用的搜索值都相同)

问题3: y(在一个连接的生命周期内从odbc调用存储过程的次数)是否也会使库缓存中保存的查询副本数量成倍增加?

问题4: z(具有相同数据库登录的同时连接的数量)是否乘以库缓存中保存的查询副本的数量?

主要问题:在这里我应该期待什么样的行为?行为是可配置的吗?这个问题的原因是我们已经有这个代码4年了,现在我们的一个客户回复我们说“这个查询填满了我们的整个SGA,Oracle说这是你的错”。

EN

回答 2

Stack Overflow用户

发布于 2015-12-05 18:24:31

getfield和searchfield的不同组合的数量应该决定将有多少个“副本”。我谨慎地使用“副本”这个词,因为Oracke会将每个变体视为不同的变体。由于您对searchvalue使用了绑定变量,因此您拥有的许多值都不会添加到查询计数中。

简而言之,你的代码看起来没问题。

连接的数量不应增加硬解析。

请求AWR报告,以查看SGA中到底有多少这样的查询,以及触发了多少硬解析。

票数 0
EN

Stack Overflow用户

发布于 2019-07-02 14:34:07

我不同意连接数量不会增加发布代码的硬解析计数的说法,因为我所知道的最后一个动态SQL不能在会话之间共享。由于生成的SQL使用绑定变量,因此它应该由会话生成一个可重用的语句,但它不能在用户会话之间共享。一般来说,动态SQL应该只用于不经常执行的语句。您可以参考以下内容:-- Designing applications for performance and scalability An Oracle白皮书2005年7月https://www.oracle.com/technetwork/database/performance/designing-applications-for-performa-131870.pdf --

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enter code here
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34015325

复制
相关文章
Mariadb EXECUTE IMMEDIATE 解析
该篇文章起源于XCTF 决赛中清华对一道web题的非预期,在该题中过滤了很多的关键字,包括SELECT等,预期解为mariadb主从复制,但清华使用EXECUTE IMMEDIATE绕过了黑名单导致非预期,这里详细来分析一下该种绕过方法。
yulate
2023/05/02
4730
Mariadb EXECUTE IMMEDIATE 解析
Oracle中Execute Immediate用法
Execute Immediate代替了以前Oracle8i中DBMS_SQL package包。它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,Execute Immediate的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码。尽管DBMS_SQL仍然可用,但是推荐使用Execute Immediate,因为它获的收益在包之上。
星哥玩云
2022/08/18
1.5K0
存储过程中调用EXECUTE IMMEDIATE的“权限不足”
EXECUTE IMMEDIATE是Oracle中使用动态SQL的一种方法,可以直接执行,也可以在存储过程中调用。然而在存储过程中调用可能会遇到权限不足的问题,如在存储过程中执行重建索引语句:
一笠风雨任生平
2019/08/02
2.6K0
我明明 immediate 关库的,怎么就打不开了?!
五一放假期间,某客户的数据库出现故障,据说对方找了一些工程师折腾了一天,都无法将数据库open,其中参考了网络上的很多文章,也使用了一系列隐含参数,均无法将数据库打开。这里我简单的与大家分享一下这个c
数据和云
2018/03/07
1.1K0
我明明 immediate 关库的,怎么就打不开了?!
Java编程之伪共享与缓存行填充
最近在回顾Disruptor的相关知识,觉得Disruptor在计算机底层的领域确实比一般人厉害不少,以前在写程序的时候,基本是从应用逻辑的角度考虑,觉得设计模式+少量算法+ 优美的代码=理想的结果,但看完Disruptor的设计后,觉得只考虑应用本身是有一定的局限性,还需要懂底层,硬件层面的东西,就像Disruptor一样,通过底层优化,让程序有质的飞跃。
程序狗
2022/01/04
5750
boost::assign(标准容器填充库)
boost::assign通过对"+="和","的重载非常方便的填充标准容器(std::vector,std::set,std::list,std::map),使用boost::assign需要#include<boost/assign.hpp>
racaljk
2019/02/25
1.3K0
[AWR报告]Execute to Parse %
从这期开始讲解awr报告的部分,上期说的是awr整体的部分,今天开始对里面的细节说起
bsbforever
2020/08/19
9100
mysql中有execute_jdbc连接mysql数据库
最近在补基础知识,刚好补到C#中对数据库操作的一些技术,今天学习了ExecuteNonQuery的东西,看自己项目维护项目的代码和网上资料查询,基本上搞懂了ExecuteNonQuery的用法,小小的做个总结,供以后查阅。
全栈程序员站长
2022/10/01
2K0
CPU的缓存L1、L2、L3与缓存行填充
L1,L2,L3 指的都是CPU的缓存,他们比内存快,但是很昂贵,所以用作缓存,CPU查找数据的时候首先在L1,然后看L2,如果还没有,就到内存查找一些服务器还有L3 Cache,目的也是提高速度。
chengcheng222e
2021/11/04
2.5K0
伪共享和缓存行填充,Java并发编程还能这么优化!
关于伪共享的文章已经很多了,对于多线程编程来说,特别是多线程处理列表和数组的时候,要非常注意伪共享的问题。否则不仅无法发挥多线程的优势,还可能比单线程性能还差。随着JAVA版本的更新,再各个版本上减少伪共享的做法都有区别,一不小心代码可能就失效了,要注意进行测试。这篇文章总结一下。
Bug开发工程师
2018/07/23
9280
伪共享和缓存行填充,Java并发编程还能这么优化!
PHP PDOStatement::execute讲解
PDOStatement::execute — 执行一条预处理语句(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
用户8664418
2021/07/13
6300
PHP PDOStatement::execute讲解
PDOStatement::execute — 执行一条预处理语句(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
用户8664418
2021/07/13
6190
JEP解读与尝鲜系列2 - JEP 142 缓存行填充简化
用于将某个或者某些需要多线程读取和修改的 field 进行缓存行填充。同时由于 Java 8 之前对于缓存行填充的方式,比较繁琐且不够优雅,还有可能缓存行大小不一的问题,所以这个 JEP 中引入了 @Contended 注解。
干货满满张哈希
2021/04/12
6680
JEP解读与尝鲜系列2 - JEP 142 缓存行填充简化
poj-1056-IMMEDIATE DECODABILITY(字典)
An encoding of a set of symbols is said to be immediately decodable if no code for one symbol is the prefix of a code for another symbol. We will assume for this problem that all codes are in binary, that no two codes within a set of codes are the same, that each code has at least one bit and no more than ten bits, and that each set has at least two codes and no more than eight. Examples: Assume an alphabet that has symbols {A, B, C, D} The following code is immediately decodable: A:01 B:10 C:0010 D:0000 but this one is not: A:01 B:10 C:010 D:0000 (Note that A is a prefix of C)
瑾诺学长
2018/09/21
3520
ThinkPHP-数据库迁移和填充(二)
数据库填充是一种初始化数据库数据的方法。在开发过程中,经常需要填充一些测试数据或者默认值,使用数据库填充可以方便地进行数据初始化。
堕落飞鸟
2023/05/02
2560
ThinkPHP-数据库迁移和填充(一)
ThinkPHP提供了数据库迁移和填充的功能,可以方便地进行数据库结构的管理和数据的初始化。
堕落飞鸟
2023/05/02
7071
not authorized on admin to execute command
角色授权分两种,一种是直接在当前库中创建用户并授予相关权限。如admin库中创建admin用户。另一种情况是
拓荒者
2019/06/16
5.9K0
新增SqlHelper.execute
链接:https://gitee.com/baomidou/mybatis-plus/pulls/215/files
阿超
2022/08/21
5670
Execute 方法(Find 对象)
Execute 方法(Find 对象) 运行指定的查找操作。如果查找成功,则返回 True。 语法 expression.Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchC
用户1075292
2018/01/23
1.3K0
点击加载更多

相似问题

Execute immediate with IN子句

10

Execute Immediate :遇到符号

30

引用游标with Execute immediate

20

Oracle EXECUTE IMMEDIATE into游标

12

PL/SQL execute immediate语法

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文