死锁的发生对系统的性能和吞吐量都有重要影响,经检测发现,管理信息系统的死锁主要是因为两个或多个线程(登录)抢占同一表数据资源。引起长时间抢占同一资源不是因为我们需要处理的事务太复杂,时间太长,而往往是因为我们在前端应用程序对数据库作操作时忘了提交。本文介绍一种处理解决这种死锁的方法。 Sybase封锁原理 数据共享与数据一致性是一对不可调和的矛盾,为了达到数据共享与数据一致,必须进行并发控制。并发控制的任务就是为了避免共享冲突而引起的数据不一致。Sybase sql server(WINDOWS平台上强大的数据库平台)并发控制的方法是加锁机制(LOCKING)。 锁的类型/可申请的锁 已有的锁 S U X S ∨ ∨ × U ∨ × × X × × × Sybase sql server(WINDOWS平台上强大的数据库平台)有三种封锁类型:排它锁(exclusive lock,简称X锁);共享锁(share lock,简称S锁);更新锁(update lock,简称U锁)。这三种锁的相容矩阵表如下: ×:表示不兼容。∨:表示兼容。Sybase sql server(WINDOWS平台上强大的数据库平台)是自动决定加锁类型的。一般来说,读(SELECT)操作使用S锁,写(UPDATE,INSERT和delete)操作使用X锁。U锁是建立在页级上的,它在一个更新操作开始时获得,当要修改这些页时,U锁会升级为X锁。 锁的力度 sql server(WINDOWS平台上强大的数据库平台)有两级锁:页锁和表锁。通常页锁比表锁的限制更少(或更小)。页锁对本页的所有行进行锁定,而表锁则锁定整个表。为了减小用户间的数据争用和改进并发性,sql server(WINDOWS平台上强大的数据库平台)试图尽可能地使用页锁。 当sql server(WINDOWS平台上强大的数据库平台)决定一个语句将访问整个表或表的大多数页时,它用表锁来提供更有效的锁定。锁定策略直接受查询方案约束,如果update或delete语句没有可用的索引,它就执行表扫描或请求一个表锁定。如果update或delete语句使用了索引,它就通过请求页锁来开始,如果影响到大多数行,它就要请求表锁。一旦一个语句积累的页锁超过锁提升阈值,sql server(WINDOWS平台上强大的数据库平台)就设法给该对象分配一个表锁。如果成功了,页锁就不再必要了,因此被释放。表锁也在页层提供避免锁冲突的方法。对于有些命令sql server(WINDOWS平台上强大的数据库平台)自动使用表锁。 锁的状态 sql server(WINDOWS平台上强大的数据库平台)加锁有三种状态: 1)意向锁(intend)—是一种表级锁,它表示在一个数据页上获得一个S或X锁的意向。意向锁可以防止其他事务在该数据页的表上获得排它锁。 2)阻塞(blocking,简记blk)—它表明目前加锁进程的状态,带有blk后缀的锁说明该进程目前正阻塞另一个需要获得锁的进程,只有这一进程完成,其他进程才可以进行。 3)需求锁(demand)—表示此时该进程企图得到一个排它锁。它可以防止在这一表或页上加过多的S锁,她表示某一事务是下一个去锁定该表和该页的事务。
需求锁是一个内部过程,因此用sp_lock是无法看见的。 Sqlclub学习社区
死锁DEADLOCK
简单地说,有两个用户进程,每个进程都在一个单独的页或表上有一个锁,而且每个进程都想在对方进程的页或表上请求不相容锁时就会发生“死锁”。在这种情况下,第一个进程在等待另一进程释放锁,但另一进程要等到第一个进程的对象释放时才会释放自己的锁。
sql server(WINDOWS平台上强大的数据库平台)检查是否死锁,并终止事务中CPU时间积累最小的用户(即最后进入的用户)。sql server(WINDOWS平台上强大的数据库平台)回滚该用户的事务,并用消息号1205通知有此死锁行为的应用程序,然后允许其他用户进程继续进行。
在多用户情形下,每个用户的应用程序都应检查每个修改数据的事务是否有1205号消息,以此确定是否有可能死锁。消息号1025表示该用户的事务因死锁而终止并被回滚。应用程序必须重新开始这个事务处理。copyright Sqlclub
查找死锁原因 copyright Sqlclub
既然管理信息系统长时间死锁的原因是由于我们提交或者是提交不当,那么我们就可以通过修改程序防止出现死锁。定位死锁出错处主要经过以下三步:
1)在死锁出现时,用SP_WHO,SP_LOCK获得进程与锁的活动情况。
2)结合库表sysobjects和相应的操作员信息表查出被锁的库表与锁住别人的操作员。
3)根据锁定的库表与操作员的岗位,可以估计出程序大约出错处。询问操作员在死锁时执行的具体操作即可完全定位出错处。最后查找程序并修改之。
用sp_who获取关于被阻碍进程的信息
系统过程sp_who给出系统进程的报告。如果用户的命令正被另一进程保持的锁阻碍,则:
◆status列显示“lock sleep”。
◆blk列显示保持该锁或这些锁的进程标识,即被谁锁定了。
◆loginame列显示登录操作员。结合相应的操作员信息表,便可知道操作员是谁。 copyright Sqlclub
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
……
Sqlclub学习社区
用sp_lock浏览锁
要得到关于当前sql server(WINDOWS平台上强大的数据库平台)上保持的锁的报告,可用系统过程sp_lock [spid1[,spid2]],spid1,spid2是表master.dbo.sysprocesses中的sql server(WINDOWS平台上强大的数据库平台)进程id号,用sp_who可以得到锁定与被锁定的spid号:
◆locktype列显示加锁的类型和封锁的粒度,有些锁的后缀还带有blk表明锁的状态。 Sqlclub学习社区
前缀表明锁的类型: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
…… Sqlclub学习社区
定位出错处
根据sp_who与sp_lock命令的结果,结合sysobjects和相应的操作员信息表。得到操作员及其在死锁时所操作的库表,便大约可以知道应用程序。
分享到:
相关推荐
"Sybase数据库死锁问题" 在Sybase数据库中,死锁的问题对系统的性能和吞吐量都有重要影响。经检测发现,管理信息系统的死锁主要是因为两个或多个线程(登录)抢占同一表数据资源。如果不解决死锁问题,将会对系统的...
### 解决Sybase数据库死锁 #### Sybase数据库死锁概述 死锁是数据库管理系统中一个常见的问题,尤其是在高并发的环境下更为突出。Sybase数据库中的死锁通常发生在两个或多个事务试图锁定相同的资源(如表或记录)时...
但是,锁机制也可能会导致性能问题和死锁问题。因此,数据库管理员需要合理地配置锁机制,避免锁的竞争和死锁。 在 Sybase 数据库中,可以使用以下方法来避免死锁: 1. 使用事务隔离级别,例如,READ COMMITTED 或...
数据库死锁分析是数据库设计、开发和运行维护中非常重要的一个问题,需要严格遵守《数据库设计规范》,使用行锁和控制事务的执行时间,避免死锁的产生,并定期检查数据库日志,自动解开死锁,避免死锁对数据库的影响...
**SYBASE数据库日志详解** SYBASE SQL Server数据库系统依赖于事务日志来跟踪和确保数据的完整性和一致性。事务日志是数据库的关键组件,它记录了所有改变数据库状态的操作,这对于恢复和故障排查至关重要。本文将...
Sybase数据库系统因其高效稳定而被广泛应用于多种业务场景之中,但在实际应用过程中难免会遇到各种问题,如数据库死锁、进程阻塞、查询计划不优、IO性能瓶颈等。为了有效解决这些问题,本文将介绍一系列针对Sybase...
本人长期用sybase将CSDN 论坛上面提出的sybase多个相关问题制作出chm手册,以便...Sybase数据库死锁对策 解决数据库被挂起的问题 安装Sybase ASE 如何查找数据库启动失败原因 Windows NT上手动卸载Sybase Server ......
**Sybase数据库开发参考手册** Sybase数据库系统是一款企业级的关系型数据库管理系统,由Sybase公司(现已被SAP收购)开发,广泛应用于金融、电信、制造业等对数据处理有高要求的行业。本参考手册将详细介绍Sybase...
**Sybase数据库系统详解** Sybase,作为一款强大的企业级关系型数据库管理系统,因其高效、稳定和可扩展性而备受赞誉。本资料集合是针对Sybase数据库系统的中文使用指南,涵盖了从基础概念到高级应用的全方位知识,...
华为Sybase培训教材是一份专为学习和理解Sybase数据库管理系统设计的教学资料,尤其适用于那些需要与N2000产品基础配合使用的人员。Sybase是一款高性能的企业级数据库系统,广泛应用于金融、电信、制造等行业的数据...
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数据库死锁的定位方案,存储过程,对于数据库锁的自动化处理
2. **Sybase数据库锁使用情况检查**:通过`sp_monitorconfig 'number of locks'`可以监控当前数据库的锁数量,这对于识别潜在的死锁和资源争用问题非常有用。 3. **数据库有效性检查**:`dbcc checkdb (master)`...
4. **事务处理和并发控制**:理解ACID属性,掌握如何处理并发问题,如死锁和隔离级别。 5. **备份与恢复**:学习备份策略,如何执行备份和恢复操作,以确保数据安全。 6. **性能优化**:了解索引设计、查询优化、...
### Sybase ASE数据库性能调优知识点详解 #### 一、概览 - **标题与描述**: “Sybase ASE数据库性能调优”旨在介绍如何优化Sybase Adaptive Server Enterprise (ASE) 数据库系统的性能,以实现更高效的数据管理和...
2.37 如何为当前的Sybase数据库服务器设置可用的最大数据库设备数量? 35 2.38 如何为当前的Sybase数据库服务器设置可用的最大锁数? 36 2.39 如何为当前的Sybase数据库服务器设置可用的最大用户连接数? 36 2.40...
### Sybase数据库性能优化基础知识详解 #### 一、引言 Sybase数据库是业界领先的数据库管理系统之一,尤其在金融、电信等行业中应用广泛。随着业务量的增长和技术的发展,数据库性能问题逐渐凸显,如何有效地进行...
1. 解决死锁问题:通过分析死锁日志,调整事务执行顺序或设置合适的锁定粒度。 2. 修复损坏的数据库:使用DBCC CHECKDB命令检查并修复数据库结构问题。 3. 解决性能瓶颈:分析慢查询,优化索引,或者调整SQL语句。 ...
在Sybase数据库管理系统中,锁是用于控制并发访问数据的关键机制,确保数据的一致性和完整性。当多个用户或进程同时操作同一数据时,锁能够防止数据的不一致性和死锁问题。本文将深入探讨如何检查Sybase中的锁表、...
《Sybase 企业级管理员参考手册》是一本深入探讨Sybase数据库管理系统运维的权威指南,专为高级数据库管理员设计,旨在提供全面、详尽的Sybase管理知识和技术。该手册覆盖了从安装配置到性能优化,从故障排查到高...