Sybase数据库死锁对策_第1页
Sybase数据库死锁对策_第2页
Sybase数据库死锁对策_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、VxxxxxSybase SQL Server有三种圭寸锁类型:排它锁 (exclusive lock, 简称 X锁);共享锁(sharelock,简称S锁);更新锁(update lock,简称U 锁)。这三种锁的相容矩阵表如下:x :表示不兼容。V:表示兼容。Sybase读(SELECT操作使用S锁,写(SQL Server是自动决定加锁类型的。一般来说,和delete )操作使用X锁。U锁是建立在页级上的,它在一个更新操作开始时获得,当要修改这些页时,U锁会升级为X锁锁的力度SQLServer有两级锁:页锁和表锁。通常页锁比表锁的限制更少(或更小)。 页锁对本页的所有行进行锁定,而表锁则

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

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

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

6、死锁 而终止并被回滚。应用程序必须重新开始这个事务处理。查找死锁原因既然管理信息系统长时间死锁的原因是由于我们提交或者是提交不当,那么我们就可以通过修改程序防止出现死锁。定位死锁出错处主要经过以下三步:1)在死锁出现时,用SP_WHO,SP_LO获得进程与锁的活动情况。2)结合库表sysobjects和相应的操作员信息表查出被锁的库表与锁住别人 的操作员。3)根据锁定的库表与操作员的岗位,可以估计出程序大约出错处。询问操 作员在死锁时执行的具体操作即可完全定位出错处。最后查找程序并修改之。用sp_who获取关于被阻碍进程的信息系统过程sp_who给出系统进程的报告。如果用户的命令正被另一进程保

7、持 的锁阻碍,贝status 歹U显示 “ Iock sleep ”。 blk列显示保持该锁或这些锁的进程标识,即被谁锁定了。 Io giname列显示登录操作员。结合相应的操作员信息表,便可知道操作 员是谁。Fid spid status log in ame orig name blk dbn ame cmd0 1 lock sleep lm lm 18 QJYD SELECT0 2 sleepi ng NULL NULL 0 master NETWORK HANDLER0 3 sleepi ng NULL NULL 0 master NETWORK HANDLER用sp_lock浏览锁要

8、得到关于当前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 ”表明 该进程正在障碍另一个需要请求锁的进程。一旦正在障碍的进程一结束,其他进程就向前移动。“ dema nd后缀表明当前共享锁一释放,该进程就申请互斥锁。 table_id 列显示表的id号,结合sysobjects 即可查出被圭寸锁的表名。执行该进程后屏幕显示Fid Spid locktype table_id page row dbn ame Class con text0 1 Sh_i nte nt 678293476 0 0 QJYD Non Cursor LockFam dur0 1 Sh_page 678293476 31764 0 QJYD Non Cursor Lock0 18 Ex_i ntent 9767092 0 0 QJYD Non

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论