[20210521]11g shared pool latch与library cache mutex的简单探究4.txt
[20210521]11g shared pool latch与library cache mutex的简单探究4.txt
--//继续昨天的测试:
http://blog.itpub.net/267265/viewspace-2773083/ =>[20210520]11g shared pool latch与library cache mutex的简单探究3.txt
当时的总结:
--//很明显前面3次出现都需要遇到这两个等待事件,
--//第1次library cache: mutex X,再持有latch: shared pool
--//第2,3次先持有latch: shared pool,然后才是library cache: mutex X.
--//第4次没有需要latch: shared pool,library cache: mutex X。
--//有点不好理解的地方是为什么第1次library cache: mutex X,再持有latch: shared pool,而后面的第2,3次先持有latch: shared
--//pool,然后才是library cache: mutex X.
--//会不会11g的sqlplus客户端改变什么导致的情况。因为11g下sqlplus执行后不会马上释放光标,会不会就是这个原因导致出现这样的
--//情况。
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
2.测试:
SCOTT@book> @ s
SCOTT@book(295,5)> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
295 5 15988 DEDICATED 15989 21 3 alter system kill session '295,5' immediate;
$ cat latch_mutex.gdb
break kslgetl if $rdi==0X6010D860
commands
silent
printf "kslgetl %x, %d, %d, %d\n", $rdi, $rsi, $rdx, $rcx
c
end
break kglGetMutex if $rsi==0X80528f40
commands
silent
printf "kglGetMutex %x, %x, %x, %d\n", $rdi, $rsi, $rdx, $rcx
c
end
--//执行如下命令多次,避免一些递归。
--//desc dept;
--//Select * from dept where deptno=20;
--//select sysdate from dual;
--//session 1,第1次执行:
SCOTT@book(295,5)> select * from dept where deptno=20;
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
$ gdb -p 15989 -x latch_mutex.gdb
...
(gdb) c
Continuing.
kglGetMutex c0cc9e0, 80528f40, 7d4f8a18, 1
kslgetl 6010d860, 1, 0, 3980
--//session 1,顺便执行其它语句,比如:
select sysdate from dual;
--//因为这条语句已经在测试前执行多次,光标已经缓存。后面测试按照这样的方式执行,也就是执行顺序是:
select * from dept where deptno=20;
select sysdate from dual;
--//循环往复,不再说明:
--//session 1,第2次执行前执行:
SCOTT@book(44,11)> select sysdate from dual ;
SYSDATE
-------------------
2021-05-21 09:39:35
--//gdb界面会出现:
kslgetl 6010d860, 1, 2097785048, 3991
--//按照道理应该不会有输出,因为上面的语句光标已经缓存,可以推测这个就是前面的语句select * from dept where deptno=20;导致的情况。
--//session 1,第2次执行:
kglGetMutex c0cc9e0, 80528f40, 7d4f8a18, 1
kslgetl 6010d860, 1, 0, 4039
kslgetl 6010d860, 1, 0, 3980
kslgetl 6010d860, 1, 0, 4039
--//session 1,第3次执行前执行:
SCOTT@book(44,11)> select sysdate from dual ;
SYSDATE
-------------------
2021-05-21 09:42:25
--//gdb界面再次出现:
kslgetl 6010d860, 1, 2097785048, 3991
--//session 1,第3次执行:
kglGetMutex c0cc9e0, 80528f40, 7d4f8a18, 1
--//session 1,第3次执行前执行:
SCOTT@book(44,11)> select sysdate from dual ;
SYSDATE
-------------------
2021-05-21 09:43:51
--//gdb界面,这次没有输出,也就是一旦sql语句缓存,不再出现调用kslgetl的情况。
--//session 1,第4次执行:
--//没有任何输出。
--//我反复测试多次,都是这样的情况。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库