仓酷云

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

[学习教程] 设置与检察sql server中锁的超不时间

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用在数据库的使用体系中,逝世锁是不成制止的。经由过程设置逝世锁的处置优先级办法,能够在数据库引擎中主动检测到逝世锁,对产生的逝世锁会话举行干涉,从而到达排除逝世锁的目点,但在这类情形下,会话只能主动的守候数据库引擎的自我反省。

我们是不是可让会话本身也具有处置逝世锁的自动权呢?这就是设置锁的超不时间。当一个会话与另外一个会话抵触引堵塞时,假如守候的工夫凌驾指定的值,则该会话主动作废,并开释数据库资本。如许,就到达懂得殊死锁的目标。

那末怎样来检察锁的超不时间呢?使用@@lock_timeout函数便可:
能够看一下@@LOCK_TIMEOUT的语法与界说:

@@LOCK_TIMEOUT--前往以后会话确当前锁超时设置,单元为毫秒。

前往范例--integer

注释申明:
SETLOCK_TIMEOUT同意使用程序设置语句守候堵塞资本的最长工夫。当一条语句已守候凌驾LOCK_TIMEOUT所设置的工夫,则被锁住的语句将主动作废,并给使用程序前往一条毛病信息。

好比,我们要检察一个会话的超不时间,能够使用以下sql来检察:
select@@LOCK_TIMEOUT

在没有设置过超不时间的情形下,该语句会前往了局-1,代表没有超不时间。

那末又怎样设置超不时间呢?能够使用以下sql语句:
setlock_timeout<锁超不时间>

注重:
1,锁超不时间是以毫秒为单元的
2,设置的超不时间只对当次会话无效
能够做一个复杂的测试,在microsoftsqlservermanagement中翻开一个查询窗口,实行
setlock_timeout2600
select@@lock_timeout

能够看到前往了局为2600毫秒,然后再翻开一个新的查询窗口(即一个新的会话),实行
select@@lock_timeout

前往了局为-1,可见前一个会话的设置对以后的会话有效。

假如将锁超工夫设置为0,那末在产生资本锁准时,会话将不做任多么待,间接前往1222毛病。

利用锁超时的不敷的地方
假如我们有设置了锁超不时间,那末当会话守候工夫到达超不时间时,就会间接前往1222毛病,并且不会回滚或作废以后事件。必要我们在使用程序中截获1222毛病,再作相干处置。假如我们在使用程序中未做任那边理,则事件会持续运转,从而招致程序的逻辑毛病,由于后面有的语句大概基本没有实行或未实行完全。Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-10 02:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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