SQLSERVER 语句交错引发的死锁研究】的更多相关文章

项目上线,准备验收前出现了一个严重的问题:很多select语句作为死锁的牺牲,大部分报表无法打开.这个问题影响范围很大所有的报表都无法访问,而我们的报表是放在电视上面轮播的,电视放在工厂里面,所以出现问题后,整个工厂都知道了. 解决这个问题比较曲折,首先是写SAP接口的同事发现了问题:SAP一直在传错误数据导致产量表被锁住.修改SAP传输的错误数据后,这个死锁的问题没有出现了.但是我查看生产环境服务器日志的时候,发现这个问题依然存在,由于客户没有提这个问题,我也就是没有理由要求花时间修改了,因为…
SQLSERVER中的LOB页面简单研究 这篇文章和我另一篇文章是相辅相成的,在看<SQLSERVER2012 列存储索引的简单研究和测试>这篇文章之前希望大家先看一下这篇文章o(∩_∩)o SQLSERVER2012 列存储索引的简单研究和测试 LOB页面相信大家都不会陌生,LOB专门存储大型对象数据的,类型text.image这些数据类型的数据就是存储在LOB页面 MSDN上的解释是这样的: http://technet.microsoft.com/zh-cn/library/ms1890…
在SQL Server的应用开发过程(尤其是二次开发)中可能由于开发人员对表的结构不够了解,造成开发过程中使用了不合理的方式造成数据库引擎未按预定执行,以致影响业务.这是非常值得注意的.这次为大家介绍由于隐式数据类型转换而造成的死锁及相应解决方案. 现实中有些程序员/数据库开发者会根据数据库的处理机制实现一些应用,如抢座应用,可能会对事务中的查询加一些列的Hint以细化粒度,实现应用的同时使得影响最低,但也有可能因为一些小细节的欠缺而引发错误,从而造成糟糕的用户体验.如下面这个例子 生成测试数据…
最近遇到了一个看上去很奇怪,分析起来很有意思的死锁问题.这个死锁看上去难以理解.而分析过程中,又使用了很多分析SQL Server死锁的典型方法.记录下来整个分析过程还是很有意义的. 问题重现步骤: 经过提炼,问题重现的步骤非常简单,在SQL 2008上可以很容易地重现. 1.         首先,创建一张表格,上面有一个clustered index,两个non-clustered index. create table tt(id int identity primary key,a ch…
SQLSERVR语句 in和exists哪个效率高本人测试证明 最近很多人讨论in和exists哪个效率高,今天就自己测试一下 我使用的是客户的数据库GPOSDB(已经有数据) 环境:SQLSERVER2005   Windows7 我的测试条件:两个表作连接根据VC_IC_CardNO字段,查出CT_InhouseCard表中的VC_IC_CardNO(卡号)在CT_FuelingData表中存在的记录 前提:某些人可能在SQL语句中有多个in,或者多个exists,这些情况很难测试效率的,因…
现在互联网公司对于代码的管理越来越规范,一般都会有3个环境:开发环境,测试环境,正式环境.在开发环境进行开发,开发完成后将代码提交到测试环境进行测试,测试完毕后上线到正式环境. 今天在正式环境上遇到一个问题,做的是一个课件管理系统,在删除文件夹的时候,报错502.使用谷歌开发者工具后没有发现问题所在,在测试环境删除文件夹可以成功,并没有出现502.查询正式服务器的日志发现课件表 doc 被锁住了.因为删除文件夹的的时候,文件夹目录里的文件也需要删除,SQL语句:delete from doc w…
SQL Server语句 序号 功能 语句 1 创建数据库(创建之前判断该数据库是否存在) if exists (select * from sysdatabases where name='databaseName')drop database databaseNamegoCreate DATABASE databasename 2 删除数据库 drop database databasename 3 备份数据库 USE masterEXEC sp_addumpdevice 'disk', '…
概述 前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁.通过定位排查发现,问题的源头就是index_merge,死锁的原因也很普通,两个事务加锁顺序不同,并存在相互等待的情况.因为这个案例比较特殊,所以在此分享给大家. 死锁信息 拿到死锁问题,首先需要查看几个基本信息,包括死锁等待关系,表结构定义等. 1.表结构定义 Create Table: CREATE TABLE…
前言 前几天上午在对数据库的一张表进行操作的时候,由于这张表是按照时间的一张统计表,正好到那天没有测试数据了,于是我想将表中所有的时间,统一更新到后一个月,于是对80w条数据的更新开始了.整个过程曲折的一批.同时学到了很多知识,在此进行记录.希望对大家有帮助. 首先是大批量更新,由于数据已经进行了分区,开始对分区进行分析,然后大批量操作死锁,对死锁的解决,最后存储过程来解决数据的大批量插入. 曲折的过程开始 由于测试数据到21号就没了,21号一上去,发现开发的功能,都没有数据了,图表也都空了.查…
innodb的事务隔离级别是可重复读级别且innodb_locks_unsafe_for_binlog禁用,也就是说允许next-key lock CREATE TABLE `LockTest` (   `order_id` varchar(20) NOT NULL,   `id` bigint(20) NOT NULL AUTO_INCREMENT,   PRIMARY KEY (`id`),   KEY `idx_order_id` (`order_id`) ) ENGINE=InnoDB …