查看: 3139|回复: 14

[PL/SQL] 怎么优化一下下面的sql语句

[复制链接]
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:022011新春纪念徽章
日期:2011-01-12 11:41:59ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26
发表于 2011-12-27 22:01 | 显示全部楼层 |阅读模式
各位,在系统awr里面看到这很多类似的语句,导致系统shared_pool很大,而且atch: library cache,latch: shared pool等待事情排在top5里面.
估计应该是类似于下面的查询语句变量太多导致共享池太忙了,有没有办法优化下下面的sql语句;
EventWaitsTime(s)Avg Wait(ms)% Total Call TimeWait Class
CPU time
53,912
29.4
latch: library cache
26,010
47,307
1,819
25.8
Concurrency
log file sync
352,549
39,141
111
21.3
Commit
latch: shared pool
39,447
7,625
193
4.2
Concurrency
db file sequential read
739,040
5,675
8
3.1
User I/O

select * from TAB_BILL_CODE
where bill_code in ( :1 , :2 , :3 , :4 , :5 , :6 , :7 , :8 , :9 , :10 , :11 , :12 , :13 , :14 , :15 , :16 , :17 , :18 , :19 , :20 , :21 , :22 , :23 , :24 ,
:25 , :26 , :27 , :28 , :29 , :30 , :31 , :32 , :33 , :34 , :35 , :36 , :37 , :38 , :39 , :40 , :41 , :42 , :43 , :44 , :45 , :46 , :47 , :48 , :49 , :50 ,
:51 , :52 , :53 , :54 , :55 , :56 , :57 , :58 , :59 , :60 , :61 , :62 , :63 , :64 , :65 , :66 , :67 , :68 , :69 , :70 , :71 , :72 , :73 , :74 , :75 , :76 ,
  :77 , :78 , :79 , :80 , :81 , :82 , :83 , :84 , :85 , :86 , :87 , :8 8 , :89 , :90 , :91 , :92 , :93 , :94 , :95 , :96 , :97 , :98 , :99 , :100 , :101 ,
  :102 , :103 , :104 , :105 , :106 , :107 , :108 , :109 , :110 , :111 , :112 , :113 , :114 , :115 , :116 , :117 , :118 , :119 , :120 , :121 , :122 , :123 ,
   :124 , :125 , :126 , :127 , :128 , :129 , :130 , :131 , :132 , :133 , :134 , :135 , :136 , :137 , :138 , :139 , :140 , :141 , :142 , :143 , :144 , :145 ,
    :146 , :147 , :148 , :149 , :150 , :151 , :152 , :153 , :154 , :155 , :156 , :157 , :158 , :159 , :160 , :161 , :162 , :163 , :164 , :165 , :166 , :167 ,
     :168 , :169 , :170 , :171 , :172 )
union all
select * from TAB_BILL_CODE
where bill_code in ( :173 , :174 , :175 , :176 , :177 , :178 , :179 , :180 , :181 , :182 , :183 , :184 , :185 , :186 , :187 , :188 , :189 , :190 , :191 ,
:192 , :193 , :194 , :195 , :196 , :197 , :198 , :199 , :200 , :201 , :202 , :203 , :204 , :205 , :206 , :207 , :208 , :209 , :210 , :211 , :212 , :213 ,
  :214 , :215 , :216 , :217 , :218 , :219 , :220 , :221 , :222 , :223 , :224 , :225 , :226 , :227 , :228 , :229 , :230 , :231 , :232 , :233 , :234 , :235 ,
   :236 , :237 , :238 , :239 , :240 , :241 , :242 , :243 , :244 , :245 , :246 , :247 , :248 , :249 , :250 , :251 , :252 , :253 , :254 , :255 , :256 , :257 ,
    :258 , :259 , :260 , :261 , :262 , :263 , :264 , :265 , :266 , :267 , :268 , :269 , :270 , :271 , :272 , :273 , :274 , :275 , :276 , :277 , :278 , :279 ,
     :280 , :281 , :282 , :283 , :284 , :285 , :286 , :287 , :288 , :289 , :290 , :291 , :292 , :293 , :294 , :295 , :296 , :297 , :298 , :299 , :300 , :301 ,
      :302 , :303 , :304 , :305 , :306 , :307 , :308 , :309 , :310 , :311 , :312 , :313 , :314 , :315 , :316 , :317 , :318 , :319 , :320 , :321 , :322 , :323 ,
       :324 , :325 , :326 , :327 , :328 , :329 , :330 , :331 , :332 , :333 , :334 , :335 , :336 , :337 , :338 , :339 , :340 , :341 , :342 , :343 , :344 )
