堵塞是DBA常常碰到的情形,尤其是不良的应用程序设计的堵塞将导致性能严重下降直至数据库崩溃。

对DBA而言,有必要知道怎样定位到当前系统有哪些堵塞,究竟谁是堵塞者,谁是被堵塞者。本文对此给出了描写叙述并做了相关演示。

1、堵塞及其类型
a、什么是堵塞
   一个会话持有某个资源的锁,而还有一个会话在请求这个资源,就会出现堵塞(blocking)。也就是说新的会话会被挂起,直到持有锁的会话放弃锁定的资源。大多数情况下。在一个交互式应用中被严重堵塞,就可以表明应用逻辑有问题,这才是堵塞的根源。
b、堵塞得类型
   数据库中有5条常见的DML语句可能会堵塞,即:INSERT、UPDATE、DELETE、MERGE 和SELECT FOR UPDATE。

2、几种不同类型堵塞的处理办法
a、INSERT堵塞主要是因为有一个带主键的表。或者表上有惟一的约束,在两个会话试图用相同的值插入一行时引发堵塞。多表通过引用完整性约束相互链接时,在其依赖的父表正在创建或删除期间,对子表的插入可能会堵塞。

对于该类情形建议使用序列来生成主键/惟一列值。
b、对于UPDATE、DELETE、MERGE 和SELECT FOR UPDATE堵塞,仅仅要有任一session使用这些操作已经锁定行,其余的必须处于等待状态。直到当前锁定行上的锁(排他锁)释放。

对于该类情形。建议尽可能高速提交事务,或採用批量SQL方式提交。
c、对于一个堵塞的SELECT FOR UPDATE,解决方式非常easy:仅仅需添加NOWAIT 子句。它就不会堵塞了。

3、演示堵塞

--更新表,注。提示符scott@CNMMBO表明用户为scott的session,username不同,session不同。

scott@CNMMBO> update emp set sal=sal*1.1 where empno=7788;

1 row updated.

scott@CNMMBO> @my_env

SPID                SID    SERIAL# USERNAME        PROGRAM
------------ ---------- ---------- --------------- ------------------------------------------------
11205 1073 4642 robin oracle@SZDB (TNS V1-V3) --另起两个session更新相同的行,这两个session都会处于等待。直到第一个session提交或回滚
leshami@CNMMBO> update scott.emp set sal=sal+100 where empno=7788; goex_admin@CNMMBO> update scott.emp set sal=sal-50 where empno=7788; --以下在第一个session 查询堵塞情况
scott@CNMMBO> @blocker BLOCK_MSG BLOCK
-------------------------------------------------- ----------
pts/5 ('1073,4642') is blocking 1067,10438 1
pts/5 ('1073,4642') is blocking 1065,4464 1
--上面的结果表明session 1073,4642 堵塞了后面的2个
--即session 1073,4642是堵塞者,后面2个session是被堵塞者 --Author : Leshami
--Blog : http://blog.csdn.net/leshami --以下查询正在堵塞的session id,SQL语句以及被堵塞的时间
scott@CNMMBO> @blocking_session_detail.sql 'SID='||A.SID||'WAITCLASS='||A.WAIT_CLASS||'TIME='||A.SECONDS_IN_WAIT||CHR(10)||'QUERY='||B.SQL_TEXT
-------------------------------------------------------------------------------------------------------
sid=1067 Wait Class=Application Time=5995
Query=update scott.emp set sal=sal+100 where empno=7788 sid=1065 Wait Class=Application Time=225
Query=update scott.emp set sal=sal-50 where empno=7788 --以下的查询堵塞时锁的持有情况
scott@CNMMBO> @request_lock_type USERNAME SID TY LMODE REQUEST ID1 ID2
------------------------------ ---------- -- ----------- ----------- ---------- ----------
SCOTT 1073 TX Exclusive None 524319 27412
LESHAMI 1067 TX None Exclusive 524319 27412
GOEX_ADMIN 1065 TX None Exclusive 524319 27412
--能够看到LESHAMI。GOEX_ADMIN 2个用户都在请求524319/27412上的Exclusive锁,而此时已经被SCOTT加了Exclusive锁 --查询堵塞时锁的持有具体信息
scott@CNMMBO> @request_lock_detail SID USERNAME OSUSER TERMINAL OBJECT_NAME TY Lock Mode Req_Mode
---------- -------------------- --------------- ------------------------- -------------------- -- ----------- --------------------
1065 GOEX_ADMIN robin pts/1 EMP TM Row Excl
1065 GOEX_ADMIN robin pts/1 Trans-524319 TX --Waiting-- Exclusive
1067 LESHAMI robin pts/0 EMP TM Row Excl
1067 LESHAMI robin pts/0 Trans-524319 TX --Waiting-- Exclusive
1073 SCOTT robin pts/5 EMP TM Row Excl
1073 SCOTT robin pts/5 Trans-524319 TX Exclusive

文中涉及到的相关脚本下载:http://download.csdn.net/detail/robinson_0612/7607033

