[20250222]利用lcm.sh脚本测试软软解析(21c).txt

news/2025/2/27 20:27:42/文章来源:https://www.cnblogs.com/lfree/p/18741908
[20250222]利用lcm.sh脚本测试软软解析(21c).txt

--//利用自己写的lsm.sh脚本测试软软解析(21c).

1.环境:
SCOTT@book01p> @ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

$ cat loop3.txt
set verify off
DECLARE
   l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..&&1
    LOOP
       EXECUTE IMMEDIATE 'select /*+ 9 */ count(*) from dept where deptno = 93834' INTO l_count ;
    END LOOP;
END;
/

$ cat record.txt
set verify off
variable v_method varchar2(20)
exec :v_method := '&&2';

define t=&&1;

column 3 new_value 3;
select decode('&3',null,'loop.txt','&&3') "3" from dual;

@@ &&3 5 &&2

insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,'&&2') ;
commit ;

@@ &&3 &&t &&2

update job_times set time_ela = dbms_utility.get_time - time_ela where sid=sys_context ('userenv', 'sid') and method= :v_method;
commit;
quit

$ cat lcm.sh
#!/bin/bash

# arg1=mutex_address arg2=offset arg3=monitor_times

offset=${2:-4}
sleeps=${3:-20}
v_addr="0x${1}+${offset}"

echo "begin mutex value :"
gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "x/8wx 0x${1}" -ex "quit" |  grep "^0x" | grep -v "^0x0"

gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "set *(  int *)(${v_addr})=0x7777"  -ex "quit" >/dev/null

echo "modify mutex value :"
gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "x/8wx 0x${1}" -ex "quit" |  grep "^0x" | grep -v "^0x0"

echo sleep $sleeps seconds
(sleep $sleeps ;gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "set *(  int *)(${v_addr})=0x0"  -ex "quit" > /dev/null) &

sqlplus -s -l scott/book@book01p <<EOF
set echo off head off verify off feedback off define #
variable my_sid number
column spid new_value v_spid noprint
exec  :my_sid :=  userenv('sid');
select p.spid from v\$session s,v\$process p where s.sid = :my_sid and s.paddr=p.addr;
host strace -Ttt -y -f -p #v_spid -o laji.txt > /dev/null 2>&1 &
host echo "running at background : strace -Ttt -y -f -p #v_spid -o laji.txt >/dev/null 2>&1 &"
host sleep 1
set define &
@ loop3.txt  1 AAAA
quit
EOF

echo "end mutex value :"
gdb -q -batch -p $(pgrep -f ora_mmon_${ORACLE_SID}) -ex "x/8wx 0x${1}" -ex "quit" |  grep "^0x" | grep -v "^0x0"

mv -iv laji.txt mutex$(date +"%Y%m%d%H%M%S").txt
--//注意在执行loop3.txt脚本前要设置set define &,在这里浪费一点点时间。

2.测试出现阻塞的mutex地址:
$ zzdate;seq 10 | xargs -P 10 -IQ sqlplus -s -l scott/book@book01p @record.txt 1e5 AAAA loop3.txt > /dev/null;zzdate
trunc(sysdate)+09/24+33/1440+07/86400 1740274387.729109828
trunc(sysdate)+09/24+33/1440+12/86400 1740274392.528387235

