http://bbs.chinaunix.net/viewthread.php?tid=627319
Sybase数据库死锁
死锁的发生对系统的性能和吞吐量都有重要影响,经检测发现,管理信息系统的死锁主要是因为两个或多个线程(登录)抢占同一表数据资源。引起长时间抢占同一资源不是因为我们需要处理的事务太复杂,时间太长,而往往是因为我们在前端应用程序对数据库作操作时忘了提交.本文介绍一种处理解决这种死锁的方法。
Sybase封锁原理
数据共享与数据一致性是一对不可调和的矛盾,为了达到数据共享与数据一致,必须进行并发控制。并发控制的任务就是为了避免共享冲突而引起的数据不一致。Sybase SQL Server并发控制的方法是加锁机制(LOCKING).
锁的类型 可申请的锁
已有的锁 S U X
S ∨ ∨ ×
U ∨ × ×
X × × ×
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和相应的操作员信息表。得到操作员及其在死锁时所操作的库表,便大约可以知道应用程序的出错处,再询问操作员在死锁时执行什么操作以进一步认证。最后查找程序并修正之。
分享到:
相关推荐
### 解决Sybase数据库死锁 #### Sybase数据库死锁概述 死锁是数据库管理系统中一个常见的问题,尤其是在高并发的环境下更为突出。Sybase数据库中的死锁通常发生在两个或多个事务试图锁定相同的资源(如表或记录)时...
Sybase 数据库锁机制和锁表查询 Sybase 数据库锁机制是指数据库管理系统中用于控制并发访问和维护数据一致性的机制。锁机制可以防止多个事务同时访问同一资源,避免数据的不一致和损坏。 在 Sybase 数据库中,锁...
### Sybase数据库系统配置优化详解 #### 一、引言 Sybase数据库是企业级数据库管理系统之一,在金融、电信等领域有着广泛的应用。然而,在实际应用过程中,可能会遇到数据库性能缓慢的问题,这往往与系统配置密切...
通过深入学习这本《Sybase数据库系统管理指南》,你不仅可以掌握Sybase数据库的日常操作,还能提升解决复杂问题的能力,为在实际工作中应对各种挑战做好准备。对于希望在数据库管理领域提升技能的专业人士来说,这...
标题中的“sybase数据库监控工具”指的是专门针对Sybase数据库管理系统设计的一种监控解决方案,用于确保数据库的高效运行和性能优化。这种工具能够实时监控数据库的各项关键指标,包括但不限于查询性能、资源利用率...
"Sybase数据库死锁问题" 在Sybase数据库中,死锁的问题对系统的性能和吞吐量都有重要影响。经检测发现,管理信息系统的死锁主要是因为两个或多个线程(登录)抢占同一表数据资源。如果不解决死锁问题,将会对系统的...
**Sybase数据库开发参考手册** Sybase数据库系统是一款企业级的关系型数据库管理系统,由Sybase公司(现已被SAP收购)开发,广泛应用于金融、电信、制造业等对数据处理有高要求的行业。本参考手册将详细介绍Sybase...
### Sybase数据库维护快速参考手册知识点详述 #### 基本概念篇 **1.1 什么是Sybase Adaptive Server Enterprise (ASE)?** Sybase Adaptive Server Enterprise (ASE) 是Sybase公司开发的一款高性能的关系型数据库...
### Sybase数据库维护快速参考手册知识点详解 #### 一、基本概念篇 ##### 1.1 什么是Sybase Adaptive Server Enterprise (ASE)? Sybase ASE 是一款高性能的关系型数据库管理系统,由Sybase公司开发并推出。它支持...
本文将深入探讨“经典的Sybase数据库管理”这一主题,旨在为读者提供全面而详尽的Sybase知识。 Sybase是由Sybase公司(后被SAP收购)开发的关系型数据库管理系统,其主要设计目标是为了满足大型企业级应用的需求,...
Sybase数据库系统的性能调优是一个复杂而重要的任务,旨在减少系统资源的争用,提升整体运行效率。这个过程涵盖了多个层次,包括服务器层、数据库层、应用层以及运行环境层。 1. **服务器层优化** - **内存分配**...
### Sybase数据库系统性能调优分析 在当前信息化高速发展的时代背景下,数据库系统作为企业核心应用的基础支撑之一,其性能的高低直接影响到企业的业务效率与用户体验。Sybase数据库作为一种广泛应用于金融、电信等...
登录帐户是用户与Sybase数据库系统交互的身份标识,通过验证后才能访问数据库资源。 ##### 1.4 角色及其作用 - **常用系统角色**: - `sysadmin`:拥有最高权限,可以管理整个数据库系统。 - `db_owner`:对特定...
在Sybase数据库中,存储过程的编写是一项关键任务,它涉及到系统的性能和可维护性。以下是一些关于Sybase数据库存储过程的编写经验和方法: 首先,对于跨库操作,建议在当前库中创建视图(View)来封装外部库的...
本文主要探讨了Sybase数据库性能优化的几个关键层面,包括SQL Server级、数据库设计级和应用程序级的调优策略。 首先,SQL Server级的调优集中在内存管理和存储过程缓冲以及数据缓冲的优化。管理共享内存是数据库...
根据提供的文档信息,我们可以总结出一系列关于SYBASE数据库的常用操作知识。这些操作涵盖了数据库结构的生成、数据导入导出、视图与存储过程管理、时间格式转换等多个方面。 ### 1. 数据库结构生成 - **命令**: `...
当数据库遇到问题时,管理员需要能够快速定位并解决问题。手册将介绍如何识别错误日志中的关键信息,诊断性能瓶颈,以及执行故障切换和恢复操作。 **性能调优篇** 性能优化是数据库管理的重要组成部分,可能包括: ...
四、Sybase数据库管理 在Sybase中,数据库的管理涉及备份与恢复、性能调优、安全设置等多个方面。备份策略通常包括完整备份、增量备份和差异备份,以防止数据丢失。性能调优可以通过索引创建、查询优化、内存配置等...
在Sybase数据库中,`SET CHAINED`是一个配置选项,用于控制是否启用行级锁定,它通常与事务处理有关。在某些情况下,特别是在事务内部,执行这个命令可能是不被允许的。 解决方法: 为了避免上述错误,开发者应该...