仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1110|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之数据库中的锁

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用11.5.1锁的观点
锁(Lock)是在多用户情况下对资本会见的一种限定。机制当对一个数据源加锁后,此数据源就有了必定的会见限定。我们就称对此数据源举行了“锁定”。在SQLServer中,能够对以下的工具举行锁定:<P>

  • 数据行(Row):数据页中的单行数据;
  • 索引行(Key):索引页中的单行数据,即索引的键值;
  • 页(Page):页是SQLServer存取数据的基础单元,其巨细为8KB;
  • 盘区(Extent):一个盘区由8个一连的页构成;
  • 表(Table);
  • 数据库(Database)。
11.5.2锁的种别
在SQLServer中,锁有两种分类办法。
(1)从数据库体系的角度来看
锁分为以下三品种型:<P>

  • 独有锁(ExclusiveLock)
    独有锁锁定的资本只同意举行锁定操纵的程序利用,别的任何对它的操纵均不会被承受。实行数据更新命令,即INSERT、UPDATE或DELETE命令时,SQLServer会主动利用独有锁。但当工具上有别的锁存在时,没法对其加独有锁。独有锁一向到事件停止才干被开释。
  • 共享锁(SharedLock)
    共享锁锁定的资本能够被别的用户读取,但别的用户不克不及修正它。在SELECT命令实行时,SQLServer一般会对工具举行共享锁锁定。一般加共享锁的数据页被读取终了后,共享锁就会当即被开释。
  • 更新锁(UpdateLock)
    更新锁是为了避免逝世锁而设立的。当SQLServer筹办更新数据时,它起首对数据工具作更新锁锁定,如许数据将不克不及被修正,但能够读取。比及SQLServer断定要举行更新数据操纵时,它会主动将更新锁换为独有锁。但当工具上有别的锁存在时,没法对其作更新锁锁定。

(2)从程序员的角度看
锁分为以下两品种型:<P>

  • 悲观锁(OptimisticLock)
    悲观锁假定在处置数据时,不必要在使用程序的代码中做任何事变就能够间接在纪录上加锁、即完整依托数据库来办理锁的事情。一样平常情形下,当实行事件处置时SQLServer会主动对事件处置局限内更新到的表做锁定。
  • 失望锁(PessimisticLock)
    失望锁对数据库体系的主动办理不伤风,必要程序员间接办理数据或工具上的加锁处置,并卖力猎取、共享和保持正在利用的数据上的任何锁。
<P>11.5.3断绝级别
断绝(Isolation)是盘算机平安学中的一种观点,其实质上是一种封闭机制。它是指主动数据处置体系中的用户和资本的相干管束干系,也就是用户和历程相互分隔,且和操作体系的回护把持也分隔来。在SQLServer中,断绝级(IsolationLevel)是指一个事件和别的事件的断绝水平,即指定了数据库怎样回护(锁定)那些以后正在被别的用户或服务器哀求利用的数据。指定事件的断绝级与在SELECT语句中利用锁定选项来把持锁定体例具有不异的效果。
在SQLServer中有以下四种断绝级:

  • READCOMMITTED
    在此断绝级下,SELECT命令不会前往还没有提交(Committed)的数据,也不克不及前往脏数据。它是SQLServer默许的断绝级。
  • READUNCOMMITTED
    与READCOMMITTED断绝级相反,它同意读取已被别的用户修正但还没有提交断定的数据。
  • REPEATABLEREAD
    在此断绝级下,用SELECT命令读取的数据在全部命令实行过程当中不会被变动。此选项会影响体系的效能,非需要情形最好不必此断绝级。
  • SERIALIZABLE
    与DELETE语句中SERIALIZABLE选项寄义不异。
断绝级必要利用SET命令来设定其语法以下:
SETTRANSACTIONISOLATIONLEVEL
{READCOMMITTED
|READUNCOMMITTED
|REPEATABLEREAD
|SERIALIZABLE}

11.5.4检察锁
能够经由过程企业办理器或存储历程来检察锁。
(1)用EnterpriseManager检察锁
在企业办理器当选择目次树窗口中“Management”文件夹下,“CurrentActivity”中的“Locks/ProcessID”节点,则能够检察以后锁定的历程;选择同级的“Locks/Object”节点下的响应字节点,则能够检察以后锁定的工具,如1-1所示。在1-1中,右键单击义务板窗口中的工具,从快速菜单当选择“属性”选项,则会呈现如1-2所示的锁的历程细节对话框。在此,能够革新或杀逝世锁的历程。

杀逝世历程还能够用以下Transact-SQL命令来举行:
KILLspid
spid是SystemProcessID,即体系历程编号的缩写,如1-1中所示。

1-2锁定的历程细节

(2)用体系存储历程Sp_lock检察锁
存储历程Sp_lock的语法以下:
sp_lockspid
SQLServer的历程编号spid能够在master.dbo.sysprocesses体系表中查到。spid是INT范例的数据,假如不指定spid,则显现一切的锁。



11.5.5逝世锁及其避免
逝世锁(Deadlocking)是在多用户或多历程情况下,为利用统一资本而发生的没法办理的争用形态,普通地讲,就是两个用户各占用一个资本,两人都想利用对方的资本,但同时又不肯保持本人的资本,就一向守候对方保持资本,假如不举行内部干与,就将一向耗下往。

逝世锁会形成资本的大批华侈,乃至会使体系溃散。在SQLServer中办理逝世锁的准绳是“就义一个比两个都逝世强”,即挑出一个历程作为就义者,将其事件回滚,并向实行此历程的程序发送编号为1205的毛病信息。而避免逝世锁的路子就是不克不及让满意逝世锁前提的情形产生,为此,用户必要遵守以下准绳:<P>

  • 只管制止并发地实行触及到修正数据的语句;
  • 请求每一个事件一次就将一切要利用的数据全体加锁,不然就不予实行;
  • 事后划定一个封闭按次一切的事件,都必需按这个按次对数据实行封闭,比方,分歧的历程在事件外部对工具的更新实行按次应只管坚持分歧;
  • 每一个事件的实行工夫不成太长,对程序段长的事件可思索将其支解为几个事件。
本章小结
本章中先容了数据更新的办法及事件和锁的观点。除利用本章报告的语句更新数据外,还可使用视图来更新数据,有关视图的使用请拜见第13章“游标和视图”。
在Windows中MySQL以服务形式存在,在使用前应确保此服务已经启动,未启动可用netstartmysql命令启动。而Linux中启动时可用“/etc/rc.d/init.d/mysqldstart"命令,注意启动者应具有管理员权限。
不帅 该用户已被删除
沙发
发表于 2015-1-19 08:41:08 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
老尸 该用户已被删除
板凳
发表于 2015-1-27 15:43:28 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
小女巫 该用户已被删除
地板
发表于 2015-2-5 11:30:05 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-11 14:30:11 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
愤怒的大鸟 该用户已被删除
6#
发表于 2015-3-2 15:09:01 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-11 04:19:47 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
第二个灵魂 该用户已被删除
8#
发表于 2015-3-17 20:53:28 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-25 02:34:34 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 18:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表