SYS@book> @ mutexprofz idn,hash,loc,maddr "ts>=trunc(sysdate)+09/24+33/1440+07/86400"
-- MutexProf by Tanel Poder (http://www.tanelpoder.com)
-- Showing profile of top 50 sleeps...
-- column info : id idn hash hash_value=>hash_value ts=>sleep_timestamp
--               req=>requesting_session blk=>blocking_session val=>mutex_value maddr=>mutex_addr
SUM_SLEEPS      GETS_DIFF MUTEX_TYPE             IDN       HASH GET_LOCATION                      mutex_addr           OBJECT_NAME
---------- -------------- --------------- ---------- ---------- --------------------------------- -------------------- --------------------------------------------------------------------------------
         6         209507 Cursor Pin      3403546624 3403546624 kksLockDelete [KKSCHLPIN6]        000000006470C768     select /*+ 9 */ count(*) from dept where deptno = 93834
         4         101357 Cursor Pin      3403546624 3403546624 kksfbc [KKSCHLFSP2]               000000006470C768     select /*+ 9 */ count(*) from dept where deptno = 93834

--//mutex_addr=000000006470C768

$ ./lcm.sh 000000006470C768 4 20
begin mutex value :
0x6470c768:     0x00000000      0x00000000      0x003d0ab0      0x00011082
0x6470c778:     0xcade0000      0x00000000      0x00000000      0x00000000
modify mutex value :
0x6470c768:     0x00000000      0x00007777      0x003d0ab0      0x00011082
0x6470c778:     0xcade0000      0x00000000      0x00000000      0x00000000
sleep 20 seconds

running at background : strace -Ttt -y -f -p 5534 -o laji.txt >/dev/null 2>&1 &

end mutex value :
0x6470c768:     0x00000000      0x00000000      0x003d0ab2      0x00012240
0x6470c778:     0xcade0000      0x00000000      0x00000000      0x00000000
'laji.txt' -> 'mutex20250223100352.txt'
--//gets 0x003d0ab2-0x003d0ab0 = 0x2,增加2次,很好理解出现在2个GET_LOCATION:kksLockDelete [KKSCHLPIN6],kksfbc [KKSCHLFSP2]
--//sleeps 0x00012240-0x00011082 = 0x11be = 4542.

$ egrep "semtimedop|sched_yield|select" mutex20250223100352.txt|wc
   4542   54504  363360
--//sleeps 数量完成一致。

$ egrep "getrusage" mutex20250223100352.txt
5534  10:03:31.741740 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 22306}, ru_stime={0, 12914}, ...}) = 0 <0.000114>
5534  10:03:31.742017 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 22343}, ru_stime={0, 12935}, ...}) = 0 <0.000013>
5534  10:03:31.742156 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 22394}, ru_stime={0, 12964}, ...}) = 0 <0.000012>
5534  10:03:33.130828 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 25130}, ru_stime={0, 15078}, ...}) = 0 <0.000015>
5534  10:03:35.154824 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 37851}, ru_stime={0, 24603}, ...}) = 0 <0.000014>
5534  10:03:37.159906 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 46371}, ru_stime={0, 36290}, ...}) = 0 <0.000013>
5534  10:03:39.265663 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 52974}, ru_stime={0, 44145}, ...}) = 0 <0.000010>
5534  10:03:41.329461 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 67789}, ru_stime={0, 62366}, ...}) = 0 <0.000010>
5534  10:03:43.352760 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 77030}, ru_stime={0, 74067}, ...}) = 0 <0.000012>
5534  10:03:45.354729 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 93344}, ru_stime={0, 83688}, ...}) = 0 <0.000012>
5534  10:03:47.357422 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 96057}, ru_stime={0, 99155}, ...}) = 0 <0.000013>
5534  10:03:49.364437 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 108739}, ru_stime={0, 108739}, ...}) = 0 <0.000014>
5534  10:03:51.366873 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 129227}, ru_stime={0, 132379}, ...}) = 0 <0.000007>
5534  10:03:51.519412 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 130947}, ru_stime={0, 134065}, ...}) = 0 <0.000007>
5534  10:03:51.524268 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 132742}, ru_stime={0, 134065}, ...}) = 0 <0.000048>
5534  10:03:51.525429 getrusage(0x1 /* RUSAGE_??? */, {ru_utime={0, 132742}, ru_stime={0, 134065}, ...}) = 0 <0.000048>
--//间隔2秒。

