Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

87

积分

0

好友

5

主题
1#
发表于 2012-2-23 15:05:01 | 查看: 6224| 回复: 8
启用了cursor_sharing=force

但在v$sqlarea 中还是有很多相同的sql_text
如下
select count(distinct resourceid)           from t_
userorderinfo a, t_packagemachinemap c          where a.order_status <> :1
      and a.user_id in (1676964)         and a.resourceid = c.app_id         and
c.check_status in (300, 205)         and c.package_status = 1         and c.mac
hine_id = :2                                                  AND
      c.adapter_flag = 2

select count(distinct resourceid)           from t_
userorderinfo a, t_packagemachinemap c          where a.order_status <> :1
      and a.user_id in (1681350)         and a.resourceid = c.app_id         and
c.check_status in (300, 205)         and c.package_status = 1         and c.mac
hine_id = :2                                                  AND
      c.adapter_flag = 2


上面是j2ee程序中的调用的,变量是拼出来的sql,

为什么会游标没有共享呢?bug?

oracle 11 r 1  0  7

[ 本帖最后由 anbob 于 2012-2-23 15:06 编辑 ]
2#
发表于 2012-2-23 15:08:24
请把 这2句SQL 在v$sqlarea上的hash_value发出来

回复 只看该作者 道具 举报

3#
发表于 2012-2-23 15:20:01
oracle version

Release 11.1.0.7.0


hashvalue 是完全不一样的

Unnamed.jpg (91.97 KB, 下载次数: 355)

Unnamed.jpg

回复 只看该作者 道具 举报

4#
发表于 2012-2-23 15:26:09
v$sqlarea HASH_VALUE         NUMBER         Hash value of the parent statement in the library cache

这里的hash value 是通过对sql_text 文本做hash算法获得的, hash value不同 ,说明这些 SQL文本是存在差异的, 可能表象上很相似 , 可能只差一个空格, 但是是不同的,  建议 用PL/SQL Developer 的16进制查看。

回复 只看该作者 道具 举报

5#
发表于 2012-2-23 15:30:56
能否详细说明一下怎么用PL/SQL developer 16进制查看?

回复 只看该作者 道具 举报

6#
发表于 2012-2-23 15:31:49
and a.user_id in (1676964)      
  and a.user_id in (1681350)

明显都是 自由变量, 生成多个 父游标很正常

回复 只看该作者 道具 举报

7#
发表于 2012-2-23 15:33:54
SQL> alter system set cursor_sharing=force;

System altered.

SQL> conn anbob/anbob;
Connected.
SQL> select * from tab;

TNAME                                                                              TABTYPE                CLUSTERID
------------------------------------------------------------------------------------------ --------------------- ----------
TESTCUR                                                                            TABLE

SQL> desc testcur;
Name                                                                        Null?    Type
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
ID                                                                                   NUMBER(38)
NAME                                                                                 VARCHAR2(20)

SQL> insert into testcur values(100,'jack');

1 row created.

SQL> insert into testcur values(200,'jack');

1 row created.

SQL> insert into testcur                   values(200,'jack');

1 row created.

SQL> commit;

Commit complete.

SQL> conn system/oracle
Connected.
SQL> col sql_text for a100
SQL> set linesize 150
SQL> select sql_text,hash_value,parse_calls from v$sqlarea
  2  where sql_text like 'insert into testcur%';

SQL_TEXT                                                                                     HASH_VALUE PARSE_CALLS
---------------------------------------------------------------------------------------------------- ---------- -----------
insert into testcur                   values(:"SYS_B_0",:"SYS_B_1")                                  2665047097           1
insert into testcur values(:"SYS_B_0",:"SYS_B_1")                  

即使sql 是不一样的, 它的字面量就应该是在启用了force 后用  SYS_B 代替吧?

回复 只看该作者 道具 举报

8#
发表于 2012-2-23 15:49:16

回复 7# 的帖子

理论上 cursor sharing=force 会用SYS_B_0 强制绑定 替换自由变量, 但实际 不是一定工作的, 对于复杂的SQL ,可能没有识别literal variable 导致 cursor sharing force 不工作, 也可能由于bug 引起。

建议 刷新共享池, 继续观察该问题。

关闭11g的 自适应游标特性

回复 只看该作者 道具 举报

9#
发表于 2012-2-23 15:52:05
如何 使用 PLSQL Developer的16进制模式, 点击一个结果列 ,出现对话框后选择HEx plsql_developer_hex.png

回复 只看该作者 道具 举报

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

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 01:57 , Processed in 0.065299 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569