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

Oracle:我可以在共享池中找到查询,但在源代码中找不到查询。它是从哪里来的?

在Oracle数据库中,共享池是一个重要的内存区域,用于存储共享的SQL和PL/SQL代码以及相关的执行计划。当一个查询被执行时,Oracle会首先检查共享池中是否已经存在该查询的执行计划,如果存在则直接使用,避免了重复解析和优化查询的过程,提高了查询的性能。

根据提供的信息,如果在共享池中找到了查询,但在源代码中找不到查询,那么有可能是因为该查询是通过动态SQL语句生成的。动态SQL是指在程序运行时根据不同的条件拼接SQL语句,然后执行的方式。这种方式在一些场景下非常灵活,但也增加了代码的复杂性。

在动态SQL的情况下,查询的具体语句可能无法在源代码中直接找到,因为它是在运行时根据条件生成的。这样的查询通常会被解析和优化后存储在共享池中,以便下次执行时直接使用。

总结起来,如果在共享池中找到了查询,但在源代码中找不到查询,那么很可能是因为该查询是通过动态SQL生成的。这种方式可以提高程序的灵活性,但也增加了代码的复杂性。

腾讯云相关产品推荐:

  • 云数据库 TencentDB:提供高性能、高可用的数据库服务,支持主流数据库引擎,满足不同业务场景的需求。产品介绍链接:https://cloud.tencent.com/product/cdb
  • 云服务器 CVM:提供弹性、安全、稳定的云服务器实例,可根据业务需求灵活调整配置。产品介绍链接:https://cloud.tencent.com/product/cvm
  • 云函数 SCF:无服务器计算服务,支持按需运行代码,无需关心服务器管理,实现快速部署和弹性扩缩容。产品介绍链接:https://cloud.tencent.com/product/scf
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【DB笔试面试575】Oracle,SQL语句执行过程有哪些?

♣ 题目部分 Oracle,SQL语句执行过程有哪些? ♣ 答案部分 Oracle数据库里SQL语句执行过程可以如下图所示: ?...如果目标SQL能通过上述检查,那么接下来Oracle就会去SGA共享池中库缓存(Library Cache)查找是否存在匹配共享游标(Shared Cursor)。...如果找到了匹配共享游标,那么Oracle就会把存储于该共享游标解析树和执行计划直接拿过来重用,这相当于跳过了后续查询转换”和“查询优化”这两个步骤,直接进入到“实际执行”阶段。...(3)如果找不到匹配共享游标,就意味着此时没有可以被重用解析树和执行计划,那么接下来整个执行过程就进入到查询转换这一步。...Oracle 9i查询转换是独立于优化器,它与优化器类型无关,但是Oracle 10g开始,Oracle会对某些类型查询转换(比如子查询展开、复杂视图合并等)分别计算经过查询转换后等价改写

1.4K10

Oracle|SGA (System Global Area)详解

内存结构 1、Fixed SGA 固定SGA 可以把这个区想成是 SGA“自启”区,Oracle在内部要使用这个区来找到SGA其他区。...解析一个查询时,解析得到表示(representation)就缓存在那里。完成解析整个查 询任务之前, Oracle会搜索共享池,看看这个工作是否已经完成。...PL/SQL运行代码就在共享池中缓存,所以下一次运行时,Oracle不会再次磁盘重新读 取。PL/SQL代码不仅在这里缓存,还会在这里共享。...简单地讲,就像是厨房水池一样,什么东西都往共享池里放。 注: 这是个共用东西,大家都可以用。比如一个用户进行一次查询解析之前,查看共享池,这个sql语句是否已经缓存在这里了。...理解是:其实是把原来属于共享池里面的一些特殊内存拿出来进行不同处理。因为这些内存用完之后就可以立即释放,而共享内存不存在释放问题,因为是大家共享

59120

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