$ awk '{print $3}' mutex20250223100352.txt | egrep "semtimedop|getrusage|sched_yield|select" | uniq -c| head -10
      3 getrusage(0x1
     92 select(0,
      1 getrusage(0x1
    437 select(0,
      1 getrusage(0x1
    337 select(0,
      1 getrusage(0x1
    290 select(0,
      1 getrusage(0x1
    662 select(0,
--//注意采用mutex wait scheme=1,但是开头并没有出现sched_yield.

$ egrep "semtimedop|sched_yield|select" mutex20250223100352.txt|head -4
5534  10:03:31.742412 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.040249>
5534  10:03:31.782774 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.121680>
5534  10:03:31.904552 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.080899>
5534  10:03:31.985592 select(0, [], [], [], {0, 1000}) = 0 (Timeout) <0.029052>
--//sleeps 1毫秒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学生信息管理项目更改

一、来源:原先的作品来自于大二上同寝室计科同学的期末大作业项目 二、运行环境基于intelij为运行软件,maven做框架依赖,tomacat浏览器展示,mysql数据库 运行截图由于代码较多,此处只展示部分代码 1、addStudent.jsp 点击查看代码 <%@ page language="java" …

Linux相关杂记

Windows通过ssh远程linux的Ubuntu 1.在Ubuntu上安装SSH服务 sudo apt update sudo apt insall openssh-server2.启动ssh sudo systemctl start ssh3.设置开机自启 sudo systemctl enable ssh2.获取Ubuntu的IP地址 ip a3.windows上使用SSH客户端 ssh 用户名@IP地址#####愿你一寸…

笔记本外接显示器,左右位置设置

笔记本电脑扩展的显示器 如何左右分屏或上下分屏显示? 留意屏幕布局。 若笔记本屏幕在左而外接显示器在右,则无需调整;反之,则需用鼠标选中2号屏,按住左键拖动至1号屏的左侧。

题解:P4586 [FJOI2015] 最小覆盖双圆问题

写了这么久终于过了,发篇题解记录一下。 第一次写黑题题解,写的不好请见谅。 目录本题思路 三点定圆 最小圆覆盖 关于最小圆覆盖时间复杂度 回到本题 二分法划分点集 总时间复杂度 最小覆盖双圆问题代码本题思路 首先,这道题叫做最小覆盖双圆问题,这道题涉及到一个叫做最小…

sed undefined label on MacOS, FreeBSD

A quick fix is to prepend your string expression with an empty string: For example: instead of sed -i s/foo/bar/g text.txt write: sed -i s/foo/bar/g text.txtThis should work across different OS (Linux, MacOS, Windows) --dopexxx来源:http://stackoverflow.…

软工作业1:自我介绍+软工5问

这个作业属于哪个课程 软工23级这个作业要求在哪里 自我介绍+软工五问这个作业的目标 熟悉博客园以及Github的相关操作,了解软件工程相关内容1.自我介绍兴趣爱好:羽乒人,爱听歌,电影,楷书,行楷 编程语言:C,JAVA 目标:后端开发2.软工五问软件工程在对就业上的帮助的具体…

对“推箱子”小游戏代码的改进

一.代码来源 https://www.cnblogs.com/heyu123/p/14844284.html 二.运行环境 DEV--C++ 三.原代码及其运行结果 原代码: int map[8][8]={{1,1,1,1,1,1,1,1},//0 空地 {1,0,0,0,1,0,0,1},//1 墙 {1,0,1,0,1,4,3,1},//3 目的地 {1,0,0,0,0,4,3,1},//4 箱子 {1,0,1,0,1,4,3,1},//5…

软件开发与创新课程设计作业——软件逆向设计

一、来源:软件工程2班李鹏飞去年的大作业`点击查看代码 #include <iostream> #include <string> #include <fstream> using namespace std;//定义客户类型 enum eGuestType // 在高版本VS中,需要用enum class,在低版本的vs中,直接用enum也可以 {e_member…

LVI_SAM 虚拟机安装复现(一)

0. 前言 高能警告:LVI_SAM 的安装步骤是繁琐的,一个坑接着一个坑,请预留48+小时的安装时间,和80%以上的san值。非战斗人员请尽快撤离。 预备知识:虚拟机安装步骤,ROS基本概念,Makefile工作原理 没有预备知识的话,也没关系,本文也不会给你解释的( 本文是第一大步骤,即…

大模型--三种三种检索方式-Dense retrieval / Lexical Retrieval / Multi-Vector Retrieval- 44

1. 参考 M3-Embedding https://github.com/FlagOpen/FlagEmbedding https://arxiv.org/pdf/2402.03216 https://huggingface.co/BAAI/bge-m3 2. Dense retrievalimport torch import torch.nn as nnclass DenseRetrieval(nn.Module):def __init__(self, embedding_dim):super(D…

从拉新到留存,用户生命周期分析全流程

已收藏分享从拉新到留存,用户生命周期分析全流程 2025-02-17 17:02人人都是产品经理在当今竞争激烈的市场环境中,理解并管理用户生命周期是实现用户增长和留存的关键。本文将深入剖析用户生命周期的全流程管理,从拉新到留存,详细解读不同业务类型(如消费品、耐用品、平台型…

朴素贝叶斯其实并不朴素

朴素贝叶斯英文名称NaiveBayes,朴素贝叶斯确实nave,但是并不朴素,而是简单,并不是逻辑上面的简单,而是假设上面的简单。 1.贝叶斯公式 ​ 其中: P(C|X)是类C在给定特征X下的后验概率。 P(X|C)是特征X在给定类C下的条件概率,也叫做似然。 P(C)是类C的先验概率。 P(X)是特…