宽屏网站欣赏,wordpress页面中设置网址导航插件,天津建筑工程信息平台,搜素引擎排名优化计费方式当客户端进程#xff0c;将SQL语句通过监听器发送到Oracle时, 会触发一个Server process生成#xff0c;来对该客户进程服务。Server process得到SQL语句之后#xff0c;对SQL语句进行Hash运算#xff0c;然后根据Hash值到library cache中查找#xff0c;如果存在#xf… 当客户端进程将SQL语句通过监听器发送到Oracle时, 会触发一个Server process生成来对该客户进程服务。Server process得到SQL语句之后对SQL语句进行Hash运算然后根据Hash值到library cache中查找如果存在则直接将library cache中的缓存的执行计划拿来执行最后将执行结果返回该客户端这种SQL解析叫做软解析如果不存在则会对该SQL进行解析parse然后执行返回结果这种SQL解析叫做硬解析。1.硬解析的步骤硬解析一般包括下面几个过程1对SQL语句进行语法检查看是否有语法错误。比如select from where 等的拼写错误如果存在语法错误则推出解析过程2通过数据字典(row cache)检查SQL语句中涉及的对象和列是否存在。如果不存在则推出解析过程。3检查SQL语句的用户是否对涉及到的对象是否有权限。如果没有则推出解析4通过优化器创建一个最优的执行计划。这个过程会根据数据字典中的对象的统计信息来计算多个执行计划的cost从而得到一个最优的执行计划。这一步涉及到大量的数据运算从而会消耗大量的CPU资源(library cache最主要的目的就是通过软解析来减少这个步骤)5将该游标所产生的执行计划SQL文本等装载进library cache中的heap中。2.软解析所谓软解析就是因为相同文本的SQL语句存在于library cache中所以本次SQL语句的解析就可以去掉硬解析中的一个活多个步骤。从而节省大量的资源的耗费。3.软软解析所谓的软软解析就是不解析。当设置了session_cached_cursors参数时当某个session第三次执行相同的SQL语句时则会把该SQL语句的游标信息转移到该session的PGA中。这样当该session在执行该SQL语句时会直接从PGA中取出执行计划从而跳过硬解析的所有步骤。SQL show parameter cursor;NAME TYPE VALUE------------------------------------ ----------- ------------------------------cursor_sharing string EXACTcursor_space_for_time boolean FALSEopen_cursors integer 300session_cached_cursors integer 20open_cursors设定每个session(会话)最多能够同时打开多少个cursors(游标)。摘自http://www.itpub.net/thread-796685-1-1.htmlSESSION_CACHED_CURSORS的值就是说的是一个session可以缓存多少个cursor让后续相同的SQL语句不再打开游标,从而避免软解析的过程来提高性能。(绑定变量是解决硬解析的问题)软解析同硬解析一样,比较消耗资源.所以这个参数非常重要。oracle有一个概念那就是session cursor cache,中文描述就是有一块内存区域用来存储关闭了的cursor。当一个cursor关闭之后oracle会检查这个cursor的request次数是否超过3次如果超过了三次就会放入session cursor cache这样在下次parse的时候就可以从session cursor cache中找到这个statement, session cursor cache的管理也是使用LRU。session_cached_cursors这个参数是控制session cursor cache的大小的。session_cached_cursors定义了session cursor cache中存储的cursor的个数。这个值越大则会消耗的内存越多。另外检查这个参数是否设置的合理可以从两个statistic来检查。SQL select name,value from v$sysstat where name like %cursor%;NAME VALUE---------------------------------------------------------------- ----------opened cursors cumulative 16439opened cursors current 55session cursor cache hits 8944session cursor cache count 101cursor authentications 353SQL select name,value from v$sysstat where name like %parse%;NAME VALUE---------------------------------------------------------------- ----------parse time cpu 0parse time elapsed 0parse count (total) 17211parse count (hard) 1128parse count (failures) 2parse counttotal就是总的parse次数中session cursor cache hits就是在session cursor cache中找到的次数所占比例越高性能越好。如果比例比较低并且有剩余内存的话可以考虑加大该参数。Oracle 9i及以前,该参数缺省是0,10G上缺省是20。 转载于:https://blog.51cto.com/wilsonking/1618007