很多时候,死锁由两个或多个会话请求其他Session持有的锁而同时又持有其他Session,但也有一些特殊的死锁仅由单个Session锁触发,今天看到一篇相关的文章,搬运过来与各位共享!

引发死锁的代码:

执行环境SQL SERVER 2012 (11.0.5058)

BEGIN TRANSACTION;
GO
SELECT 'CREATE TYPE EmailAddress'
GO
CREATE TYPE EmailAddress FROM VARCHAR(320);
GO
SELECT 'CREATE dbo.foo'
GO
CREATE PROCEDURE dbo.foo
(
@param EmailAddress
)
AS
BEGIN SET NOCOUNT ON;
DECLARE @x TABLE ( e EmailAddress ); INSERT @x
SELECT @param; END;
GO
SELECT 'EXEC dbo.foo'
GO
DECLARE @x EmailAddress;
SET @x = N'whatever';
EXEC dbo.foo @param = N'whatever'; SELECT ''
GO
SELECT 'ROLLBACK TRANSACTION'
ROLLBACK TRANSACTION;

执行上面的代码后,通过Profile可以捕获到如下死锁视图:

使用sp_lock查看锁会发现:

在元数据锁7(101:0:0)上回话61已结被授予锁,但又再次申请锁,最终导致死锁。

===================================================

该场景在实际业务中几乎不会发生,一般没谁会把存储过程和用户自定义类型的创建放到事务中吧,尤其是将存储过程创建和调用放到同一个事务中。避免该问题的办法就是将存储过程和用户自定义类型的创建放到单独的事务中提交。

===================================================

姿势涨完了,该妹子镇贴!

SQL SERVER--单回话下的死锁的更多相关文章

  1. 通过SQL Server Profiler来监视分析死锁

    在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如,进程process1对table1持有1个排它锁(X),同时process1对table2请求1个排 ...

  2. SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -2(虚拟IP视角)

    1.需求描述 我们知道Windows Cluster 都是多节点的,当虚拟IP漂移的时候,一般都是从一个节点漂移到另外一个节点.如果可以及时捕捉到旧节点信息是什么.新节点信息是什么对我们提供高可用的数 ...

  3. 干货 | RDS For SQL Server单库上云

    数据库作为核心数据的重要存储,很多时候都会面临数据迁移的需求,例如:业务从本地迁移上云.数据中心故障需要切换至灾备中心.混合云或多云部署下的数据同步.流量突增导致数据库性能瓶颈需要拆分-- 本文将会一 ...

  4. sql server单表导入、导出

    sql server单表导入.导出(通过CSV文件) 导出:直接打开查询分析器查询要导出表的信息(select *  from 表),得到的结果全选,右键另存为 xxx.csv文件  (得到该表的所有 ...

  5. 使用SQL Server 扩展事件来创建死锁的时间跟踪

    我们通过SQL Server 2012图形界面来部署一个扩展事件跟踪会话.然后可以生成SQL脚本,在2008或2008 R2版本下运行类似的跟踪. 步骤1: 通过“Object Explorer”连接 ...

  6. SQL Server锁分区特性引发死锁解析

    锁分区技术使得SQL Server可以更好地应对并发情形,但也有可能带来负面影响,这里通过实例为大家介绍,分析由于锁分区造成的死锁情形. 前段时间园友@JentleWang在我的博客锁分区提升并发,以 ...

  7. 详解SQL Server 2005 Express下的事件探查器

    安装Visual Studio 2008会有附带的SQL Server 2005 Express版 我们开发一般都用那个都不单独安装SQL Server的 大家都知道express版的sql是没有 事 ...

  8. sql server 性能调优之 死锁排查

    一.概述 记得以前客户在使用软件时,有偶发出现死锁问题,因为发生的时间不确定,不好做问题的重现,当时解决问题有点棘手了.现总结下查看死锁的常用二种方式. 1.1 第一种是图形化监听: sqlserve ...

  9. SQL Server单表已700w+将普通表转换成分区表1

    最近项目中,某个表数据量爆发时增长,单表已700w+,读写性能急剧下降,所以考虑加入分区表以解燃眉之急,后续还是要分表分库,当然这是后话.下面简要说一下将普通表转为分区表的步骤.   一.创建文件组 ...

随机推荐

  1. css绘制特殊图形基础

    1.等腰三角形 .isosceles{ width:; height:; border:30px solid; border-left-color: transparent; border-right ...

  2. Python字典方法总结

    1.清空字典中元素清空,dict变为{} L.clear()-> None.  Remove all items from L 1 2 3 4 >>> L ={'shaw':2 ...

  3. nginx rewirte

    server { listen 8888; server_name jobPhp; root F:\ck\Porject\quanRelease\quanJob; try_files $uri $ur ...

  4. VC++ CButton::SetCheck 的使用方法

    CButton::SetCheck void SetCheck(int nCheck); 参数 nCheck 指定检查状态. 此参数可以是下列值之一: 值                        ...

  5. asp.net GDI+把图片绘制成自定义的椭圆形状

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. c语言知识点

    1.在c语言中,函数,声明,调用的类型务必是一致的, 2.主机id:指ip地址最后一个字节,例如,203.86.61.106,---->106指主机id, 3,端口号:6789,换成16进制1A ...

  7. C#中TreeView与数据库绑定

    protected void CreateTreeView() { TreeNode rootNode = new TreeNode(); rootNode.Text = "全部" ...

  8. java基础-java核心知识库

    本人从事java开发6年左右,主要从事互联网相关的开发,目前还是奋战在一线的码农,痛并快乐着.受互联网产品热潮的影响,关注高性能低成本架构,互联网开发框架,以下是我认为作为一个资深java程序员应该掌 ...

  9. Ubuntu 12.04(32位)安装Oracle 11g(32位)

    安装过程(主要过程就直接copy别人的教程了)及问题: 1.将系统更新到最新: sudo apt-get updatesudo apt-get dist-upgrade 2. 如果使用的Ubuntu不 ...

  10. 学习Linux所需软件

    一:  VMware虚拟机 二:VMware_Install_Cleaner 虚拟机卸载 三:XShall