[20190401]跟踪dbms_lock.sleep调用.txt
[20190401]跟踪dbms_lock.sleep调用.txt
--//自己在semtimedop函数调用理解错误,加深理解,跟踪dbms_lock.sleep调用的情况.
1.环境:
SCOTT@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
grant EXECUTE ON dbms_lock to scott;
SCOTT@book> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
51 7 60257 DEDICATED 60258 27 123 alter system kill session '51,7' immediate;
$ strace -fTr -e semtimedop -p 60258
Process 60258 attached - interrupt to quit
--//仅仅跟踪semtimedop.
2.测试:
SCOTT@book> exec dbms_lock.sleep(5.3)
PL/SQL procedure successfully completed.
$ strace -fTr -e semtimedop -p 60258
Process 60258 attached - interrupt to quit
0.000000 semtimedop(309821440, 0x7fffe52f9ac0, 1, {5, 300000000}) = -1 EAGAIN (Resource temporarily unavailable) <5.300886>
--//可以发现实际上执行dbms_lock.sleep(5.3),调用函数是semtimedop,睡眠5.3秒.
SCOTT@book> exec dbms_lock.sleep(10.3)
PL/SQL procedure successfully completed.
$ strace -fTr -e semtimedop -p 60258
..
65.217301 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) <3.000460>
3.000610 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) <3.000960>
3.001073 semtimedop(309821440, 0x7fffe52f9ac0, 1, {4, 300000000}) = -1 EAGAIN (Resource temporarily unavailable) <4.300934>
--//你可以基本看出执行dbms_lock.sleep大致算法,oracle许多东西都与3秒有关.
--//分成多个3秒,开始调用semtimedop 3秒,剩下部分小于2*3秒时,调用剩余的部分.
--//再次测试,在执行的过程中打开新终端窗口,执行kill -1 60258.
SCOTT@book> exec dbms_lock.sleep(10.3)
--//中间执行:
$ kill -1 60258
PL/SQL procedure successfully completed.
--//注:kill -1 并不会杀死进程,仅仅挂起.可以通过kill -l了解一些细节.
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
$ strace -fTr -e semtimedop -p 60258
..
154.662451 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) <3.000463>
3.000651 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EINTR (Interrupted system call) <1.573761>
1.573876 --- SIGHUP (Hangup) @ 0 (0) ---
0.000203 semtimedop(309821440, 0x7fffe52f9ac0, 1, {5, 730000000}) = -1 EAGAIN (Resource temporarily unavailable) <5.730875>
--//在第2个3秒中发出了中断,仅仅执行1.57秒.最后1次调用执行 4.3+1.43 = 5.73秒.
--//再次测试,中间按ctrl+c看看:
SCOTT@book> exec dbms_lock.sleep(10.3)
BEGIN dbms_lock.sleep(10.3); END;
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
ORA-06512: at "SYS.DBMS_LOCK", line 205
ORA-06512: at line 1
$ strace -fTr -e semtimedop -p 60258
..
14.543729 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EINTR (Interrupted system call) <2.880053>
2.880177 --- SIGURG (Urgent I/O condition) @ 0 (0) ---
--//中断不再继续执行.
--//再次测试,中间执行kill -19 60258, 19表示SIGSTOP,暂停执行.
$ strace -fTr -e semtimedop -p 60258
..
172.564623 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EINTR (Interrupted system call) <2.343982>
2.344113 --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
0.000071 --- SIGSTOP (Stopped (signal)) @ 0 (0) ---
0.000326 semtimedop(309821440, 0x7fffe52f9ac0, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) <3.000768>
3.000904 semtimedop(309821440, 0x7fffe52f9ac0, 1, {4, 960000000}) = -1 EAGAIN (Resource temporarily unavailable) <4.960862>
--//可以发现仅仅暂停第1个3秒的执行.总的sleep时间是不变的.
--//2.343982+3.000768+4.960862 = 10.305612
--//后续的sql语句并不影响执行.
--//做这些测试仅仅是加强理解..^_^.
--//顺便说一下linux sleep调用的是nanosleep.
$ strace sleep 10.3
...
brk(0x1d63000) = 0x1d63000
nanosleep({10, 300000001}, NULL) = 0
close(1) = 0
exit_group(0) = ?
[20190401]跟踪dbms_lock.sleep调用.txt的更多相关文章
- Istio最佳实践系列:如何实现方法级调用跟踪?
赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher 管理委员,Istio 项目贡献者,热衷于开源.网络和云计算.目前主要从事服务网格的开源和研发工作. 引言 TCM(Ten ...
- [Android Pro] android 混淆文件project.properties和proguard-project.txt
参考文档:http://blog.csdn.net/xueyepiaoling/article/details/8202359转载自:http://glblong.blog.51cto.com/305 ...
- Android 混淆文件project.properties和proguard-project.txt
参考文档:http://blog.csdn.net/xueyepiaoling/article/details/8202359 http://glblong.blog.51cto.com/305861 ...
- [20190402]关于semtimedop函数调用2.txt
[20190402]关于semtimedop函数调用2.txt --//前几天做了sql语句在mutexes上的探究.今天看看_mutex_wait_time设置很大的情况下是否semtimedop会 ...
- [strace]跟踪进程的系统调用
转自:https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 strace常用来跟踪进程执行时的系统调用和所接收的信号 ...
- inux跟踪线程的方法:LWP和strace命令
摘要:在使用多线程程序时,有时会遇到程序功能异常的情况,而这种异常情况并不是每次都发生,很难模拟出来.这时就需要运用在程序运行时跟踪线程的手段,而linux系统的LWP和strace命令正是这种技术手 ...
- 防反编译、混淆文件proguard.cfg与proguard-project.txt详解
在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt. 如果需要对项目进行全局混码,只需要进行一步操 ...
- linux跟踪线程的方法:LWP和strace命令
摘要:在使用多线程程序时,有时会遇到程序功能异常的情况,而这种异常情况并不是每次都发生,很难模拟出来.这时就需要运用在程序运行时跟踪线程的手段,而linux系统的LWP和strace命令正是这种技术手 ...
- centos8平台使用strace跟踪系统调用
一,strace的用途 strace 是最常用的跟踪进程系统调用的工具. 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectfore ...
随机推荐
- [Swift]LeetCode881. 救生艇 | Boats to Save People
The i-th person has weight people[i], and each boat can carry a maximum weight of limit. Each boat c ...
- Build Assimp library for Android
Build Assimp library for Android 首先各路教程中有推荐使用 NDK 或者 STANDALONE TOOLCHAIN 编译的,根据我的理解,这两种方式都是可以的,如果能直 ...
- Spark MLlib
MLlib 数据挖掘与机器学习 数据挖掘体系 数据挖掘:也就是data mining,是一个很宽泛的概念,也是一个新兴学科,旨在如何从海量数据中挖掘出有用的信息来. ...
- nginx处理cookie跨域
今天在部署公司项目的时候碰到一个问题 项目地址是xxx.xx.xx.122:7480 项目A后台请求地址为xxx.xx.xx.123:8080/data-sso 开始nginx配置是 server { ...
- 认识Junit基本注解@Before、@After、@Test、@BeforeClass、@AfterClass(转)
一.unit中集中基本注解,是必须掌握的. @BeforeClass – 表示在类中的任意public static void方法执行之前执行 @AfterClass – 表示在类中的任意public ...
- curl zip上传并且解压
上传文件: /** * 上传文件 * @param string $file 文件路径 */ function FileUpload($file){ $data = array('file'=> ...
- 从锅炉工到AI专家(4)
手写数字识别问题 图像识别是深度学习众多主流应用之一,手写数字识别则是图像识别范畴简化版的入门学习经典案例.在TensorFlow的官方文档中,把手写数字识别"MNIST"案例称为 ...
- 记一次查询超时的解决方案The timeout period elapsed......
问题描述 在数据库中执行查询语句,大约1秒钟查询出来,在C#中用ado进行连接查询,一直等待很久未查出结果,最后抛出查询超时异常. 异常内容如下: Execution Timeout Expired. ...
- PE知识复习之PE的导出表
PE知识复习之PE的导出表 一丶简介 在说明PE导出表之前.我们要理解.一个PE可执行程序.是由一个文件组成的吗. 答案: 不是.是由很多PE文件组成.DLL也是PE文件.如果我们PE文件运行.那么就 ...
- Magicodes.NET框架之路——V0.0.0.5 Beta版发布
最近写代码的时间实在不多,而且今年又打算业余学习下Unity3D以及NodeJs(用于开发游戏后台),因此完善框架的时间更不多了.不过我会一直坚持下去的,同时我也希望有兴趣的同学可以加入Push你的代 ...