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还能执行其他语句没有什么关系把