hc学习平台

 找回密码
 立即注册
搜索
热搜: 活动 交友 javakc
 › 学习交流 › Oracle › 如何减少数据库的硬解析操作
查看: 2020|回复: 4
打印 上一主题 下一主题

如何减少数据库的硬解析操作

[复制链接]

2249

主题

0

帖子

0

博客

admin

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

跳转到指定楼层
楼主
发表于2015-01-24 10:57:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
select * from tbl where name like '%javakc%'

0

主题

785

帖子

2

博客

撸天啦

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2016-08-23 19:57:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

解析操作分为软解析和硬解析。

软解析:真个sql语句可以输出一个hash值,那么系统的cache中也会有一个hash值,第一,会查看cache中有没有这个hash值。如果俩个hash值相同的话,则会省去优化器的相关工作。这是软解析。

如果,cache中没有这个值,或者不相同,那么优化器将进行创建解析树,生成执行计划的动作,这个叫做硬解析。那么减少硬解析的的办法,就是把sql写正确。重复用以前写过的sql语句。

0

主题

1700

帖子

0

博客

song

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2016-09-09 15:11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

如何优化硬解析操作

1、更改参数 cursor_sharing

参数cursor_sharing决定了何种类型的SQL能够使用相同的SQLarea

2、使用绑定变量

绑定变量要求变量名称,数据类型及长度是一致


尽可能的避免硬解析,因为硬解析需要更多的CUP资源

cursor_sharing参数应权衡利弊,需要考虑更多的similar与force带来的影响

尽可能的使用绑定变量来避免硬解析

WR

0

主题

1674

帖子

0

博客

WR

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2016-09-08 18:04:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

select *from tbl where name like 'javakc%'

简历索引

沙发
发表于2016-09-09 17:02:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

解析操作分为软解析和硬解析。

软解析:sql语句可以输出一个hash值,那么系统的cache中也会有一个hash值,第一,会查看cache中有没有这个hash值。如果俩个hash值相同的话,则会省去优化器的相关工作。

如果cache中没有这个值,或者不相同,那么优化器将进行创建解析树,生成执行计划的动作,这个叫做硬解析。

那么减少硬解析的的办法,就是把sql写正确。重复用以前写过的sql语句。


0

主题

1450

帖子

0

博客

Sarbr

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2016-09-11 18:00:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

尽量不使用 like '%.....%'

对于like '%.....%',Oracle可以应用column上的index

对于like '%.....%'的可以利用reverse+function index的形式

0

主题

1518

帖子

0

博客

Cracia

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2016-09-22 13:29:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

一个最好的办法就是,最常用的最有效的办法就是让sql共享

1)sql语句完全相同,执行一百个sql语句,如果99个sql语句都是一样的话,这里这个相同的语句就发生了98次软解析而只有一次硬解析

共享sql就是让sql完全相同,librarycache里面有好多链。链善挂了好多chunk,chunk里面有sql和sql执行计划,一个sql语句进入到数据库,要对sql语句进行解析

首先看这个sql语句有没有被解析过。

2)判断语句有没有共享

3)使用绑定变量

0

主题

1902

帖子

0

博客

王之神判

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-08-22 13:35:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用绑定变量,减少数据库硬解析

0

主题

121

帖子

0

博客

wangyuemin1

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-08-23 16:07:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
减少数据访问

0

主题

1932

帖子

0

博客

740317431

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-08-24 17:43:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬解析多了会消耗cpu资源,容易产生4031错误

一个最好的办法就是,最常用的最有效的办法就是让sql共享

1)sql语句完全相同,执行一百个sql语句,如果99个sql语句都是一样的话,这里这个相同的语句就发生了98次软解析而只有一次硬解析

共享sql就是让sql完全相同,librarycache里面有好多链。链善挂了好多chunk,chunk里面有sql和sql执行计划,一个sql语句进入到数据库,要对sql语句进行解析

首先看这个sql语句有没有被解析过。

2)判断语句有没有共享

3)使用绑定变量

0

主题

316

帖子

0

博客

guqihang

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2017-11-27 17:33:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
* 改成准确的字段

0

主题

273

帖子

0

博客

老李

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2018-08-14 10:23:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
绑定变量,共享sql

0

主题

982

帖子

0

博客

m1359292934

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

沙发
发表于2019-12-03 16:24:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

解析操作分为软解析和硬解析。

软解析:真个sql语句可以输出一个hash值,那么系统的cache中也会有一个hash值,第一,会查看cache中有没有这个hash值。如果俩个hash值相同的话,则会省去优化器的相关工作。这是软解析。

如果,cache中没有这个值,或者不相同,那么优化器将进行创建解析树,生成执行计划的动作,这个叫做硬解析。那么减少硬解析的的办法,就是把sql写正确。重复用以前写过的sql语句。



站点统计|举报|Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, , Processed in 0.195171 second(s), 9 queries .

Powered by javakc! X1.0

© 2004-2014 javakc

f1208.com 备案号:京ICP备14030918号-1

返回顶部