Oracle内部latch获取函数简介
Oracle的内部函数一直非常神秘,其实Oracle提供了一个oradebug 工具,可以用于调用内部的一些方法/函数,这为我们窥探Oracle的内部机制打开了一扇窗户。
- laddress – latch在 SGA中的地址
- wait – flag. 如果设置为true,表示使用 willing-to-wait mode模式。
- where – 请求latch的代码段位置 ,也就是awr/statpack的Latch Misses Source中的内容。
- why - 为什么从Where参数指定的地方请求latch
注意where中的位置值只是一个索引,具体的位置名称从v$latch_misses可以查到(或者从awr/statspack也可以看到)。代码位置的名称和索引存储在视图x$ksllw
SQL> select indx, ksllwnam,ksllwlbl from x$ksllw where rownum<20;INDX KSLLWNAM KSLLWLBL---------- ---------------------------------------------------------------- ----------------------------------------------------------------0 No latch1 kslwt2 ksudlp3 kslpstevent:get pwq#4 kslpstevent:reget pwq#5 ksliwat:add:nowait pwq#6 ksliwat:remove pwq#7 ksliwat:add:wait pwq#8 kslael9 kslrgpl_parent10 kslrgpl_2childINDX KSLLWNAM KSLLWLBL---------- ---------------------------------------------------------------- ----------------------------------------------------------------11 kslrgpl_notsib12 kslrgp_nowait13 ksqgel: create enqueue parent obj14 ksqgel: failed to get enqueue error
SQL> desc x$kslwsc;Name Null? Type
----------------------------------------------------------------------------- -------- ----------------------------------------------------
ADDR RAW(8)
INDX NUMBER
INST_ID NUMBER
KSLNOWTF NUMBER
KSLSLEEP NUMBER
KSLWSCWSL NUMBER
KSLWSCLTHG NUMBERKSLLASNAM VARCHAR2(50)why参数的在dump出来的结果中描述是“Context saved from call”,例如:SO: 0x2d93be720, type: 2, owner: (nil), flag: INIT/-/-/0x00
(process) Oracle pid=299, calls cur/top: 0x2e9028a38/0x2e9028a38, flag: (0)
…
(latch info) wait_event=0 bits=2
holding 2dee1ac50 Child cache buffers chains level=1 child#=124200
Location from where latch is held: kcbgtcr: fast path:
Context saved from call: 39022946
why参数说明为什么在这个(where)请求这个latch,它依赖于latch的作用与latch请求的where。比如,当请求一个cache buffer chain latch保护的一个数据块时,why就包括一个块地址(dba)。why的意义,可以从x$ksllw中的ksllwlbl列进行一些猜测。
SQL> select addr, name from v$latch where name like 'shared pool';ADDR NAME---------------- --------------------------------------------------0000000380019DA8 shared poolSQL>取这个latch的where值,也就是代码位置:SQL> select * from x$kslwsc where ksllasnam ='shared pool';ADDR INDX INST_ID KSLNOWTF KSLSLEEP KSLWSCWSL KSLWSCLTHG KSLLASNAM---------------- ---------- ---------- ---------- ---------- ---------- ---------- ------------............
00000005F7152178 2582 1 0 0 0 0 shared pool00000005F7152198 2583 1 0 0 0 0 shared pool00000005F71521B8 2584 1 0 0 0 0 shared pool00000005F71521D8 2585 1 0 0 0 0 shared pool62 rows selected这些值也可以从x$ksllt取到SQL> select kslltwhr,kslltwhy from x$ksllt where addr='0000000380019DA8';KSLLTWHR KSLLTWHY---------- ----------2559 208SQL>
SQL> connect /as sysdba;Connected.SQL> oradebug setmypid;Statement processed.SQL> oradebug call kslgetl 0 x380019DA8 1 208 2559ORA-03113: end-of-file on communication channelORA-24323: value not allowed
*** 2012-03-10 15:00:56.229ksedmp: internal or fatal errorORA-07445: exception encountered: core dump [kslgetl()+8] [SIGSEGV] [Address not mapped to object] [0xFFFFFFFF80021E44] [] []----- Call Stack Trace -----calling call entry argument values in hexlocation type point (? means dubious value)-------------------- -------- -------------------- ----------------------------ksedmp()+728 CALL ksedst() 000000017 ? 106B520AC ?000000000 ? 106B4EBA0 ?106B4D908 ? 106B4E308 ?ssexhd()+1232 CALL ksedmp() 106994000 ? 10699493C ?000106800 ? 10699493C ?000000000 ? 106994000 ?__sighndlr()+12 PTR_CALL 0000000000000000 106991000 ? 106B55EF0 ?10698E81C ? 000106991 ?00000000B ? 000000067 ?call_user_handler() CALL __sighndlr() 00000000B ? 106B55EF0 ?+992 106B55C10 ? 102084BC0 ?000000000 ? 00000000A ?sigacthandler()+104 CALL call_user_handler() FFFFFFFF7D100200 ?FFFFFFFF7D100200 ?106B55C10 ? 000000009 ?000000000 ? 000000000 ?kslgetl()+8 PTR_CALL 0000000000000000 000000000 ? 106B55EF0 ?106B55C10 ?FFFFFFFF7D100200 ?000000000 ?FFFFFFFF7C33E000 ?skdxcall()+1664 PTR_CALL 0000000000000000 FFFFFFFF80021E38 ?000000001 ? 0000000D0 ?0000009FF ?FFFFFFFF7FFFABC0 ?0000009FF ?ksdxen()+3672 PTR_CALL 0000000000000000 380021E38 ?FFFFFFFF7FFFB350 ?FFFFFFFF7FFFB348 ?FFFFFFFF7FFFB340 ?FFFFFFFF7FFFB3F0 ?FFFFFFFF7FFFB338 ?opiodr()+1536 PTR_CALL 0000000000000000 105AB8000 ? 1020766C0 ?10699294A ? 000105800 ?000106800 ? 106991CA8 ?ttcpip()+1188 PTR_CALL 0000000000000000 105AE96F0 ? 105E47870 ?000106991 ? 106991000 ?000000056 ? 000106800 ?opitsk()+1532 CALL ttcpip() 00000001E ? 000000000 ?FFFFFFFF7FFFE5B8 ?000000001 ?FFFFFFFF7FFFD090 ?10698F208 ?opiino()+1128 CALL opitsk() 000000000 ? 105E46B00 ?000000000 ? 000100000 ?105A9E49C ? 10699D160 ?opiodr()+1536 PTR_CALL 0000000000000000 00010699B ? 000000000 ?
Oracle内部latch获取函数简介的更多相关文章
- Delphi 版本信息获取函数 GetFileVersionInfo、GetFileVersionInfoSize、VerFindFile、VerInstallFile和VerQueryValue
一.版本信息获取函数简介和作用 获取文件版本信息的作用: 1. 避免在新版本的组件上安装旧版本的相同组件: 2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息在启动程序时决定使用的正确 ...
- [转帖学习]Oracle的 SYS_CONTEXT 函数简介
Oracle的 SYS_CONTEXT 函数简介 https://blog.csdn.net/IndexMan/article/details/48606369 1.什么是SYS_CONTEXT? S ...
- Linux Shell系列教程之(十五) Shell函数简介
本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...
- PCRE函数简介和使用示例【转】
PCRE函数简介和使用示例 标签: 正则表达式listbuffercompilationnullperl 原文地址:http://blog.csdn.net/sulliy/article/detail ...
- linux进程编程:子进程创建及执行函数简介
linux进程编程:子进程创建及执行函数简介 子进程创建及执行函数有三个: (1)fork();(2)exec();(3)system(); 下面分别做详细介绍.(1)fork() 函数定 ...
- [转]SQLITE3 C语言接口 API 函数简介
SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...
- Oracle中的单行函数
Oracle中的单行函数 1 字符函数 UPPER()--将字符串转换为大写 SELECT UPPER('abc') FROM dual; LOWER()-将字符串转换为小写 SELECT LOWER ...
- 创建类似于Oracle中decode的函数
-- 创建类似于Oracle中decode的函数create or replace function decode(variadic p_decode_list text[])returns text ...
- UNIX网络编程——epoll 系列函数简介、与select、poll 的区别
前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...
随机推荐
- python for data analysis chapter1~2
Q1:numpy与series的区别:index Tab补全(任意路径Tab) 内省(函数:?显示文档字符串,??显示源代码:结合通配符:np.* load *?) %load .py ctrl-c( ...
- alex 推荐的书
这两本书不错, 追风筝的人<白鹿原>~~~反天不错~~~可以看下.14:27:22AndyZhang 2018-1-29 14:27:22 改变人的东西 读书.看电影.旅行.经历各种事 ...
- HDU 3861 The King’s Problem 强连通分量 最小路径覆盖
先找出强连通分量缩点,然后就是最小路径覆盖. 构造一个二分图,把每个点\(i\)拆成两个点\(X_i,Y_i\). 对于原图中的边\(u \to v\),在二分图添加一条边\(X_u \to Y_v\ ...
- day01_10.for循环
for和while都是一种循环 解释:所有循环的共同点 画图详解 在一条数轴上,循环就是有起始点($i=0); 有结束点($i<=10);有步长($i++); 每走一个相应的步长,就执行一次代码 ...
- pg 创建自增id
CREATE SEQUENCE original_site_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; 先创 ...
- RIP 路由协议
RIP动态路由选择协议 routing information protocol IGP 小范围 路由器限制为15台 超过可能无法收敛 收敛概念 在一个域内 各个路由器知道各 ...
- 【Mysql 优化 6】mysql优化的内容和思路
根据最近做mysql优化,以及参照的官方文档的一些知识点,总结一下,如何下手去优化mysql 数据库.PS:更多可能是我个人的笔记总结记录,仅供参考 一.优化的内容 可以优化的内容,从范围的大小,可以 ...
- 简单使用jstl实现敏感字替换
package com.ceshi; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; ...
- CS231n笔记 Lecture 5 Convolutional Neural Networks
一些ConvNets的应用 Face recognition 输入人脸,推测是谁 Video classfication Recognition 识别身体的部位, 医学图像, 星空, 标志牌, 鲸.. ...
- centos的iptables设置
首先先说一下iptables是什么东西,可以简单把它理解成一个软件防火墙,一个访问控制列表,规定好哪个端口可以进来东西,哪个端口可以送出东西. 那如果不配置iptables或者iptables配置出错 ...