加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 数据库驱动程序中编译的预准备语句是否仍需要在数据库

发布时间:2021-03-09 20:16:07 所属栏目:站长百科 来源:网络整理
导读:在Oracle JDBC驱动措施中,有一个选项可以缓存预筹备语句.我对此的领略是,筹备好的语句由驱动措施预编译,然后举办缓存,从而进步缓存预筹备语句的机能. 我的题目是,这是否意味着数据库永久不必编译那些筹备好的语句? JDBC驱动措施是否发送了一些预编译暗示,或

在Oracle JDBC驱动措施中,有一个选项可以缓存预筹备语句.我对此的领略是,筹备好的语句由驱动措施预编译,然后举办缓存,从而进步缓存预筹备语句的机能.

我的题目是,这是否意味着数据库永久不必编译那些筹备好的语句? JDBC驱动措施是否发送了一些预编译暗示,可能数据库自己是否还存在某种理会/编译?

办理要领

当您行使隐式语句高速缓存(或显式语句高速缓存的Oracle扩展)时,Oracle驱动措施将在(!)close()之后高速缓存预筹备或可挪用语句,以便与物理毗连重用.

以是会产生什么:假如行使了筹备好的Statement,而且物理毗连从未见过它,它会将SQL发送到DB.按照DB之前是否已经看过该语句,它将举办硬理会或软理会.以是凡是假如你有一个10毗连池,你会看到10个理会,个中一个理会.

在毗连上封锁语句后,Oracle驱动措施会将理会语句(共享游标)的句柄放入LRU缓存中.下次在该毗连上行使prepareStatement时,它会找到要行使的缓存句柄,而基础不必要发送SQL.这导致执行NO PARSE.

假如在物理毗连上行使了多个(差异的)预筹备语句,而不是缓存巨细,则封锁最长的未行使的开放共享游标.这会在下次再次行使该语句时导致另一个软理会 – 由于SQL必要再次发送随处事器.

这根基上与中间件的一些数据源更一样平常地实现(譬喻JBoss中的prepared-statement-cache)成果沟通.仅行使个中一个来停止双重缓存.

你可以在这里找到具体信息:

http://docs.oracle.com/cd/E11882_01/java.112/e16548/stmtcach.htm#g1079466

另请查察支持此成果并与FAN交互的Oracle同一毗连池(UCP).

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读