oracle cf enqueue,7.oracle的dump理解七 enqueue理论及dump enqueues

7.oracle的dump理解七 enqueue理论及dump enqueues

前面几篇狠狠地学习了一把Oracle块相关知识,虽然没有完全掌握,但也是受益匪浅,感触良多。0和1虽然只有两种变化,但是通过数量堆叠和排序,也可以演绎如此缤纷的世界。

此处省略1万字~

现在我们来看下如何dump enqueues。

可以使用oradebug命令来操作。

1     理论知识

1.1     关于锁,Oracle锁归因

Oracle中的任何一个锁都可以归于如下一个方面,蛤蟆此处就不翻译了。

•   Data Dictionary Locks (DDL)

–     Row cache locks

–     Library cache locks and pins

•   Data Manipulation Locks(DML)

–     Row locks

–     Table locks

•   Internal locks and latches

•   Distributed locks

•   Parallel Cache Management(PCM) locks

1.2     关于enqueue

Enqueue是Kernel Service Enqueues (KSQ) 层的东西。

可以在本地实例,也可以使跨多个实例。

Enqueue通过会话进行获取、转换和释放而不是进程。

有两种不同的形式:一种是客户端产生,例如DML锁(TM),另一种是 KSQ自己产生,例如媒介恢复enqueue.

enqueue 有6个锁模式,分别是: X 、 SSX、 S、SX、SS、NULL。

主要用于并发访问控制,像TMtable lock表锁 和 TX 事务锁都是 enqueue。enqueue lock被设计出来用于那些需要较长时间锁机制的场景。

当一个进程以某种模式持有某个enqueue , 而另一个进程尝试以某种模式request 这个enqueue的兼容矩阵如下。

请求模式

持有模式

NULL

SS

SX

S

SSX

X

NULL

成功

成功

成功

成功

成功

成功

SS

成功

成功

成功

成功

成功

失败

SX

成功

成功

成功

失败

失败

失败

S

成功

成功

失败

成功

失败

失败

SSX

成功

成功

失败

失败

失败

失败

X

成功

失败

失败

失败

失败

失败

如下表更下清晰:

Enqueue Resource以2个 字母代表例如  TX和TM ,带有4个数字 例如 TM-00017927-00000000-00000000-00000000 称作 resource id 的4个部分,还有ID1和ID2。不同锁类型下的ID1和ID2有不同的含义。

内部一个Enqueue Resource对应一个KSQRS结构,该KSQRS结构拥有三个列表:

§owner list

§waiter list

§converter list

每个owner,waiter,converter有一个锁结构叫做ksglk.

0818b9ca8b590ca3270a3433284dd417.png

1.3     Enqueue和lock关系

这个问题也曾深深的困扰着蛤蟆。

简单理解两个就是同一个东西。微观概念存在有一些差异是难免的,为了锁住共享资源只有一个LOCK实现起来很难,需要一些资源配合。

可以先记住如下:

enqueue resource 和enqueue lock 配合的enqueues锁机制来管理共享资源。

1.4        Enqueue hash chain

所有resource结构都在hash表上,不同的resource在不同的hash chain上,所以为了找到resource必然会用哈希函数。通过

如下图:

0818b9ca8b590ca3270a3433284dd417.png

为了复用没有使用的资源结构,空闲的资源结构连接在free list上。类似buffer cache的LRU链表。

1.5     Enqueue Lock步骤

l  根据计算HASH值,确定链表

l  得到enqueue hash chains latch

l  定位此资源,如果不存在,在空闲资源列表中取一个放到此处

l  获取enqueues latch

l  获取空闲lock结构

l  将enqueue lock对应的信息填充进去

l  将lock结构挂到此enqueue resource结构式

l  释放enqueues latch

l  释放enqueue hash chains latch

1.6     相关参数

_ENQUEUE_HASH:size of hash table for resource structures

_ENQUEUE_HASH_CHAIN_LATCHES:number of latches protecting the hash chains of the resource structure

查询数据库资源(resources, locks, or processes)

如下:

select *from v$resource_limit;

processes           62 69          300           300    0

sessions             60 69          472           472    0

enqueue_locks    23 43         5860          5860    0

enqueue_resources  18    44         2296    UNLIMITED       0

ges_procs          0  0             0             0    0

ges_ress             0  0             0    UNLIMITED       0

ges_locks           0  0             0    UNLIMITED       0

ges_cache_ress   0  0             0    UNLIMITED       0

ges_reg_msgs     0  0             0    UNLIMITED       0

ges_big_msgs     0  0             0    UNLIMITED       0

ges_rsv_msgs     0  0             0             0    0

gcs_resources     0  0             0    UNLIMITED       0

gcs_shadows      0  0             0    UNLIMITED       0

smartio_overhead_memory    0     0             0    UNLIMITED       0

smartio_buffer_memory 0     0             0    UNLIMITED       0

smartio_metadata_memory    0     0             0    UNLIMITED       0

smartio_sessions 0  0             0    UNLIMITED       0

dml_locks          0  23         2076    UNLIMITED       0

temporary_table_locks   0     5     UNLIMITED       UNLIMITED       0

transactions        0  5           519    UNLIMITED       0

branches            0  0           519    UNLIMITED       0

cmtcallbk          0  2           519    UNLIMITED       0

max_rollback_segments 11    11          519         65535    0

