`

Sybase数据库死锁

    博客分类:
  • DB
阅读更多
查看锁表情况:

sp_who [dbname]



查看被锁的表的id号[table_id] :

sp_lock



根据被锁表id号查看表名:

select * from dbo.sysobjects where id in (table_id)

解锁:

kill spid


详细参考如下:

Sybase数据库死锁对策 转载
死锁的发生对系统的性能和吞吐量都有重要影响,经检测发现,管理信息系统的死锁主要是因为两个或多个线程(登录)抢占同一表数据资源。引起长时间抢占同一资源不是因为我们需要处理的事务太复杂,时间太长,而往往是因为我们在前端应用程序对数据库作操作时忘了提交。本文介绍一种处理解决这种死锁的方法。
Sybase封锁原理
数据共享与数据一致性是一对不可调和的矛盾,为了达到数据共享与数据一致,必须进行并发控制。并发控制的任务就是为了避免共享冲突而引起的数据不一致。Sybase SQL Server并发控制的方法是加锁机制(LOCKING).

锁的类型


Sybase SQL Server有三种封锁类型:排它锁(exclusive lock,简称X锁);共享锁(share lock,简称S锁);更新锁(update lock,简称U锁)。这三种锁的相容矩阵表如下:
×:表示不兼容。∨:表示兼容。
Sybase SQL Server是自动决定加锁类型的。一般来说,读(SELECT)操作使用S锁,写(UPDATE,INSERT和delete)操作使用X锁。U锁是建立在页级上的,它在一个更新操作开始时获得,当要修改这些页时,U锁会升级为X锁。

锁的力度
SQL Server有两级锁:页锁和表锁。通常页锁比表锁的限制更少(或更小)。页锁对本页的所有行进行锁定,而表锁则锁定整个表。为了减小用户间的数据争用和改进并发性,SQL Server试图尽可能地使用页锁。
当SQL Server决定一个语句将访问整个表或表的大多数页时,它用表锁来提供更有效的锁定。锁定策略直接受查询方案约束,如果update或delete语句没有可用的索引,它就执行表扫描或请求一个表锁定。如果update或delete语句使用了索引,它就通过请求页锁来开始,如果影响到大多数行,它就要请求表锁。一旦一个语句积累的页锁超过锁提升阈值,SQL Server就设法给该对象分配一个表锁。如果成功了,页锁就不再必要了,因此被释放。表锁也在页层提供避免锁冲突的方法。对于有些命令SQL Server自动使用表锁。

锁的状态
SQL SERVER加锁有三种状态:
1)意向锁(intend)—是一种表级锁,它表示在一个数据页上获得一个S或X锁的意向。意向锁可以防止其他事务在该数据页的表上获得排它锁。
2)阻塞(blocking,简记blk)—它表明目前加锁进程的状态,带有blk后缀的锁说明该进程目前正阻塞另一个需要获得锁的进程,只有这一进程完成,其他进程才可以进行。
3)需求锁(demand)—表示此时该进程企图得到一个排它锁。它可以防止在这一表或页上加过多的S锁,她表示某一事务是下一个去锁定该表和该页的事务。
需求锁是一个内部过程,因此用sp_lock是无法看见的。

死锁DEADLOCK
简单地说,有两个用户进程,每个进程都在一个单独的页或表上有一个锁,而且每个进程都想在对方进程的页或表上请求不相容锁时就会发生“死锁”。在这种情况下,第一个进程在等待另一进程释放锁,但另一进程要等到第一个进程的对象释放时才会释放自己的锁。
SQL Server检查是否死锁,并终止事务中CPU时间积累最小的用户(即最后进入的用户)。SQL Server回滚该用户的事务,并用消息号1205通知有此死锁行为的应用程序,然后允许其他用户进程继续进行。
在多用户情形下,每个用户的应用程序都应检查每个修改数据的事务是否有1205号消息,以此确定是否有可能死锁。消息号1025表示该用户的事务因死锁而终止并被回滚。应用程序必须重新开始这个事务处理。

查找死锁原因
既然管理信息系统长时间死锁的原因是由于我们提交或者是提交不当,那么我们就可以通过修改程序防止出现死锁。定位死锁出错处主要经过以下三步:
1)在死锁出现时,用SP_WHO,SP_LOCK获得进程与锁的活动情况。

2)结合库表sysobjects和相应的操作员信息表查出被锁的库表与锁住别人的操作员。

3)根据锁定的库表与操作员的岗位,可以估计出程序大约出错处。询问操作员在死锁时执行的具体操作即可完全定位出错处。最后查找程序并修改之。

用sp_who获取关于被阻碍进程的信息
系统过程sp_who给出系统进程的报告。如果用户的命令正被另一进程保持的锁阻碍,则:

◆status列显示“lock sleep”。

◆blk列显示保持该锁或这些锁的进程标识,即被谁锁定了。

◆loginame列显示登录操作员。结合相应的操作员信息表,便可知道操作员是谁。

Fid spid status loginame origname blk dbname cmd

0 1 lock sleep lm lm 18 QJYD SELECT

0 2 sleeping NULL NULL 0 master NETWORK HANDLER

0 3 sleeping NULL NULL 0 master NETWORK HANDLER

……

用sp_lock浏览锁

要得到关于当前SQL Server上保持的锁的报告,可用系统过程sp_lock [spid1[,spid2]],spid1,spid2是表master.dbo.sysprocesses中的sql server进程id号,用sp_who可以得到锁定与被锁定的spid号:
◆locktype列显示加锁的类型和封锁的粒度,有些锁的后缀还带有blk表明锁的状态。前缀表明锁的类型:Sh—共享锁,Ex—排它锁或更新锁,中间表明锁死在表上(”table”或’intent’)还是在页上(page). 后缀“blk”表明该进程正在障碍另一个需要请求锁的进程。一旦正在障碍的进程一结束,其他进程就向前移动。“demand”后缀表明当前共享锁一释放, 该进程就申请互斥锁。
◆table_id列显示表的id号,结合sysobjects即可查出被封锁的表名。
执行该进程后屏幕显示
Fid Spid locktype table_id page row dbname Class context

0 1 Sh_intent 678293476 0 0 QJYD Non Cursor LockFam dur

0 1 Sh_page 678293476 31764 0 QJYD Non Cursor Lock

0 18 Ex_intent 9767092 0 0 QJYD Non Cursor LockFam dur

……

定位出错处
根据sp_who与sp_lock命令的结果,结合sysobjects和相应的操作员信息表。得到操作员及其在死锁时所操作的库表,便大约可以知道应用程序的出错处,再询问操作员在死锁时执行什么操作以进一步认证。最后查找程序并修正之。
  • 大小: 7.3 KB
分享到:
评论

相关推荐

    解决Sybase数据库死锁

    ### 解决Sybase数据库死锁 #### Sybase数据库死锁概述 死锁是数据库管理系统中一个常见的问题,尤其是在高并发的环境下更为突出。Sybase数据库中的死锁通常发生在两个或多个事务试图锁定相同的资源(如表或记录)时...

    Sybase数据库死锁问题

    "Sybase数据库死锁问题" 在Sybase数据库中,死锁的问题对系统的性能和吞吐量都有重要影响。经检测发现,管理信息系统的死锁主要是因为两个或多个线程(登录)抢占同一表数据资源。如果不解决死锁问题,将会对系统的...

    sybase数据库查被锁的表.doc

    在 Sybase 数据库中,可以使用以下方法来避免死锁: 1. 使用事务隔离级别,例如,READ COMMITTED 或 SERIALIZABLE。 2. 使用乐观锁或悲观锁机制。 3. 使用 Row-Level locking 机制。 4. 避免使用长事务和大量的锁定...

    数据库死锁分析.doc

    数据库死锁分析 数据库死锁是指在某组资源中,两个或两个以上的线程在执行过程中,在争夺某一资源时而造成互相等待的现象,若无外力的作用下,它们都将无法推进下去,死时就可能会产生死锁。这些永远在互相等待的...

    sybase集锦手册

    本人长期用sybase将CSDN 论坛上面提出的sybase多个相关问题制作出chm手册,以便...Sybase数据库死锁对策 解决数据库被挂起的问题 安装Sybase ASE 如何查找数据库启动失败原因 Windows NT上手动卸载Sybase Server ......

    SYBASE数据库日志详解[借鉴].pdf

    **SYBASE数据库日志详解** SYBASE SQL Server数据库系统依赖于事务日志来跟踪和确保数据的完整性和一致性。事务日志是数据库的关键组件,它记录了所有改变数据库状态的操作,这对于恢复和故障排查至关重要。本文将...

    Sybase数据库常用维护操作

    Sybase数据库系统因其高效稳定而被广泛应用于多种业务场景之中,但在实际应用过程中难免会遇到各种问题,如数据库死锁、进程阻塞、查询计划不优、IO性能瓶颈等。为了有效解决这些问题,本文将介绍一系列针对Sybase...

    sybase查询锁

    sybase数据库死锁的定位方案,存储过程,对于数据库锁的自动化处理

    Sybase数据库开发参考手册.rar

    **Sybase数据库开发参考手册** Sybase数据库系统是一款企业级的关系型数据库管理系统,由Sybase公司(现已被SAP收购)开发,广泛应用于金融、电信、制造业等对数据处理有高要求的行业。本参考手册将详细介绍Sybase...

    sybase中文资料-四部分

    **Sybase数据库系统详解** Sybase,作为一款强大的企业级关系型数据库管理系统,因其高效、稳定和可扩展性而备受赞誉。本资料集合是针对Sybase数据库系统的中文使用指南,涵盖了从基础概念到高级应用的全方位知识,...

    华为sybase培训教材

    华为Sybase培训教材是一份专为学习和理解Sybase数据库管理系统设计的教学资料,尤其适用于那些需要与N2000产品基础配合使用的人员。Sybase是一款高性能的企业级数据库系统,广泛应用于金融、电信、制造等行业的数据...

    SYBASE_12.0数据库维护快速参考手册

    1. 安装指导 3 1.1 ASE安装一般指导 3 1.2 ASE11.9.2简易安装手册(for Unix) 4 安装概述 4 预下载任务: 5 下载 6 IBM AIX 6 HP UX 6 Digital Unix 6 预安装任务: 7 ...4.2 SYBASE主要数据库课程介绍 92

    Sybase内部培训

    本篇内容将基于"Sybase公司(上海)内部培训资料"展开,深入探讨Sybase数据库的结构以及SQL方言,帮助学习者构建对Sybase的全面理解。 首先,我们来了解**Sybase数据库的结构**。Sybase数据库采用客户-服务器架构,...

    sybase问题检查处理与优化配置

    2. **Sybase数据库锁使用情况检查**:通过`sp_monitorconfig 'number of locks'`可以监控当前数据库的锁数量,这对于识别潜在的死锁和资源争用问题非常有用。 3. **数据库有效性检查**:`dbcc checkdb (master)`...

    Sybase ASE数据库性能调优.pdf

    ### Sybase ASE数据库性能调优知识点详解 #### 一、概览 - **标题与描述**: “Sybase ASE数据库性能调优”旨在介绍如何优化Sybase Adaptive Server Enterprise (ASE) 数据库系统的性能,以实现更高效的数据管理和...

    Sybase ASE快速参考手册.pdf

    2.37 如何为当前的Sybase数据库服务器设置可用的最大数据库设备数量? 35 2.38 如何为当前的Sybase数据库服务器设置可用的最大锁数? 36 2.39 如何为当前的Sybase数据库服务器设置可用的最大用户连接数? 36 2.40...

    Sybase Perfomance and Tuning:Basics

    ### Sybase数据库性能优化基础知识详解 #### 一、引言 Sybase数据库是业界领先的数据库管理系统之一,尤其在金融、电信等行业中应用广泛。随着业务量的增长和技术的发展,数据库性能问题逐渐凸显,如何有效地进行...

    Sybase 企业级管理员参考手册.

    《Sybase 企业级管理员参考手册》是一本深入探讨Sybase数据库管理系统运维的权威指南,专为高级数据库管理员设计,旨在提供全面、详尽的Sybase管理知识和技术。该手册覆盖了从安装配置到性能优化,从故障排查到高...

    sybase系统维护管理经验

    在IT行业中,Sybase数据库系统是企业级应用中不可或缺的一部分,尤其在金融、电信等领域有着广泛的应用。本文将深入探讨“Sybase系统维护管理经验”,包括常见问题的解决方法,帮助管理员更好地理解和处理日常运维中...

    sybase 手册

    2.1 安装过程:详述Sybase数据库的安装步骤,包括系统需求、安装介质选择、安装选项设定等。 2.2 配置参数:讨论如data、log、backup等目录设置,以及内存分配、连接限制等关键配置项。 三、数据库管理 3.1 ...

Global site tag (gtag.js) - Google Analytics