oracle systemdump 也可以找到解析失败 SQL; 以下我们来看看这个精彩案例分享。...select * from enmo where id=100; 硬解析比如一个新执行 SQL 没有共享池中,那么就要经历一个硬解析过程,关于过程这里就不在多讲 SQL 不能共享,不能共享原因有很多比如没有同一个用户下面执行...解析失败 SQL 是否会在共享池中存储?怎么查询到解析失败 SQL? 很多时候我们会有这样一个误区,既然语法错误或者对象不存在应该在语法语义检查这个步骤就挂了怎么还好存在共享吃里面呢?...遍历,如果找到了就直接用该 sql 缓存执行计划等,如果找不到则从头解析,并把解析后执行计划等缓存在 hash bucket 。...另外父游标的 heap 0 存储着子游标的句柄地址。如果解析错误 SQL 共享池中存储的话那么必然要产生一个父游标然后父游标里面存储有 SQL 文本之类信息,但是子游标的?

1.6K50

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

select * from enmo where id=100; 硬解析比如一个新执行 SQL 没有共享池中,那么就要经历一个硬解析过程,关于过程这里就不在多讲 SQL 不能共享,不能共享原因有很多比如没有同一个用户下面执行...解析失败 SQL 是否会在共享池中存储?怎么查询到解析失败 SQL? 很多时候我们会有这样一个误区,既然语法错误或者对象不存在应该在语法语义检查这个步骤就挂了怎么还好存在共享吃里面呢?...那么怎么证明就是解析失败 SQL 存在共享池中并且解析时候持有 library cache latch 呢? 做下面测试之前我们先回顾一个 Oracle 一些基本概念。...当 sql 执行时候,首先会对 sql 文本进行 hash 运算然后根据 hash 值去相关 hash bucket 遍历,如果找到了就直接用该 sql 缓存执行计划等,如果找不到则从头解析,并把解析后执行计划等缓存在...另外父游标的 heap 0 存储着子游标的句柄地址。如果解析错误 SQL 共享池中存储的话那么必然要产生一个父游标然后父游标里面存储有 SQL 文本之类信息,但是子游标的?

1.1K40

典型案例:深入剖析 ORA-04031 前世今生

继续下面的内容之前先介绍一下本次案例这套数据库情况。...,大家可以参考【细致入微:Oracle 执行计划在 Shared Pool 存储位置探秘】 http://dwz.cn/3PinUl,在这里就不再赘述了。...要理解它,我们需要先看看共享池中 subpool 演变过程: Oracle 9i开始为了提高 Oracle 并发性,减少竞争,Oracle 将 shared pool 划分为多个 subpool,...再来查询一下本案例每个 sub pool 空闲内存情况(截取了部分结果): 结果可以看出,2号 subpool 1号 subsubpool ( 即 heap(2,0))最大空闲可用内存为... 10g 开始,我们确实有这样功能,允许当内存请求选定池中无法满足时,“交换”到其他子池进行搜索,但这功能不可能对所有的内存结构和元素都起作用。注意:有一小部分功能会跨子池利用内存块。

1.2K90

深入剖析 ORA-04031 前世今生

继续下面的内容之前先介绍一下本次案例这套数据库情况。...本次对4031错误分析也是一样。首先来查看了数据库 alert 日志,果不其然,日志里面有大量4031错误,记录如下所示: ?...要理解它,我们需要先看看共享池中 subpool 演变过程: Oracle 9i开始为了提高 Oracle 并发性,减少竞争,Oracle 将 shared pool 划分为多个 subpool,...而 Oracle 10g开始将每一个 subpool 又划分成4个更小 pool,姑且记为 sub subpool 吧(这个叫法只是这样叫,官方叫法没有查到,知道这个意思就行了) ?... 10g 开始,我们确实有这样功能,允许当内存请求选定池中无法满足时,“交换”到其他子池进行搜索,但这功能不可能对所有的内存结构和元素都起作用。注意:有一小部分功能会跨子池利用内存块。

1K51

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

游标和私有SQL区域位于程序全局区域(PGA)解析调用期间,数据库执行检查以便识别在语句执行之前可以找到错误。有些错误解析时无法捕获。...语法正确语句可能无法进行语义检查,如以下不存在查询示例所示: 3.1.1.3 共享池检查 解析期间,数据库执行共享池检查以确定它是可以跳过资源密集语句处理步骤。...该语句执行计划哈希值 SQL 语句可以共享池中具有多个计划。通常,每个计划都有不同哈希值。如果相同 SQL ID 具有多个计划哈希值,则数据库就会知道此 SQL ID 存在多个计划。...下图是专用服务器体系结构 UPDATE 语句共享池检查简化表示。 图3-2共享池检查 如果检查确定共享池中语句具有相同哈希值,则数据库将执行语义和环境检查以确定语句是否具有相同含义。...3.2 Oracle 数据库如何处理 DML 大多数 DML 语句都有一个查询组件。查询,执行游标会将查询结果放入一组称为结果集

