`
足至迹留
  • 浏览: 497141 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<让oracle跑得更快-6> 绑定变量

阅读更多
变量绑定OLTP系统中一个非常值得关注的技术点。良好的变量绑定会使OLTP系统数据库中的sql执行速度飞快,内存效率极高;不绑定变量可能会使OLTP数据库不堪重负,资源被sql解析严重消耗,系统显得滞重而缓慢。

6.1 什么是变量绑定,为什么要做变量绑定
在介绍绑定变量以前,首先要介绍一下sql究竟是如何被执行的,知道了sql执行的具体细节之后,才能讨论为什么以及什么时候要做变量绑定。
当一个用户与数据库建立起了连接后,会向数据库发出操作请求,也就是向数据库发送一条(或是几条或一个pl/sql包)sql语句。Oracle在接到这条sql之后,首先会将这个sql做一个hash函数运算,得到一个hash值,然后到共享池中寻找是否有和这个hash值匹配的sql存在。如果找到了,oracle将直接使用已经存在的sql的执行计划去执行当前的sql,然后将结果返回给用户;如果在共享池中没有找到相同hash值的sql,oracle会认为这是一条新的sql,将会按照下面的顺序来执行:
A. 语法分析
主要看这条sql是否符合oracle规定的语法规则,如果发现语法有误,将向用户抛出一个错误信息。

B. 语义分析
当语法分析通过以后,oracle将对这条sql做一些对象、权限方面的检查,查看sql中操作的表是否存在,表中的列是否正确,用户是否有操作这个对象的权限等。这个阶段会自动把oracle中的小写转为大写(引号内的内容除外)(待确认)。

C. 生成执行计划
这个过程oracle将通过一些列的操作,来做出最后sql的执行计划,比如查看操作对象的统计信息,动态采样等。

D. Sql的执行
Oracle按照上一步生成的执行计划,实际地执行sql语句,并将结果返回给用户。至此,一条sql语句执行完毕。

语法分析、语义分析、生成执行计划这些工作十分消耗资源,所以通常称为硬分析(hard parse),而直接通过相同hash值从共享池中获取执行计划则称为软分析(soft parse)。

绑定变量是什么,为什么要绑定变量?
绑定变量就其本质来说就是把本来需要oracle做硬分析的sql变成了软分析,以减少oracle花费在sql解析上的时间和资源。

6.2 为什么说OLTP必须要求变量绑定而OLAP不应该绑定变量
OLTP系统中,sql语句大多是比较简单或操作的结果集都很小。如果在这些表上创建了索引,那么这种极小结果集的操作使用索引最适合,并且几乎所有sql的执行计划中的索引都会毫无悬念地被选择。在这种执行计划几乎是唯一的情况下,oracle使用变量来代替谓词常量,使用同一个执行计划时合适的。
OLAP系统再sql的操作中就复杂得多,OLAP数据库上大多数时候运行的是一些报表sql,这些sql经常会用到聚合查询(比如group by),而且结果集也非常庞大,在这种情况下,索引并不是必然的选择,甚至有的时候全表扫描的性能会优于索引,即使相同的sql,如果谓词条件不同,执行计划都可能不同。

我们大致可以得出下面的结论:
(1) OLAP系统完全没有必要绑定变量,那样只会带来负面的影响,比如导致sql选择了错误的执行计划,这个代价有时候是灾难性的;让oracle对每条sql做硬分析,确切地知道谓词条件的值,这对执行计划的选择至关重要,这样做的原因是,在OLAP系统中,sql硬分析的代价是可以忽略的,系统的资源基本上是用于做大的查询,和查询比较起来,sql解析消耗的资源显得微不足道。所以得到一个最优的执行计划变得尤为重要。
(2) 在OLAP系统上,让oracle确切地知道谓词的数值至关重要。它直接决定了sql执行计划的选择,这样做的方式就是不要绑定变量。
(3) 在OLAP系统中,表、索引的分析至关重要,因为它是oracle为sql做出正确的执行计划的信息来源和依据,所以需要建立一套能够满足系统要求的对对象分析的定时执行任务。
0
0
分享到:
评论

相关推荐

    easyflow表结构

    &lt;driver-class&gt;oracle.jdbc.driver.OracleDriver&lt;/driver-class&gt; &lt;user-name&gt;nana&lt;/user-name&gt; &lt;password&gt;easyflowgp&lt;/password&gt; &lt;min-pool-size&gt;20&lt;/min-pool-size&gt; &lt;max-pool-size&gt;100&lt;/max-pool-size&gt; ...

    JBoss 下配置 Oracle 数据源

    首先,我们需要将 %JBOSS_HOME%\docs\examples\jca\oracle-ds.xml 复制到 %JBOSS_HOME%\server\default\deploy 目录下。这一步骤是必不可少的,因为 oracle-ds.xml 文件包含了 Oracle 数据源的基本配置信息。 二、...

    SSH连接Oracle数据库.txt

    &lt;property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/&gt; &lt;!-- 配置数据库URL --&gt; &lt;property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"/&gt; &lt;!-- 配置数据库用户名 --&gt; ...

    xtts-aix-linux测试20200128.pdf

    本次采用手动xtts的方式,该方法适用任意平台之间,源端&gt;=oracle10.2.0.3,目标端&gt;=11.2.0.4,包括windows&lt;-&gt;linux,aix&lt;-&gt;linux,windows&lt;-&gt;aix,solaris&lt;-&gt;windows,solaris&lt;-&gt;linux,aix&lt;-&gt;solaris,hp-unix&lt;-&gt;aix,hp-...

    让Oracle跑得更快

    "让Oracle跑得更快"这个主题聚焦于提升数据库效率,确保系统运行更加流畅,为业务提供更快的服务响应。 首先,我们需要理解影响Oracle数据库性能的关键因素。这包括硬件配置、操作系统参数、数据库架构设计、SQL...

    让Oracle跑得更快2:基于海量数据的数据库设计与.pdf

    “让Oracle跑得更快2:基于海量数据的数据库设计与”这一主题,正是聚焦于解决这一问题,旨在通过合理的数据库设计和性能优化策略,提升Oracle在处理大规模数据集时的效率。 ### 一、海量数据处理 海量数据处理的...

    也谈oracle 数据库的绑定变量特性及应用

    Oracle 数据库的绑定变量特性是其优化性能的关键技术之一,主要应用于提高数据库应用程序的可伸缩性和效率。绑定变量允许开发者创建动态SQL语句,其中的变量在执行时才提供具体的值,而不是硬编码到查询中。这种做法...

    jeesite 数据库由MySQL转Oracle

    &lt;artifactId&gt;dbunit-database-oracle&lt;/artifactId&gt; &lt;/dependency&gt; &lt;!-- mysql jdbc driver --&gt; &lt;!-- &lt;dependency&gt; --&gt; &lt;!-- &lt;groupId&gt;mysql&lt;/groupId&gt; --&gt; &lt;!-- &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt; ...

    让Oracle跑得更快(扫描版).pdf 高清下载

    标题和描述均指向一个主题:“让Oracle跑得更快”,这显然是一份专注于提升Oracle数据库性能的资料。Oracle作为全球领先的关系型数据库管理系统之一,其性能优化对于提高数据处理速度、增强系统响应能力和确保业务...

    oracle 数据库的绑定变量特性及应用

    Oracle 数据库的绑定变量特性及应用 绑定变量是 Oracle 数据库的一种特性,它旨在提高数据库系统的性能和可扩展性。在本文中,我们将详细地探讨绑定变量的目的、命名方法、使用限制条件和应用实例。 为什么使用...

    让Oracle跑得更快2基于海量数据的数据库设计与优化

    让Oracle跑得更快2基于海量数据的数据库设计与优化

    让oracle跑得更快

    由于文件中的部分内容是重复的链接,我们将忽略这些重复内容,并专注于标题和描述中提到的“让oracle跑得更快”以及“如果你深入学习oracle,如果你想学习优化oracle,下它吧!”。以下是对这些知识点的详细说明: ...

    C#通用数据库访问类 常用6种数据库VS2008

    --&lt;add key="typeName" value="Common.DataAccess.OracleDbOperator"/&gt;--&gt;&lt;!-- Oracle方式 --&gt; &lt;!--&lt;add key="typeName" value="Common.DataAccess.OleDBOperator"/&gt;--&gt;&lt;!-- Access(兼容)方式 --&gt; &lt;/configuration...

    让Oracle跑得更快—Oracle 10g性能分析与优化思路ch03.pdf

    1. **绑定变量**:通过绑定变量可以显著减少共享池中的Latch争用,提高SQL语句的重用率,从而提升性能。 2. **减少热点数据块**:通过对数据分布进行优化,比如使用分区技术,可以减少数据缓冲池中的Latch争用。 ...

    Jboss7.1.1p配置mysql和oracle以及项目调用参照.pdf

    &lt;driver name="oracle" module="com.oracle.ojdbc6"&gt; &lt;driver-class&gt;oracle.jdbc.OracleDriver&lt;/driver-class&gt; &lt;xa-datasource-class&gt;oracle.jdbc.xa.client.OracleXADataSource&lt;/xa-datasource-class&gt; &lt;/driver...

    jboss配置数据源

    其次,需要将oracle的事务处理数据源配置文件oracle-xa-ds.xml复制到/server/default/deploy目录下。如果使用非事务处理的数据源,则将oracle-ds.xml文件复制到/server/default/deploy目录下。 然后,需要修改...

    让Oracle跑得更快.pdf-Oracle 10g 性能分析与优化思路

    《让Oracle跑得更快》是针对Oracle 10g数据库性能分析与优化的一份深入指南。Oracle数据库系统作为全球广泛使用的数据库管理系统之一,其性能优化对于企业数据处理效率至关重要。Oracle 10g版本在性能方面引入了许多...

    jboss7连接oracle驱动及配置

    &lt;driver&gt;oracle-jdbc&lt;/driver&gt; &lt;pool&gt; &lt;min-pool-size&gt;5&lt;/min-pool-size&gt; &lt;max-pool-size&gt;20&lt;/max-pool-size&gt; &lt;/pool&gt; &lt;security&gt; &lt;user-name&gt;your_username&lt;/user-name&gt; &lt;password&gt;your_password&lt;/password...

    《让Oracle跑得更快:Oracle 10g性能分析与优化思路》PDF版本下载.txt

    《让Oracle跑得更快:Oracle 10g性能分析与优化思路》PDF版本下载

    Oracle数据库分区和压缩技术应用——让Oracle跑得更快.pdf

    Oracle数据库分区和压缩技术应用——让Oracle跑得更快.pdf

Global site tag (gtag.js) - Google Analytics