最近一客户反映他们的ORACLE系统运行速度变慢了,顾客就是上帝,二话没说我就跑到现场,一翻检查下来没有发现系统有什么大的问题,告警文件没有任何错误提示.随后运行statspack进行状态分析,报告显示数据库的hard
parsing比较大,后来想想导致hard pasing无非以下几个方面的原因:
1.系统运行时间不长,或刚重启,或者执行了alter system flush shared
pool刷了共享池.由于系统运行时间较长所以此项排除.
2.shared pool太小,检查报告发现使用率己达95%以上,所以考虑增加shared pool.
3.绑定变量,hard parsing过高和绑定变量也有密切的关系,通过top 5
sql找出相关的语句,对应用程度进行调整,绑定了相关变量.这样可以大大减少hard parsing
通过以上2,3两步后系统己恢复正常.
注释:绑定变量
通过一个例子大家就可以理解绑定变量在减少hard parsing方面的作用了
SELECT fname, lname, pcode
FROM cust WHERE id =
674;
SELECT fname, lname, pcode FROM cust WHERE id = 234;
SELECT fname, lname, pcode FROM cust WHERE id = 332;
如果没绑定变量,则系统会分别解析这三条语句,而绑定变量后只需解析一次即可,
SELECT fname, lname, pcode FROM cust WHERE id =
:cust_no;
到此我想您应该对绑定变量有了详细一的理解了吧..
另外,执行SQL语句时,会首先将SQL文本转化为ASCii码,然后用hash函数运算,将结果与librarycahce中的值进行比较,没命中时就进行硬解析,命中则进行软解析.
hard
parsing步骤:
1.SQL语法检查
2.SQL所涉对象检查
3.对象名称转换
4.权限检查
5.执行计划
6.将SQL文本,执行计划装进heap中
SQL语句及其他信息在shared
pool中被看作是游标,分为父游标与子游标,父游标存放SQL文本与优化目标,子游标存储执行计划和绑定变量.父游标可以创建多个子游标.创建新的子游标时会对执行计划进行分析.占用很多的系统资源.
Mirc
2009-06-20