3.9K30

读书笔记系列01-《收获、不止Oracle

这本书是个人觉得写最有趣Oracle书籍,也是接触Oracle后第一本完全精读Oracle中文书籍。...今后学习一门技术,甚至是一个知识点,都要思考为什么要学它,它是解决什么问题。这些道理应用广泛,不止局限于学习Oracle技术。...通过语句执行过程体会Oracle体系结构: 查询语句(select)执行过程:1区准备,完成用户连接信息保存和权限保存,生成一个唯一hash值,进入2区,首先是到共享池处理,此hash值没有,则需要检查语法语义权限解析生成执行计划...,然后进入数据缓冲区查询,如果没有,则数据缓冲区数据文件查到并带回数据缓冲区,最终呈现给用户。...修改语句(update, insert, delete)执行过程:查询语句有的过程都有,在数据缓冲区找到要修改块,修改之前生成前镜像(CR块),修改后提交,LGWR进程将log buffer条目写入redo

71010

【DB笔试面试528】Oracle,如何解决ORA-04030和ORA-04031错误?

Oracle不能找到一个足够大内存块来满足用户操作所带来内部分配请求时候,ORA-04031错误就可能在SGA任何一个池中(Large Pool、Java Pool、Streams Pool(...MOS文档(ID 2016002.1和146599.1)对ORA-04031有非常详细说明。 Oracle 9i和之后版本,共享可以被划分为子池。...,ASM环境也用到了共享池。...当试图共享池中分配大块连续内存而失败时,Oracle会首先从池中清理当前不用对象从而使得空闲内存碎片(chunk:内存块)得以合并。...(5)OracleBUG导致内存泄露。例如,一些版本查询V$SEGMENT_STATISTICS这样视图导致内存泄露,使Shared Pool内存耗光。

1.8K31

CMU 15-445 数据库课程第五课文字版 - 缓冲池

页表在内存它是临时。我们不需要持久化这个页表,页表可以我们执行查询时逐步建立。 一个问题:在内存设置了页表某一帧 dirty 位后,如果掉电,我们会丢失对页面的更新吗?...)概念开始:逻辑上讲 DBMS 有一种缓冲池,你可以把页磁盘加载到内存但在物理上,它可以被实现为具有不同策略多个单独缓冲池。...下一个是扫描共享(Scan Sharing) 其基本思想是查询可以重用存储检索数据,这也被称为同步扫描(Synchronized scans),它不同于结果缓存。... Informix 这个系统叫做轻量扫描(Light Scans)。并且 Oracle,SQLServer,PostgresSQL 也有这种优化机制。...如果你缓冲池中有一个不脏页面,当它需要从缓冲池中剔除时候,你可以直接删除它,覆盖它,我们不需要保留它。因为没有任何变化,它备份磁盘上,如果我们需要我们总是可以磁盘恢复它。

43320

Oracle-绑定变量binding variable解读

当一个SQL语句提交后,Oracle 接收到这些SQL后,会先对这个SQL做一个hash 函数运算,得到一个Hash值,然后到共享池中寻找是否有和这个hash 值匹配SQL存在。...如果在共享池中没有找到相同Hash 值SQL,oracle 会认为这是一条新SQL, 会进行硬解析。 而唯一使得oracle 能够重复利用执行计划方法就是采用绑定变量。...效率来看,由于oracle10G放弃了RBO,全面引入CBO,因此,10G中使用绑定变量效率提升比9i更为明显。...area)共享池(shared buffer pool)内存可以被所有的数据库用户共享....使用这个特性,下面,给出一条SQL,用来查询可以使用绑定变量进行获益SQL语句 with match_info as ( select force_matching_signature

1.8K10

【史上最详解】Oracle数据库各种锁 - 看完这篇就够了!

其它用户只能对该表再施加共享方式锁,而不能再对该表施加独占方式锁,共享更新锁可以再施加,但不允许持有共享更新封锁进程做更新。 共享该表所有用户只能查询数据,但不能更新。...---- 独占方式表级锁( Exclusive) 独占方式表级锁是用于加锁表所有数据,拥有该独占方式表封锁用户,即可以查询该表,又可以更新该表,其它用户不能再对该表施加任何加锁(包括共享、独占或共享更新封锁...---- 分析锁 ORACLE 使用共享池存储分析与优化过 SQL 语句及 PL/SQL 程序,使运行相同语句应用速度更快。 一个共享池中缓存对象获得它所引用数据库对象分析锁。...当一个事务修改或删除了共享池持有分析锁数据库对象时, ORACLE 使共享池中对象作废,下次引用这条SQL/PLSQL 语 句时, ORACLE 重新分析编译此语句。...特别是 OLAP 系统表经常会是非常巨大表,在这种情况下,如果表没有索引,那么查询几乎是不可想象

15.1K85

【DB笔试面试579】Oracle,SQL解析过程硬解析、软解析和软软解析区别有哪些?

如果在库缓存找不到匹配父游标,那么Oracle就会新生成一个会话游标和一对共享游标(即父游标和子游标);如果找到了匹配父游标,但找不到匹配子游标,那么Oracle就会新生成一个会话游标和一个子游标...l 如果在当前会话PGA找不到匹配缓存会话游标,但在库缓存中找到了匹配父游标和子游标,那么Oracle会新生成一个会话游标并重用刚刚找到匹配父游标和子游标,这个过程对应就是软解析。...硬解析大致可以分为5个执行步骤: (1)语法分析。 (2)权限与对象检查。 (3)共享池中检查是否有完全相同之前完全解析好。...这里需要注意是,11gR1开始,Oracle用Mutex替换了库缓存相关Latch,所以Oracle 11gR1及其后续版本,将不再存在库缓存相关Latch争用,取而代之是Mutex争用...在这种情况下,当同一条目标SQL再次重复执行时(显然是软解析),此时是可以找到匹配共享游标的,但依然找不到匹配会话游标(因为之前硬解析时对应会话游标己经被Close掉了),这意味着Oracle还必须为该

1.4K20

Java基础系列2:深入理解String类

intern方法是个Native方法,会字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。 由于String字符串不可变性,常量池中一定不存在两个相同字符串。...内存区域 HotSpot VM字符串常量池是通过一个StringTable类实现它是一个Hash表,默认值大小长度是1009;这个StringTable每个HotSpot VM实例只有一份...intern 方法是一个native方法,intern方法会字符串常量池中查询当前字符串是否存在,如果存在,就直接返回当前字符串;如果不存在就会将当前字符串放入常量池中,之后再返回。..."ABC"字符串,找到了就不会创建新"ABC"字符串,找不到才会去创建新"ABC"字符串;如果不使用intern方法,则没有去常量池查找过程,会直接创建新"ABC"字符串。...可以看出二者区别是: 使用intern(),实际创建对象数目是少于需要创建对象数目的,因为会有常量池字符串共享;但相应,所需要常量池查询消耗会增加时间损耗;这体现出是一种空间友好,不需要太多

60930

Oracle 12.2新特性掌上手册 - 第三卷 Sharding 增强

可以共享硬件或软件Oracle数据库池中分发和复制数据。应用程序将数据库池视为单个逻辑数据库。应用程序可以通过向池中添加数据库(分片),在任何平台上将数据、事务和用户弹性扩展到任何级别。...分段数据库(SDB) - 单个逻辑Oracle数据库,横跨在没有共享硬件或软件物理Oracle数据库(分片)池中进行水平分区 分片 - 承载分片数据库子集独立物理Oracle数据库 全局服务 - 提供对...分片之间不需要共享存储。分片数据库是分片集合。 分片可以放置一个区域或不同区域中。 Oracle Sharding环境,一个区域代表一个数据中心或处于紧密网络邻近多个数据中心。...对于典型SDB,每个区域专用低端商用服务器上安装一组碎片导向,若要实现高可用性,可以部署多个分片导向。Oracle 12.2可以在给定区域中部署最多5个分片导向....Oracle Sharded 数据库完整平台包括: 1、水平分割10,100或1000个不共享硬件或sorware离散Oracle数据库数据和工作负载 2、自动端到端生命周期管理 对于单片查询和分片间查询

93431

JDBC【数据库连接池、DbUtils框架、分页】

步骤: 导入开发包【c3p0-0.9.2-pre1.jar】和【mchange-commons-0.2.jar】 导入XML配置文件【可以程序自己一个一个配,C3P0docConfiguration...目录下配置context.xml文件【文件内容可以tomcat默认页面的 JNDI Resources下Configure Tomcat's Resource Factory找到】 导入Mysql或oracle...类 该类简化了SQL查询,配合ResultSetHandler使用,可以完成大部分数据库操作,重载了许多查询,更新,批处理方法。...5行数据,查询第2页数据 分析: 1:第2页数据其实就是第6条数据开始,取5条 实现: 1:start为5【偏移量...分析: 算出有多少页数据这是非常简单【在数据库查询有多少条记录,你每页显示多少条记录,就可以算出有多少页数据了】 使用Mysql或Oracle分页语法即可 通过上面分析,我们会发现需要用到4个变量

1K40

【DB笔试面试527】Oracle,内存结构主要由什么组成?

(1)数据缓冲区(Database Buffer Cache):也叫数据库缓冲区高速缓存,用于缓存数据文件检索出来数据块,可以大大提高查询和更新数据性能,是数据库实例重要组成部分。...参数DB_CACHE_SIZE可指定数据缓冲区大小,需要在参数文件静态修改。Oracle处理某个查询时,服务器进程会在Buffer Cache查找它所需所有数据块。...如果未在Buffer Cache中找到所需要数据块,那么服务器进程会数据文件读取所需数据块,并在Buffer Cache添加一个副本。...保留池中数据不会被替换出去,可以将常用小表放置该区可以降低I/O操作。可以通过DB_KEEP_CACHE_SIZE参数指定保留池大小。该区域大小不会被ASMM自动调节。...Redo Entry是Oracle用户会话占用内存里将这些变更记录复制到Redo日志缓冲区内,其在内存是一段连续内存块,Oracle利用后台进程LGWR适当时机将Redo日志缓冲区信息

89010

Oracle,内存结构主要由什么组成?

(1)数据缓冲区(Database Buffer Cache):也叫数据库缓冲区高速缓存,用于缓存数据文件检索出来数据块,可以大大提高查询和更新数据性能,是数据库实例重要组成部分。...参数DB_CACHE_SIZE可指定数据缓冲区大小,需要在参数文件静态修改。Oracle处理某个查询时,服务器进程会在Buffer Cache查找它所需所有数据块。...如果未在Buffer Cache中找到所需要数据块,那么服务器进程会数据文件读取所需数据块,并在Buffer Cache添加一个副本。...保留池中数据不会被替换出去,可以将常用小表放置该区可以降低I/O操作。可以通过DB_KEEP_CACHE_SIZE参数指定保留池大小。该区域大小不会被ASMM自动调节。...Redo Entry是Oracle用户会话占用内存里将这些变更记录复制到Redo日志缓冲区内,其在内存是一段连续内存块,Oracle利用后台进程LGWR适当时机将Redo日志缓冲区信息

37510

Oracle数据库优化经验总结建议收藏

oracle实例参数   4)建立合适索引(减少IO)   5)将索引数据和表数据分开在不同表空间上(降低IO冲突)   6)建立表分区,将数据分别存储不同分区上(以空间换取时间,减少IO...语句(如全部大写,全部小写等)oracle解析语句后会放置到共享池中, 如:   select * from Emp where name=?...这个语句只会在共享池中有一条,而如果是字符串的话,那就根据不同名字存在不同语句,所以占位符效率较好   3)数据库不仅仅是一个存储数据地方,同样是一个编程地方,一些耗时操作,可以通过存储过程等在用户较少情况下执行...,可能oracle优化器并不会优化到这个程度, oracle 多表查询是根据FROM字句从右到左数据进行,那么最好右边表(也就是基础表)选 择数据较少表,这样排序更快速,如果有link表(多对多中间表...Oracle Where字句时右往左处理,表之间连接写在其他条件之前,能过滤掉非常多数据条件,放在where末尾, 另外!

79810
领券