ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 1091|回复: 10

一句SQL查询挂了,为何? [复制链接]

注册会员

因为专注,所以专业

精华贴数
1
技术积分
2487
社区积分
5
注册时间
2004-10-5
论坛徽章:
10
授权会员
日期:2007-07-18 11:34:32ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鸡
日期:2008-12-02 12:45:45生肖徽章2007版:龙
日期:2008-12-07 18:27:322009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猪
日期:2009-02-18 12:56:472009日食纪念
日期:2009-07-22 09:30:00
发表于 2008-3-10 10:19:56 |显示全部楼层
今天一上班,就看到metalink的提醒文章,文章如下:
https://metalink.oracle.com/meta ... mp;id=33-722046.993

文章内容如下:
我查询完毕之后,我的也挂了,挺奇怪。

单独对view 查询(dba查询)没有问题。
对view 做执行计划报如下的错:
ORA-01039 insufficient privileges on underlying objects of the view

    Cause: An attempt was made to explain plan on other people's view without the necessary privileges on the underlying objects of the view.

    Action: Get necessary privileges or do not perform the offending operation.

各位也分析一下可能原因拉。

-----------------------------------------
Subject: SQL query from v$session and v$lock hangs


SQL query from v$session and v$lock hangs

Please can you help, When I run the following SQL, it just hangs.

select c.sid,c.username from v$session c,v$lock b
where C.USERNAME is not null
and b.sid = c.sid

if I run selects on the individual views, records are output immediately

-----------------------------------------
真,善,美
Oracle, Oracle ERP(Finance Module), Oracle Hyperion
blog: http://www.xiaobaicai.com
Tech:  http://www.appsboss.com

版主

版主

精华贴数
11
技术积分
33853
社区积分
3863
注册时间
2001-10-18
论坛徽章:
109
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-01-04 11:49:54灰彻蛋
日期:2011-12-17 23:16:55数据库板块每日发贴之星
日期:2011-03-16 01:01:02月度精华徽章
日期:2011-04-01 02:15:44SQL数据库编程大师
日期:2011-04-13 12:09:01现任管理团队成员
日期:2011-05-07 01:45:08蜘蛛蛋
日期:2011-10-18 13:05:40季节之章:夏
日期:2011-10-21 12:00:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41紫蛋头
日期:2012-01-06 21:49:51ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52
发表于 2008-3-10 10:26:36 |显示全部楼层
你可以认为是执行计划出了问题,这样就好了
  select /*+ordered use_hash(c b) no_merge(c) no_merge(b)*/
   c.sid,c.username from v$session c,v$lock b
where C.USERNAME is not null
and b.sid = c.sid
欢迎访问乐恒的空间
9/12隆重推出周岁照

提问的智慧 for Oracle[展开版]
提问的智慧Oracle版
0。尝试在google,论坛,metalink,online document里搜索。
1。写清楚你的执行log,报错信息,写清楚DB version , OS
2。Instance 方面的问题,请贴出alertlog
3。network的问题,贴出server的listener.ora , sqlnet.ora 并运行lsnrctl service, 贴出client的tnsnames.ora , sqlnet.ora ,并运行tnsping
4。DB总体性能问题,请于peak time做statspack,并上传statspack report。同时附上CPU/MEM配置,以及CPU IDLE/free menory的情况
5。SQL性能问题,列出当前SQL,以及PLAN。同时应提供表结构,index情况,Table的record数。CBO/RBO,table是否analyze等信息。
6。确保你的问题是Oracle相关。
欢迎访问乐恒的空间

使用道具 举报

注册会员

老耿(OCM)

