对于单实例数据库而言,死锁的检测在秒级完成,而RAC环境则死锁的检测时间默认达到了1分钟。

对于单实例环境如果出现了死锁,那么马上其中一个进程就被中止,用户可以快速的得到错误返回。而对于RAC而言,死锁的检测并不是实时完成,而是需要60秒左右的时间。

会话1执行:

SQL> CREATE TABLE t_deadlock (id NUMBER PRIMARY KEY, name varchar2(30));

TABLE created.

Elapsed: 00:00:00.12

SQL> INSERT INTO t_deadlock VALUES (1, 'a');

1 ROW created.

Elapsed: 00:00:00.00

SQL> INSERT INTO t_deadlock VALUES (2, 'b');

1 ROW created.

Elapsed: 00:00:00.00

SQL> commit;

Commit complete.

Elapsed: 00:00:00.00

SQL> UPDATE t_deadlock SET name = 'a1' WHERE id = 1;

1 ROW updated.

Elapsed: 00:00:00.00

SQL> create table t_deadlock (id number primary key, name varchar2(30));

Table created.

Elapsed: 00:00:00.12

SQL> insert into t_deadlock values (1, 'a');

1 row created.

Elapsed: 00:00:00.00

SQL> insert into t_deadlock values (2, 'b');

1 row created.

Elapsed: 00:00:00.00

SQL> commit;

Commit complete.

Elapsed: 00:00:00.00

SQL> update t_deadlock set name = 'a1' where id = 1;

1 row updated.

Elapsed: 00:00:00.00

会话2执行:

SQL> SET timing ON

SQL> UPDATE t_deadlock SET name = 'b2' WHERE id = 2;

1 ROW updated.

Elapsed: 00:00:00.00

SQL> UPDATE t_deadlock SET name = 'a2' WHERE id = 1;

SQL> set timing on

SQL> update t_deadlock set name = 'b2' where id = 2;

1 row updated.

Elapsed: 00:00:00.00

SQL> update t_deadlock set name = 'a2' where id = 1;

此时,会话2等待会话1的最终操作,下面会话1更新被会话2锁定的行,引发死锁:

SQL> UPDATE t_deadlock SET name = 'b1' WHERE id = 2;

UPDATE t_deadlock SET name = 'b1' WHERE id = 2

*

ERROR at line 1:

ORA-00060: deadlock detected while waiting FOR resource

Elapsed: 00:01:00.12

SQL> update t_deadlock set name = 'b1' where id = 2;

update t_deadlock set name = 'b1' where id = 2

*

ERROR at line 1:

ORA-00060: deadlock detected while waiting for resource

Elapsed: 00:01:00.12

可以看到,死锁的超时检测为1分钟。

而这个死锁的检测时间是可以调整的,Oracle通过隐含参数_lm_dd_interval控制:

SQL> conn / AS sysdba

Connected.

SQL> ALTER system SET "_lm_dd_interval" = 30 scope = spfile;

System altered.

SQL> shutdown immediate

DATABASE closed.

DATABASE dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 281018368 bytes

Fixed SIZE 2095672 bytes

Variable SIZE 104859080 bytes

DATABASE Buffers 167772160 bytes

Redo Buffers 6291456 bytes

DATABASE mounted.

DATABASE opened.

SQL> conn / as sysdba

Connected.

SQL> alter system set "_lm_dd_interval" = 30 scope = spfile;

System altered.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 281018368 bytes

Fixed Size 2095672 bytes

Variable Size 104859080 bytes

Database Buffers 167772160 bytes

Redo Buffers 6291456 bytes

Database mounted.

Database opened.

再次测试死锁的检测时间,会话1:

SQL> UPDATE t_deadlock SET name = 'a1' WHERE id = 1;

1 ROW updated.

SQL> SET timing ON

SQL> update t_deadlock set name = 'a1' where id = 1;

1 row updated.

SQL> set timing on

会话2执行更新:

SQL> SET timing ON

SQL> UPDATE t_deadlock SET name = 'b2' WHERE id = 2;

1 ROW updated.

Elapsed: 00:00:00.02

SQL> UPDATE t_deadlock SET name = 'a2' WHERE id = 1;

SQL> set timing on

SQL> update t_deadlock set name = 'b2' where id = 2;

1 row updated.

Elapsed: 00:00:00.02

SQL> update t_deadlock set name = 'a2' where id = 1;

会话1执行更新引发死锁:

SQL> UPDATE t_deadlock SET name = 'b1' WHERE id = 2;

大约30秒后,会话2报错ORA-60:

UPDATE t_deadlock SET name = 'a2' WHERE id = 1

*

ERROR at line 1:

ORA-00060: deadlock detected while waiting FOR resource

Elapsed: 00:00:30.27

SQL> update t_deadlock set name = 'b1' where id = 2;

大约30秒后,会话2报错ORA-60:

update t_deadlock set name = 'a2' where id = 1

*

ERROR at line 1:

ORA-00060: deadlock detected while waiting for resource

Elapsed: 00:00:30.27

在10.2.0.2版本上,Oracle存在一个bug,允许这个参数设置为0,在10.2.0.3以后,这个bug被修正,如果设置为0后,则数据库无法正常启动:

[oracle@node1 ~]$ sqlplus / AS sysdba

SQL*Plus: Release 10.2.0.5.0 - Production ON Mon Jun 4 07:54:09 2012

Copyright (c) 1982, 2010, Oracle. ALL Rights Reserved.

