Oracle硬解析与软解析

概述

  • 当客户端进程,将SQL语句通过监听器发送到Oracle时, 会触发一个Server process生成,来对该客户进程服务。Server process得到SQL语句之后,对SQL语句进行Hash运算,然后根据Hash值到library cache中查找,如果存在,则直接将library cache中的缓存的执行计划拿来执行,最后将执行结果返回该客户端,这种SQL解析叫做软解析;如果不存在,则会对该SQL进行解析parse,然后执行,返回结果,这种SQL解析叫做硬解析。

硬解析

  1. 对SQL语句进行语法检查,看是否有语法错误。比如select from where 等的拼写错误,如果存在语法错误,则退出解析过程;
  2. 通过数据字典(row cache),检查SQL语句中涉及的对象和列是否存在。如果不存在,则退出解析过程
  3. 检查SQL语句的用户是否对涉及到的对象是否有权限。如果没有则退出解析;
  4. 通过优化器创建一个最优的执行计划。这个过程会根据数据字典中的对象的统计信息,来计算多个执行计划的cost,从而得到一个最优的执行计划。这一步涉及到大量的数据运算,从而会消耗大量的CPU资源;(library cache最主要的目的就是通过软解析来减少这个步骤);
  5. 将该游标所产生的执行计划,SQL文本等装载进library cache中的heap中。

软解析

  • 所谓软解析,就是因为相同文本的SQL语句存在于librarycache中,所以本次SQL语句的解析就可以去掉硬解析中的一个或多个步骤。从而节省大量的资源的耗费。

测试数据

请输入图片描述

JAVA代码

pstmt = conn.prepareStatement(sql);
pstmt.setString(1, value1);
pstmt.setString(2, value2);
rs = pstmt.excuteQuery();
...
sql语句中变量用?代替

标签: none

添加新评论