很多其它參考

DML Error Logging 特性

PL/SQL --> 游标

PL/SQL --> 隐式游标(SQL%FOUND)

批量SQL之 FORALL 语句

批量SQL之 BULK COLLECT 子句

PL/SQL 集合的初始化与赋值

PL/SQL 联合数组与嵌套表
PL/SQL 变长数组
PL/SQL --> PL/SQL记录

SQL tuning 步骤

高效SQL语句必杀技

父游标、子游标及共享游标

绑定变量及其优缺点

dbms_xplan之display_cursor函数的使用

dbms_xplan之display函数的使用

运行计划中各字段各模块描写叙述

使用 EXPLAIN PLAN 获取SQL语句运行计划

Oracle 堵塞(blocking blocked)的更多相关文章

  1. RAC环境下的堵塞(blocking blocked)

    RAC环境下的堵塞不同于单实例情形,由于我们须要考虑到位于不同实例的session.也就是说之前查询的v$session,v$lock对应的应变化为全局范围来查找.本文提供了2个查询脚本,并给出实例演 ...

  2. oracle find blocking session

    show current session id     select sid from v$mystat where rownum=1; show blocking session     selec ...

  3. Programming for thread in Java

    Programming for thread in Java Override Annotation package java.lang; import java.lang.annotation.El ...

  4. JAVA GUI THREAD---***

    针对用户界面的多线程 GUI下面的多线程方式 1.与GUI类分离方式 分离方式,在创建线程类实例时需要代入GUI句柄,通过GUI句柄操作GUI,也就是说线程类和GUI类都要有对方的实例,以便相互操作. ...

  5. javaSE面试题总结

      目 录 第一章 初识Java 1 1. Java跨平台原理(字节码文件.虚拟机) 1 2. Java的安全性 1 3. Java三大版本 2 4. Java开发运行过程 2 5. Java开发环境 ...

  6. 【FreeRTOS学习03】小白都能懂的Task Management 任务管理基本概念介绍

    在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级: 1 软实时和硬实时 硬实时系统的任务运行正确性与响应时限是紧密相关的 ...

  7. rabbimq之流控

    rabbitmq为了能够保证服务器在大量使用资源的情况下正常工作,会做流控. 所谓流控有以下两个方面.一是针对连接做流控,即降低某频率过快的发送消息.二是整体流控,即将所有消费者发送的消息丢掉,悄无声 ...

  8. Understanding mysql max_connect_errors

    来自:http://mysqlblog.fivefarmers.com/2013/08/08/understanding-max_connect_errors/ Perhaps like many u ...

  9. 20145208 《Java程序设计》第6周学习总结

    20145208 <Java程序设计>第6周学习总结 教材学习内容总结 输入与输出 InputStream与OutputStream 从应用程序角度来看,如果要将数据从来源取出,可以使用输 ...

随机推荐

  1. .net framework 3.5 安装报错 0x800F0954问题

    windows Server 2019 .net framework 3.5 安装报错 0x800F0954问题 .net framework 3.5的安装教程:但是安装出现0x800F0954这个错 ...

  2. Struts之 拦截器配置 ( Interceptor )

    struts2体系结构的核心就是拦截器. 以链式执行,对真正要执行的方法(execute())进行拦截.首先执行Action配置的拦截器,在Action和Result执行之后,拦截器再一次执行(与先前 ...

  3. JavaScript的相关知识

      Oject.assign()   // Cloning an object var obj = { a: 1 }; var copy = Object.assign({}, obj); conso ...

  4. JS高级——原型链

    构造函数 构造函数是特殊的函数,里面没有returen返回值 new的过程中,会自动将对象返回,不需要return new的过程中,会执行函数中的代码,会将创建的对象赋值给构造函数中的this 基本概 ...

  5. 如何利用Flashback Query 恢复误删除的数据

    网上有很多关于数据回复的文章,这里整理一篇供大家参考,希望能帮助的大家! 推荐一家即时通讯云服务商:www.yun2win.com,功能包含im即时通讯.实时音视频.电子白板.屏幕共享的多种融合通讯云 ...

  6. [Windows Server 2003] ASP.net安装方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装ASP.n ...

  7. CentOS下使用yum安装配置和使用svn

    安装说明 系统环境:CentOS-6.3安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 检查已安装版本 ? 1 2 3 4 5 6 7 8 9 1 ...

  8. windows程序设为开机自启动

    在Windows文件管理器中输入 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup 把程序快捷方式放到此处即可.

  9. Linux培训时长多久可以学会?马哥教育9年经验之谈

    在Linux的热潮下,很多人萌发了学习Linux的想法.比起自学,培训是一个能够快速.系统的掌握知识的方式,也受到了不少人的青睐. 很多人都想知道通过培训学习Linux需要多长时间,今天咱们就来盘点一 ...

  10. 安装部署NetBeans mysql Tomact joget workflow 环境

    一.安装joget workflow 1.安装jdk 下载jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html ...