Connected TO an idle instance.

SQL> startup

ORA-00067: invalid VALUE 0 FOR parameter _lm_dd_interval; must be at least 1

[oracle@node1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Mon Jun 4 07:54:09 2012

Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

Connected to an idle instance.

SQL> startup

ORA-00067: invalid value 0 for parameter _lm_dd_interval; must be at least 1

最后修改隐含参数是Oracle不推荐的,而且修改这个参数势必会影响RAC的正常工作方式导致LDM进程的繁忙度增加,而且可能影响RAC环境的稳定性和可用性。

如果确实对于前台的死锁检查时间要求较高,建议在测试环境中详细测试后再部署到产品环境中。

oracle11g默认死锁检查时间,RAC全局死锁检测时间相关推荐

  1. MySQL死锁详解及检测和避免

    上一篇博客我们知道的Mysql事务的隔离机制和实现,以及锁的详细解析 链接: 详解MySQL脏读幻读不可重复读及事务的隔离级别和MVCC.LBCC实现,还有锁的详解 在我们使用锁的时候,有一个问题是需 ...

  2. 二十四、死锁的处理策略---检测和解除

    一.知识总览 如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁.在这种情况下,系统应当提供两个算法: 1)死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁. 2 ...

  3. greenplum源码解析 全局死锁检测GDD-1

    背景   对于单机数据库而言[如postgres],死锁检测机制相对于分布式数据库如greenplum来说相对简单,其本质是通过相关约束构造等待图,如果出现死锁情况,则采用拓扑排序重排序列规避死锁,若 ...

  4. 4由通道检测_大唐阜新煤制天然气「榜样力量」实训做实出实效——废水总酚检测时间由4小时缩短至10分钟...

    今天为大家讲述的正是这样一个需要全体外出实训员工学习的榜样,这个故事就发生在分析中心经理徐胜利身上. 有目标就会有方向.有动力 出发之前,徐胜利就暗自下决心,要不虚此行.刚到克旗公司,他便着手协调成立 ...

  5. 【C++】【TensorRT】检测时间不稳定原因汇总(持续更新)

    本人使用C++版本的TensorRT框架做模型部署的开发工作,在实际上线具体的项目过程中碰到过检测时间不理想的情况,所以本人专门为此写一篇博客记录曾经遇到过的坑以及对应的解决方案. 一.相同型号的机器 ...

  6. 信号检测检测时间改变时检测概率_漏检_虚警概率曲线

    %%%%%%%%%%%%%%%%%%%%%%%%%检测时间可变%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all clc; close all; fs = 12000;   ...

  7. 详述MIMIC 的ICU患者检测时间信息表(十六)

    ​  本文主要讲解MIMIC的ICU患者检测时间信息表(DATETIMEEVENTS).按照原本逻辑结构该表已被列入非重要分析表中,同护理人员信息表.但是笔者查看了相关数据后发现,该表具有一定的研究价 ...

  8. 死锁oracle rac,利用LOGMINER进行RAC环境下的死锁分析——转载

    RAC中的死锁的判断机制跟单机很不相同,比单机要复杂的多,而且消耗的时间和资源也比单机要多的多,所以亚马逊的DBA TEAM曾经在一份经验总结中指出如果是并发非常大的OLTP系统,如果锁的问题处理不好 ...

  9. 死锁四个必要条件及死锁的预防、检测、避免、解除

    死锁: 我们先来思考一个问题:我们加锁以后,再次进行加锁,这样会发生什么? 当我们第二次申请锁的时候,这个时候锁已经被占用了,该线程就会被挂起,但是刚好这个线程就是拥有锁的线程了,那么这个线程就永远挂 ...

最新文章

  1. R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表)
  2. MyBatis-06 MyBatis XML方式之多个接口参数用法
  3. Spring常问的面试
  4. Linux搭建oracle数据库
  5. win7 'IIS APPPOOL\Classic .NET AppPool' 登录失败
  6. android动态切换logo和label
  7. easycode不推荐使用_为什么?mysql不推荐使用uuid或者雪花id作为主键?
  8. 训练自己的数据_PyTorch版CenterNet训练自己的数据集
  9. 人工智能(12)---中国智能语音业务与应用发展白皮书
  10. SQL Server更新联接概述
  11. jQuery事件相关方法
  12. Pandas 读取 csv 得 DataFrame 转换成 List
  13. sql语句的书写顺序和执行顺序(包括各种可能的指令)
  14. ArcGIS for Android 100.3.0(1):开发环境配置
  15. 一步一步实现iOS微信自动抢红包(非越狱)
  16. ansys和matlab优化,基于ANSYS和MATLAB的优化设计
  17. linux批量修改文件编码格式(包含子目录)
  18. Win7 SP1 安装 .NET Framework 4.6.2,提示“时间戳签名和或证书无法验证或已损坏”
  19. fn映射 mac 键盘_fn键:Mac Fn组合按键功能与使用方法
  20. Jenkins插件安装和系统配置

热门文章

  1. 远程访问西门子PLC方案
  2. kettle案例22-剪切字符串
  3. xp出现i386asms的解决方法
  4. 乐学堂掌财社天风:股票价值理论是什么意思
  5. python学习-画数学函数
  6. Transwarp KunDB 备份恢复工具安装和备份工作自动化
  7. SBCSDN-mysql中sfz号升级
  8. 各大世界名牌大学课件下载地址
  9. 【180623】VC++台球游戏
  10. Lucene bm25 结合 jieba中文分词搜索