union all
后面还有一串
论坛徽章:
14
2012新春纪念徽章
日期:2012-01-04 11:58:182012新春纪念徽章
日期:2012-02-07 09:59:35ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59马上加薪
日期:2014-08-09 14:42:472014年世界杯参赛球队: 美国
日期:2014-06-04 09:05:20优秀写手
日期:2014-03-12 06:00:13马上有对象
日期:2014-02-18 16:44:082014年新春福章
日期:2014-02-18 16:44:082013年新春福章
日期:2013-02-25 14:51:24奥运会纪念徽章:水球
日期:2012-10-11 16:40:16
发表于 2011-12-27 22:33 | 显示全部楼层
如果是我,会用 with代替TAB_BILL_CODE,这样只需访问一遍。

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:022011新春纪念徽章
日期:2011-01-12 11:41:59ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26
 楼主| 发表于 2011-12-28 08:59 | 显示全部楼层
这语句是动态生成的,有多少个单号就会生成多少个变量,用with怎么去做?

使用道具 举报

回复
论坛徽章:
51
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22铁扇公主
日期:2012-02-21 15:03:13最佳人气徽章
日期:2012-03-13 17:39:18ITPUB季度 技术新星
日期:2012-05-22 15:10:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-12 09:34:36itpub13周年纪念徽章
日期:2014-09-28 10:55:55
发表于 2011-12-28 10:27 | 显示全部楼层
muyu208 发表于 2011-12-28 08:59
这语句是动态生成的,有多少个单号就会生成多少个变量,用with怎么去做?

看看AWR行吗?
这个语句执行的频繁吗?

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:022011新春纪念徽章
日期:2011-01-12 11:41:59ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26
 楼主| 发表于 2011-12-28 10:37 | 显示全部楼层
本帖最后由 muyu208 于 2011-12-28 10:41 编辑

基本上awr里面全是类似的SQL语句,导致现在共享池都20G,sga总共45G。执行比较频繁

使用道具 举报

回复
论坛徽章:
3
2012新春纪念徽章
日期:2012-01-04 11:58:18双黄蛋
日期:2012-01-05 14:01:192014年世界杯参赛球队: 厄瓜多尔
日期:2014-07-02 10:32:37
发表于 2011-12-28 10:48 | 显示全部楼层
能不能这样处理,建一张内存表,语句改成 select * from TAB_BILL_CODE  where bill_code =替换变量,然后把这个结果不断的插入那个内存表,最后做一遍查询即可

使用道具 举报

回复
论坛徽章:
3
2012新春纪念徽章
日期:2012-01-04 11:58:18双黄蛋
日期:2012-01-05 14:01:192014年世界杯参赛球队: 厄瓜多尔
日期:2014-07-02 10:32:37
发表于 2011-12-28 10:49 | 显示全部楼层
muyu208 发表于 2011-12-28 10:37
基本上awr里面全是类似的SQL语句,导致现在共享池都20G,sga总共45G。执行比较频繁

你给出的那种确实会造成很多的硬解析

使用道具 举报

回复
论坛徽章:
51
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22铁扇公主
日期:2012-02-21 15:03:13最佳人气徽章
日期:2012-03-13 17:39:18ITPUB季度 技术新星
日期:2012-05-22 15:10:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-12 09:34:36itpub13周年纪念徽章
日期:2014-09-28 10:55:55
发表于 2011-12-28 11:04 | 显示全部楼层
muyu208 发表于 2011-12-28 10:43
awr报告如下

其实你这个SQL的逻辑基本都一样
就是参数不一样~这个得跟开发沟通我觉得
看看业务逻辑能不能修改下

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:34:022011新春纪念徽章
日期:2011-01-12 11:41:59ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26
 楼主| 发表于 2011-12-28 11:07 | 显示全部楼层
iori809 发表于 2011-12-28 11:04
其实你这个SQL的逻辑基本都一样
就是参数不一样~这个得跟开发沟通我觉得
看看业务逻辑能不能修改下

这里面的变量值的实值,是通过记事本导入或pda传入到程式的,也就是说有多少个单号,就会产生多少个变量

使用道具 举报

回复
论坛徽章:
51
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22铁扇公主
日期:2012-02-21 15:03:13最佳人气徽章
日期:2012-03-13 17:39:18ITPUB季度 技术新星
日期:2012-05-22 15:10:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-12 09:34:36itpub13周年纪念徽章
日期:2014-09-28 10:55:55
发表于 2011-12-28 11:47 | 显示全部楼层
muyu208 发表于 2011-12-28 11:07
这里面的变量值的实值,是通过记事本导入或pda传入到程式的,也就是说有多少个单号,就会产生多少个变量

select count(*) from v$sql
看看
还有bvnshr6s9cn9x
这些语句的version count过高可以先解决一下~应该也能缓解一下

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表