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> ...
随机推荐
- LightOj:1422-Halloween Costumes
传送门:http://www.lightoj.com/volume_showproblem.php?problem=1422 Halloween Costumes problem descriptio ...
- 并查集:POJ1182-食物链(并查集比较高端的应用)
食物链 Time Limit: 1000MS Memory Limit: 10000K Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C ...
- German Collegiate Programming Contest 2015
// Legacy Code #include <iostream> #include <cstdio> #include <cstring> #include & ...
- Hadoop4.2HDFS测试报告之六
测试结论 第一组数据作表格作图: 第二组数据作表格作图: 根据以上图分析得出以下结论: 1. 本地存储的读写速率基本保持23M左右,说明本地存储比较稳定. 2. HDFS存储两个数据节点的读写速率性能 ...
- python面试题解析(网络编程与并发)
1.答: 应用层 与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的.例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层.但是,如果添加了一 ...
- cf963b Destruction of a Tree
越靠近叶子越优先删掉 #include <iostream> #include <vector> #include <cstdio> using namespace ...
- python之路 --- python模块初认识&数据类型
一.模块初识 首先,文件名不能和导入的模块名称一样.因为系统默认先从当前文件寻找模块名,如果文件名和导入的模块名称一样的话,就相当于自己调用自己,会找不到相应的方法的. sys模块 sys.path ...
- P2564 生日礼物
生日礼物 洛谷链接 题目描述: 在一段彩带上有不同颜色的彩珠,求出包含所有颜色彩珠的最短彩带长度. 思路: 我们可以把按彩珠的位置把所有彩珠排一下序,然后从1开始遍历这些彩珠,并记录出现过的颜色数目, ...
- php hash防止表单
<?php /** * Created by PhpStorm. * User: brady * Desc: * Date: 2017/7/12 * Time: 15:01 */class te ...
- 利用MVC模式简单设计jsp分页效果
利用Mysql创建一个表Car 用Eclipse创建一个Dynamic Web Project 在lib目录下导入Mysql的jar包 创建如下文件 package com.bean; public ...