精华贴数
3
技术积分
7232
社区积分
179
注册时间
2004-8-28
论坛徽章:
19
数据库板块每日发贴之星
日期:2006-09-04 01:02:512011新春纪念徽章
日期:2011-02-18 11:43:352010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:虎
日期:2009-08-12 13:08:002009日食纪念
日期:2009-07-22 09:30:002009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10授权会员
日期:2006-11-24 16:34:00数据库板块每日发贴之星
日期:2006-09-29 01:03:17数据库板块每日发贴之星
日期:2006-09-28 01:02:21数据库板块每日发贴之星
日期:2006-09-22 01:04:01
发表于 2008-3-10 10:29:53 |显示全部楼层
执行计划出问题很正常,就像9i查dba_jobs_running一样。
不想当程序员的系统工程师不是好DBA!
-----------------------------------------------------------------------
0.GDUL,    Block Recover tools.
1.PeOny,  Sampling by Direct SGA.
2.类似logminer的glog目前已经解析出基本的sql,还需要花大量精力完善,估计要到10.1才成完成初始版本。

使用道具 举报

注册会员

来无踪去留影

精华贴数
0
技术积分
1940
社区积分
761
注册时间
2008-1-18
论坛徽章:
14
生肖徽章2007版:蛇
日期:2008-03-24 17:16:29生肖徽章2007版:猴
日期:2009-02-09 15:03:45生肖徽章2007版:猪
日期:2009-03-16 10:15:58生肖徽章2007版:龙
日期:2009-03-27 12:02:52生肖徽章2007版:虎
日期:2009-04-15 17:44:55
发表于 2008-3-10 10:30:29 |显示全部楼层
我运行也挂了,不知道原因
期待ing
拼命赚钱买彩票!

使用道具 举报

注册会员

来无踪去留影

精华贴数
0
技术积分
1940
社区积分
761
注册时间
2008-1-18
论坛徽章:
14
生肖徽章2007版:蛇
日期:2008-03-24 17:16:29生肖徽章2007版:猴
日期:2009-02-09 15:03:45生肖徽章2007版:猪
日期:2009-03-16 10:15:58生肖徽章2007版:龙
日期:2009-03-27 12:02:52生肖徽章2007版:虎
日期:2009-04-15 17:44:55
发表于 2008-3-10 10:34:33 |显示全部楼层
原帖由 rollingpig 于 2008-3-10 10:26 发表
你可以认为是执行计划出了问题,这样就好了
  select /*+ordered use_hash(c b) no_merge(c) no_merge(b)*/
   c.sid,c.username from v$session c,v$lock b
where C.USERNAME is not null
and b.sid = c.sid



果然好了,能解释以下原因吗?
/*+ordered use_hash(c b) no_merge(c) no_merge(b)*/ 不是一段注释吗,为什么还可以对语句起作用呢?

[ 本帖最后由 louis_xu 于 2008-3-10 10:39 编辑 ]
拼命赚钱买彩票!

使用道具 举报

版主

版主

精华贴数
11
技术积分
33853
社区积分
3863
注册时间
2001-10-18
论坛徽章:
109
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-01-04 11:49:54灰彻蛋
日期:2011-12-17 23:16:55数据库板块每日发贴之星
日期:2011-03-16 01:01:02月度精华徽章
日期:2011-04-01 02:15:44SQL数据库编程大师
日期:2011-04-13 12:09:01现任管理团队成员
日期:2011-05-07 01:45:08蜘蛛蛋
日期:2011-10-18 13:05:40季节之章:夏
日期:2011-10-21 12:00:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41紫蛋头
日期:2012-01-06 21:49:51ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52
发表于 2008-3-10 10:44:48 |显示全部楼层
这叫hint , 重点在于 no_merge(c) no_merge(b) , 就是叫Oracle不要把底层的X$table什么的自己重新去做merge,先算出v$session, v$lock的内容,然后把v$session,v$lock当成一个table那样的做join
欢迎访问乐恒的空间
9/12隆重推出周岁照