sort_segment_locks 0     8     UNLIMITED       UNLIMITED       0

k2q_locks          0  0           944    UNLIMITED       0

max_shared_servers       1     1     UNLIMITED       UNLIMITED       0

parallel_max_servers     16    16          160         32767    0

2     DUMP ENQUEUES

理论更多可以参考Oracle Wait Interface和DSI 405。

ORADEBUG命令下DUMP Enqueues只有3种等级。

1=enqueueresource hash table

2=1+list ofcurrently used resources

3=2+activeenqueues on each resource

包含资源和队列。等级3是最常用的。大小取决于在V$LOCK上可见行的数量。通常小于1MB。

SQL> oradebug setmypid

SQL> oradebug tracefile_name

SQL> oradebug dump enqueues 1

3     TRACE 文件

3.1     DUMP等级1

在蛤蟆的环境下大概是370多行,大小26KB。

等级1是队列资源的HASH表。

有如下行:

Hash:      length: 979, at: 000007FF2D6E2978

表示HASH表的长度为979,地址为000007FF2D6E2978

查看隐藏参数得到如下:

_enqueue_hash                  979      enqueue hash table length

隐藏参数查询命令如下:

col nameformat a30

col valueformat a8

coldescription format a40 word_wrapped

setverify off

SELECTx.ksppinm name, y.ksppstvl value, x.ksppdesc description FROM x$ksppi x,x$ksppsv y WHERE x.inst_id = userenv('Instance') AND y.inst_id =userenv('Instance') AND x.indx = y.indx AND x.ksppinm LIKE'%&hidden_parameter_name%';

哈希表的长度决定了有多少个HASH链。

每个链描述如下:[2d6e2978,2d6e2978]

这样共979个。

3.2     DUMP等级2

大概是570多行,大小42KB。

除了等级1上的HASH表之外,还有18条使用的RESOURCE

可以通过如下命令查看。

select *from v$resource;

ADDR             TY        ID1        ID2    CON_ID

------------------ ---------- ---------- ----------

000007FF2D690E60PW          1          0          0

000007FF2D690EF0KT      17312          0          0

000007FF2D6912F8MR        201          0          0

000007FF2D691F70XR          4          0          0

000007FF2D692000RD          1          0          0

000007FF2D692378CF          0          0         0

000007FF2D6927F8RT          1          0          0

000007FF2D692888RS         25          1          0

000007FF2D6929A8MR          3          0          0

000007FF2D692B58MR          5          0          0

000007FF2D692BE8MR          7          0         0

000007FF2D692C90MR          8          0          0

000007FF2D692E40MR          1          0          0

000007FF2D692ED0MR          6          0          0

000007FF2D6958D0TA          6          2          0

000007FF2D697028TS          3         1          0

000007FF2D698378KD          0          0          0

000007FF2D69C968AE        133          0          0

找其中一个如下:

-------------------------------------------------------------------------

MR-00000005-00000000-00000000-00000000

res: 0x000007FF2D692B58 , flags: (0x12)ALO/-/-/-/-/-

held counts: NULL=0 , SS=0 , SX=0 , S=1 , SSX=0 , X=0 (bmask: 0x10)

lock value: 00000000 00000000 00000000 00000000

htb(0x000007FF2D692B58): [2d6e98a8,2d6e98a8]

own(0x000007FF2D692B68): [2d51dd68,2d51dd68]

cnv(0x000007FF2D692B88): [2d692b88,2d692b88]

wtr(0x000007FF2D692B78): [2d692b78,2d692b78]

比直接查看v$resrouce要详细很多,直接查看只有一行

其中:MR-00000005-00000000-00000000-00000000

代表EnqueueResource的字母和resourceid 的4个部分。

held counts:表示被不同模式持有的次数。

htb(0x000007FF2D692B58):[2d6e98a8,2d6e98a8]

值2D692B58也是在前面DUMP 1中出现的哈希链中的一条。

说明这个resource挂载这个哈希链上,

own(0x000007FF2D692B68): [2d51dd68,2d51dd68]

cnv(0x000007FF2D692B88): [2d692b88,2d692b88]

wtr(0x000007FF2D692B78): [2d692b78,2d692b78]

分别表示owner,convert,waiter三个ksglk结构,以及owner list,convert list和waiter list三个链。

3.3     DUMP等级3

大概是800多行,大小42KB。

增加了每个资源上活动的enqueue.

每个resource后面增加了如下内容:

lock summary:

OWN: L1:S

CNV:

WTR:

#of incomp w/ SS converters: 0

#of incomp w/ SS waiters: 0

lock details:

lock                     lst holdwait   sid:ser   owner     link

-------------------------------------------------------------------------

L1:0x000007FF2D51DD58 OWN    S   --  358:4912  000007FF2DE6B258[2d692b68,2d692b68]

列出了LOCK概要和详细:

包括LOCK的地址,列表是OWERN,WAITER还是CONVERTER,持有类型,会话ID,拥有者,所在链。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于PyTorch的Embedding和LSTM的自动写诗实验LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的这个代码主要是研究手写数字的识别效率,用卷积神经网络算法来实现,用的是官方手写字体数据,能够显现百分之九十以上的识别率+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!
基于LSTM+CNN的自然语言处理,基于单维LSTM、多维LSTM时序预测算法和多元线性回归算法的预测模型LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值