v$session.PREV_HASH_VALUE !=0表示什么SQL_HASH_VALUE=0表示什么

RT

 #2使用道具  发表于 2008-1-30 09:44   

一个session 正在执行某个语句的时候session 的status就是active ,这时候sql_hash_value就不等于0,当它执行完语句后,将sql_plan_value的值转个prev_hash_value,session不执行任何语句,session的status为inactive,sql_plan_value 为0


 #3使用道具  发表于 2008-1-30 09:56  


QUOTE:

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

原帖由 棉花糖ONE 于 2008-1-30 09:44 发表 

一个session 正在执行某个语句的时候session 的status就是active ,这时候sql_hash_value就不等于0,当它执行完语句后,将sql_plan_value的值转个prev_hash_value,session不执行任何语句,session的status为inactive,sql_plan_value 为0 

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

谢谢,请教一个小问题,一般情况下,我们只关注sql_hash_value的数值,也就是说当SQL在执行的时候,这个sql_hash_value不为0,我想知道PREV_HASH_VALUE !=0表示什么SQL_HASH_VALUE=0表示什么?

  有这个想法是由于看同事的一个BLOG,里面有这个一段话

这条SQL语句来查找是哪些SQL语句长时间不提交

select A.sid,A.serial# ,B.sql_text from v$session A,v$sql B

                          where A.PREV_HASH_VALUE !=0 

                          and A.SQL_HASH_VALUE=0

                          and A.PREV_HASH_VALUE=B.hash_value

                          and (B.sql_text like '%update%')

                          order by A.sid,A.serial#;

我非常奇怪,这个PREV_HASH_VALUE !=0和s.SQL_HASH_VALUE=0以及s.PREV_HASH_VALUE=ss.hash_value

都表示什么,没有找到相关的文档


 #4使用道具  发表于 2008-1-30 10:00   

select A.sid,A.serial# ,B.sql_text from v$session A,v$sql B

                          where A.PREV_HASH_VALUE !=0 

                          and A.SQL_HASH_VALUE=0

                          and A.PREV_HASH_VALUE=B.hash_value

                          and (B.sql_text like '%update%')

                          order by A.sid,A.serial#;

这语句不一定能找到你说的那个长时间不提交的sql


 #5使用道具  发表于 2008-1-30 10:01   

前面执行过一个语句PREV_HASH_VALUE 就不等于0

当前没执行任何语句SQL_HASH_VALUE=0


 #6使用道具  发表于 2008-1-30 10:11  


QUOTE:

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

原帖由 棉花糖ONE 于 2008-1-30 10:01 发表 

前面执行过一个语句PREV_HASH_VALUE 就不等于0

当前没执行任何语句SQL_HASH_VALUE=0 

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

如过没有执行SQL则SQL_HASH_VALUE=0这个好理解,但老师什么叫做‘前面执行过一个语句PREV_HASH_VALUE 就不等于0’没有看明白

 #7使用道具  发表于 2008-1-30 10:14   

你自己试下就知道了,会把前个语句的sql_hash_value传给prev_hash_value

 #8使用道具  发表于 2008-1-30 10:33  

QUOTE:

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

原帖由 棉花糖ONE 于 2008-1-30 10:00 发表 

select A.sid,A.serial# ,B.sql_text from v$session A,v$sql B

                          where A.PREV_HASH_VALUE !=0 

                          and A.SQL_HASH_VALUE=0

                          and A.PREV_HASH_VALUE=B.hash_value

                          and (B.sql_text like '%update%')

                          order by A.sid,A.serial#;

这语句不一定能找到你说的那个长时间不提交的sql 

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

WHY,被清除内存?不应该啊,如果系统一直在执行这个UPDATE的话,则一定会在MEM里面!


 #9使用道具  发表于 2008-1-30 10:34   

执行完update他还能执行别的语句啊,比如select,执行完select ,prev_hash_value就是那个select的hash_value


 #10使用道具  发表于 2008-1-30 10:51  


QUOTE:

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

原帖由 棉花糖ONE 于 2008-1-30 10:34 发表 

执行完update他还能执行别的语句啊,比如select,执行完select ,prev_hash_value就是那个select的hash_value 

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

这条SQL语句来查找是哪些SQL语句长时间不提交

select A.sid,A.serial# ,B.sql_text from v$session A,v$sql B

                          where A.PREV_HASH_VALUE !=0 

                          and A.SQL_HASH_VALUE=0

                          and A.PREV_HASH_VALUE=B.hash_value

                          and (B.sql_text like '%update%')

                          order by A.sid,A.serial#;

也就是说这个执行了,但是没有提交,和UPDATE还能执行其他语句没有什么关系把