提问的智慧 for Oracle[展开版]
提问的智慧Oracle版
0。尝试在google,论坛,metalink,online document里搜索。
1。写清楚你的执行log,报错信息,写清楚DB version , OS
2。Instance 方面的问题,请贴出alertlog
3。network的问题,贴出server的listener.ora , sqlnet.ora 并运行lsnrctl service, 贴出client的tnsnames.ora , sqlnet.ora ,并运行tnsping
4。DB总体性能问题,请于peak time做statspack,并上传statspack report。同时附上CPU/MEM配置,以及CPU IDLE/free menory的情况
5。SQL性能问题,列出当前SQL,以及PLAN。同时应提供表结构,index情况,Table的record数。CBO/RBO,table是否analyze等信息。
6。确保你的问题是Oracle相关。
欢迎访问乐恒的空间

使用道具 举报

注册会员

one today is worth two to ...

精华贴数
0
技术积分
8453
社区积分
4
注册时间
2005-11-11
论坛徽章:
30
2008新春纪念徽章
日期:2008-02-13 12:43:032012新春纪念徽章
日期:2012-01-04 11:51:22茶鸡蛋
日期:2011-08-05 15:44:242011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:击剑
日期:2011-01-22 20:59:112010广州亚运会纪念徽章:射击
日期:2011-01-21 15:46:552011新春纪念徽章
日期:2011-01-04 10:35:482010广州亚运会纪念徽章:跆拳道
日期:2010-12-22 10:16:23ITPUB元老
日期:2010-12-21 16:40:452010年世界杯参赛球队:加纳
日期:2010-04-01 13:44:292010新春纪念徽章
日期:2010-03-01 11:08:33祖国60周年纪念徽章
日期:2009-10-09 08:28:00
发表于 2008-3-10 10:50:44 |显示全部楼层

回复 #5 louis_xu 的帖子

那不是注释,是优化器提示!

使用道具 举报

注册会员

因为专注,所以专业

精华贴数
1
技术积分
2487
社区积分
5
注册时间
2004-10-5
论坛徽章:
10
授权会员
日期:2007-07-18 11:34:32ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鸡
日期:2008-12-02 12:45:45生肖徽章2007版:龙
日期:2008-12-07 18:27:322009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:猪
日期:2009-02-18 12:56:472009日食纪念
日期:2009-07-22 09:30:00
发表于 2008-3-10 10:53:42 |显示全部楼层
高人,我喜欢。

原帖由 rollingpig 于 2008-3-10 10:44 发表
这叫hint , 重点在于 no_merge(c) no_merge(b) , 就是叫Oracle不要把底层的X$table什么的自己重新去做merge,先算出v$session, v$lock的内容,然后把v$session,v$lock当成一个table那样的做join
真,善,美
Oracle, Oracle ERP(Finance Module), Oracle Hyperion
blog: http://www.xiaobaicai.com
Tech:  http://www.appsboss.com

使用道具 举报

注册会员

来无踪去留影

精华贴数
0
技术积分
1940
社区积分
761
注册时间
2008-1-18
论坛徽章:
14
生肖徽章2007版:蛇
日期:2008-03-24 17:16:29生肖徽章2007版:猴
日期:2009-02-09 15:03:45生肖徽章2007版:猪
日期:2009-03-16 10:15:58生肖徽章2007版:龙
日期:2009-03-27 12:02:52生肖徽章2007版:虎
日期:2009-04-15 17:44:55
发表于 2008-3-10 10:54:30 |显示全部楼层
明白了
早就听说过hint,可以作优化的
一直迷糊着,谢谢斑竹指教
我也找到了另外一些hint及解释,以后可以多用用
拼命赚钱买彩票!

使用道具 举报

版主

SE-RequieM

