[20190423]简单测试latch nowilling等待模式.txt --//我对这个问题的理解就是如果参数willing=0,表示无法获取该latch,直接退出,再寻找类似的latch。 --//我仅仅知道redo copy latch具有这个特性: > select addr,name,level#,latch#,gets,misses,sleeps,immediate_gets,immediate_misses,waiters_woken,waits_holding_latch,spin_gets,wait_time from v$latch_children where lower(name) like '%'||lower('redo copy')||'%' ; ADDR NAME LEVEL# LATCH# GETS MISSES SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WOKEN WAITS_HOLDING_LATCH SPIN_GETS WAIT_TIME ---------------- ---------- ------ ---------- ---------- ---------- ---------- -------------- ---------------- ------------- ------------------- ---------- ---------- 00000012D720ADA8 redo copy 4 208 53 0 0 500627938 304381 0 0 0 0 00000012D720ACD0 redo copy 4 208 53 0 0 497827706 323330 0 0 0 0 .. 00000012D72086D8 redo copy 4 208 53 0 0 491448415 365472 0 0 0 0 00000012D7208600 redo copy 4 208 53 0 0 508008338 391955 0 0 0 0 48 rows selected. --//你可以发现nowait latch 的一个特点,就是IMMEDIATE_GETS会相对很高.注我查询的生产系统的情况.测试环境不会这么高的. http://andreynikolaev.wordpress.com/2010/04/12/latch-internals-information-sources/ --//参数如下,另外我前面blog写错了,where是最后1个参数。 kslgetl(laddr, wait, why, where) – Get exclusive latch More precisely, to request the latch Oracle kernel needs: --//更准确地说,要请求闩锁Oracle内核需要: laddress -- address of latch in SGA wait -- flag. If true, this is latch get in willing-to-wait mode.. why -- context why the latch is acquired at this where. where -- code for location from where the latch is acquired. 1.环境: SYS@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production --//参考链接如下:http://blog.itpub.net/267265/viewspace-2641548/=>[20190416]exclusive latch测试脚本.txt $ cat peek.sh #! /bib/bash # 参数如下:latch_name Monitoring_duration or laddr sqlplus -s -l / as sysdba <<EOF col laddr new_value laddr SELECT sysdate,addr laddr FROM v\$latch_parent WHERE NAME='$1'; oradebug setmypid $(seq $2|xargs -I{} echo -e 'oradebug peek 0x&laddr 8\nhost sleep 1' ) EOF $ cat exclusive_latch.txt /* 参数如下: @ exclusive_latch.txt latch_name willing why where sleep_num */ --//connect / as sysdba col laddr new_value laddr SELECT addr laddr FROM v$latch_parent WHERE NAME='&&1'; oradebug setmypid oradebug call kslgetl 0x&laddr &&2 &&3 &&4 host sleep &&5 oradebug call kslfre 0x&laddr --//exit $ cat y1.sh #! /bin/bash zdate=$(date '+%Y%m%d%H%M%S') echo $zdate source peek.sh 'test excl. parent2 l0' 20 | timestamp.pl >| /tmp/peekx_${zdate}.txt & seq 20 | xargs -I{} echo -e 'sqlplus -s -l / as sysdba <<< @latch_free\nsleep 1' | bash >| /tmp/latch_freeo_${zdate}.txt & # 参数如下: @ exclusive_latch.txt latch_name willing why where sleep_num sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 1 2 6" > /dev/null & sleep 2 sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6" > /dev/null & sleep 4.1 sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 5 6 6" > /dev/null & wait $ . y1.sh 20190424091250 [3]- Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 1 2 6" > /dev/null [1] Done source peek.sh 'test excl. parent2 l0' 20 | timestamp.pl >|/tmp/peekx_${zdate}.txt [4]- Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6" > /dev/null [5]+ Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 5 6 6" > /dev/null [2]+ Done seq 20 | xargs -I{} echo -e 'sqlplus -s -l / as sysdba <<< @latch_free\nsleep 1' | bash >|/tmp/latch_freeo_${zdate}.txt 2.测试: $ grep -v '^.*: $' /tmp/peekx_20190424091250.txt | cut -c10- | uniq -c 1 SYSDATE LADDR 1 ------------------- ---------------- 1 2019-04-24 09:12:50 0000000060009978 1 Statement processed. 6 [060009978, 060009980) = 00000015 00000000 1 [060009978, 060009980) = 00000000 00000000 6 [060009978, 060009980) = 00000015 00000000 7 [060009978, 060009980) = 00000000 00000000 --//你可以发现第1个会话申请成功,第2个会话没有申请成功,直接退出.第3个会话申请成功(因为sleep 2+4.1秒). --//cat /tmp/latch_freeo_20190424091250.txt 2019-04-24 09:12:50 2019-04-24 09:12:51 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295 2019-04-24 09:12:52 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295 2019-04-24 09:12:53 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295 2019-04-24 09:12:54 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295 2019-04-24 09:12:55 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=2 why=1, SID=295 2019-04-24 09:12:56 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295 2019-04-24 09:12:57 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295 2019-04-24 09:12:58 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295 2019-04-24 09:13:00 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295 2019-04-24 09:13:01 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295 2019-04-24 09:13:02 Process 21 holding: 0000000060009978 "test excl. parent2 l0" lvl=0 whr=6 why=5, SID=295 2019-04-24 09:13:03 2019-04-24 09:13:04 --//21=0x15,与peek看到的一致. 3.手工测试看看函数的返回值 --//session 1: SYS@book> @ exclusive_latch.txt 'test excl. parent2 l0' 0 1 2 60 old 1: SELECT addr laddr FROM v$latch_parent WHERE NAME='&&1' new 1: SELECT addr laddr FROM v$latch_parent WHERE NAME='test excl. parent2 l0' LADDR ---------------- 0000000060009978 Statement processed. Function returned 1 Function returned 0 --//session 2: SYS@book> @ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6 old 1: SELECT addr laddr FROM v$latch_parent WHERE NAME='&&1' new 1: SELECT addr laddr FROM v$latch_parent WHERE NAME='test excl. parent2 l0' LADDR ---------------- 0000000060009978 Statement processed. Function returned 0 ORA-00600: internal error code, arguments: [510], [0x060009978], [test excl. parent2 l0], [], [], [], [], [], [], [], [], [] --//可以发现申请成功函数返回值是1.失败是0.只所以session 2报错主要原因是没有申请成功,kslfre肯定报错. 4.看看latch统计信息的情况: SYS@book> select addr,name,level#,latch#,gets,misses,sleeps,immediate_gets,immediate_misses,waiters_woken,waits_holding_latch,spin_gets,wait_time from v$latch_parent where lower(name) like '%'||lower('test excl. parent2 l0')||'%'; ADDR NAME LEVEL# LATCH# GETS MISSES SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WOKEN WAITS_HOLDING_LATCH SPIN_GETS WAIT_TIME ---------------- --------------------- ------ ---------- ---------- ---------- ---------- -------------- ---------------- ------------- ------------------- ---------- ---------- 0000000060009978 test excl. parent2 l0 0 5 4 0 0 4 3 0 0 0 0 --//重复测试: $ . y1.sh 20190424094217 [3]- Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 1 2 6" > /dev/null [1] Done source peek.sh 'test excl. parent2 l0' 20 | timestamp.pl >|/tmp/peekx_${zdate}.txt [4]- Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6" > /dev/null [5]+ Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 5 6 6" > /dev/null [2]+ Done seq 20 | xargs -I{} echo -e 'sqlplus -s -l / as sysdba <<< @latch_free\nsleep 1' | bash >|/tmp/latch_freeo_${zdate}.txt SYS@book> select addr,name,level#,latch#,gets,misses,sleeps,immediate_gets,immediate_misses,waiters_woken,waits_holding_latch,spin_gets,wait_time from v$latch_parent where lower(name) like '%'||lower('test excl. parent2 l0')||'%'; ADDR NAME LEVEL# LATCH# GETS MISSES SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WOKEN WAITS_HOLDING_LATCH SPIN_GETS WAIT_TIME ---------------- --------------------- ------ ---------- ---------- ---------- ---------- -------------- ---------------- ------------- ------------------- ---------- ---------- 0000000060009978 test excl. parent2 l0 0 5 4 0 0 6 4 0 0 0 0 --//可以发现IMMEDIATE_GETS增加2次,IMMEDIATE_MISSES增加1次. $ . y1.sh 20190424094448 [3]- Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 1 1 2 6" > /dev/null --//注意我修改为willing=1方式获取. [1] Done source peek.sh 'test excl. parent2 l0' 20 | timestamp.pl >|/tmp/peekx_${zdate}.txt [4]- Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 3 4 6" > /dev/null [5]+ Done sqlplus / as sysdba <<< "@ exclusive_latch.txt 'test excl. parent2 l0' 0 5 6 6" > /dev/null [2]+ Done seq 20 | xargs -I{} echo -e 'sqlplus -s -l / as sysdba <<< @latch_free\nsleep 1' | bash >|/tmp/latch_freeo_${zdate}.txt SYS@book> select addr,name,level#,latch#,gets,misses,sleeps,immediate_gets,immediate_misses,waiters_woken,waits_holding_latch,spin_gets,wait_time from v$latch_parent where lower(name) like '%'||lower('test excl. parent2 l0')||'%'; ADDR NAME LEVEL# LATCH# GETS MISSES SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WOKEN WAITS_HOLDING_LATCH SPIN_GETS WAIT_TIME ---------------- --------------------- ------ ---------- ---------- ---------- ---------- -------------- ---------------- ------------- ------------------- ---------- ---------- 0000000060009978 test excl. parent2 l0 0 5 5 0 0 7 5 0 0 0 0 --//可以发现gets增加1,IMMEDIATE_GETS增加1次,IMMEDIATE_MISSES增加1次. --//我希望这个这个帖子对于理解latch的统计有所帮助.以前我对于这些统计参数的理解一片混乱. --//大家可以适当调整sleep参数,测试看看各种情况.
[20190423]简单测试latch nowilling等待模式.txt
来源:这里教程网
时间:2026-03-03 13:33:03
作者:
编辑推荐:
- [20190423]简单测试latch nowilling等待模式.txt03-03
- Oracle里面的外连中where和on之后and有啥区别03-03
- oracle-rac出问题需要重装,自动清理安装痕迹脚本03-03
- Oracle 18c PSU03-03
- Oracle 19c 安装尝鲜03-03
- CRS-4124: Oracle High Availability Services startup failed. CRS-400003-03
- Oracle Database Server 'TNS Listener'远程数据投毒漏洞03-03
- Oracle 19c Data Guard物理备库搭建03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle里面的外连中where和on之后and有啥区别
Oracle里面的外连中where和on之后and有啥区别
26-03-03 - oracle-rac出问题需要重装,自动清理安装痕迹脚本
oracle-rac出问题需要重装,自动清理安装痕迹脚本
26-03-03 - Oracle 18c PSU
Oracle 18c PSU
26-03-03 - Oracle 19c 安装尝鲜
Oracle 19c 安装尝鲜
26-03-03 - Oracle PSU 简介
Oracle PSU 简介
26-03-03 - Cloud Control 13c 安装
Cloud Control 13c 安装
26-03-03 - Vmware linux redhat6.4 安装11g(11.2.0.1) 双节点RAC
- ORACLE FOR WINDOWS TNS-12545
ORACLE FOR WINDOWS TNS-12545
26-03-03 - Debian DNS区域文件配置(手把手教你搭建本地DNS服务器)
Debian DNS区域文件配置(手把手教你搭建本地DNS服务器)
26-03-03 - oracle 10.2.0.4 sql关联查询语句中含有 connect by 导致报错出现ORA-00600