精华贴数
0
技术积分
18140
社区积分
138
注册时间
2005-5-16
论坛徽章:
75
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2008-3-10 11:01:28 |显示全部楼层
  1. SYS@MYDB> explain plan for
  2.   2  select /*+ no_merge(c) no_merge(b)*/
  3.   3  c.sid,c.username from v$session c,v$lock b
  4.   4  where C.USERNAME is not null
  5.   5  and b.sid = c.sid
  6.   6  /

  7. 已解释。

  8. 已用时间:  00: 00: 00.00
  9. SYS@MYDB> select * from table(dbms_xplan.display);

  10. PLAN_TABLE_OUTPUT
  11. ----------------------------------------------------------------------------------------------------


  12. ------------------------------------------------------------------------------------
  13. | Id  | Operation                  |  Name            | Rows  | Bytes | Cost (%CPU)|
  14. ------------------------------------------------------------------------------------
  15. |   0 | SELECT STATEMENT           |                  |     1 |    43 |   171   (2)|
  16. |*  1 |  HASH JOIN                 |                  |     1 |    43 |   171   (2)|
  17. |   2 |   VIEW                     | V$SESSION        |     1 |    30 |            |
  18. |*  3 |    FIXED TABLE FULL        | X$KSUSE          |     1 |    69 |            |
  19. |   4 |   VIEW                     | V$LOCK           |     1 |    13 |            |
  20. |   5 |    NESTED LOOPS            |                  |     1 |    55 |   146   (2)|
  21. |*  6 |     HASH JOIN              |                  |     1 |    51 |   122   (2)|
  22. |*  7 |      VIEW                  | GV$_LOCK         |     4 |    84 |            |
  23. |   8 |       UNION-ALL            |                  |       |       |            |
  24. |*  9 |        VIEW                | GV$_LOCK1        |     2 |   162 |            |
  25. |  10 |         UNION-ALL          |                  |       |       |            |
  26. |* 11 |          FIXED TABLE FULL  | X$KDNSSF         |     1 |    94 |            |
  27. |* 12 |          FIXED TABLE FULL  | X$KSQEQ          |     1 |    94 |            |
  28. |* 13 |        FIXED TABLE FULL    | X$KTADM          |     1 |    94 |            |
  29. |* 14 |        FIXED TABLE FULL    | X$KTCXB          |     1 |    94 |            |
  30. |* 15 |      FIXED TABLE FULL      | X$KSUSE          |     1 |    30 |            |
  31. |* 16 |     FIXED TABLE FIXED INDEX| X$KSQRS (ind:1)  |     1 |     4 |            |
  32. ------------------------------------------------------------------------------------

  33. Predicate Information (identified by operation id):
  34. ---------------------------------------------------

  35.    1 - access("B"."SID"="C"."SID")
  36.    3 - filter("X$KSUSE"."KSUUDLNA" IS NOT NULL AND "X$KSUSE"."INST_ID"=:B1 AND
  37.               BITAND("X$KSUSE"."KSSPAFLG",1)<>0 AND BITAND("X$KSUSE"."KSUSEFLG",1)<>0)
  38.    6 - access("GV$_LOCK"."SADDR"="S"."ADDR")
  39.    7 - filter("GV$_LOCK"."INST_ID"=:B1)
  40.    9 - filter("GV$_LOCK1"."INST_ID"=:B1)
  41.   11 - filter(("X$KDNSSF"."KSQLKMOD"<>0 OR "X$KDNSSF"."KSQLKREQ"<>0) AND
  42.               BITAND("X$KDNSSF"."KSSOBFLG",1)<>0)
  43.   12 - filter(("X$KSQEQ"."KSQLKMOD"<>0 OR "X$KSQEQ"."KSQLKREQ"<>0) AND
  44.               BITAND("X$KSQEQ"."KSSOBFLG",1)<>0)
  45.   13 - filter(("X$KTADM"."KSQLKMOD"<>0 OR "X$KTADM"."KSQLKREQ"<>0) AND
  46.               BITAND("X$KTADM"."KSSOBFLG",1)<>0)
  47.   14 - filter(("X$KTCXB"."KSQLKMOD"<>0 OR "X$KTCXB"."KSQLKREQ"<>0) AND
  48.               BITAND("X$KTCXB"."KSSPAFLG",1)<>0)
  49.   15 - filter("S"."INST_ID"=:B1)
  50.   16 - filter("GV$_LOCK"."RADDR"="R"."ADDR")

  51. 已选择42行。

  52. 已用时间:  00: 00: 00.00
复制代码

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部