知识大全 SQL7中LOCK的理解(2)
Posted 语句
篇首语:青年是学习智慧的时期,中年是付诸实践的时期。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL7中LOCK的理解(2)相关的知识,希望对你有一定的参考价值。
SQL7中LOCK的理解(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
下面介绍的是锁的并发问题和解决方法 在实际情况中 通常会因为lock发生四中情况 下面用个定座系统举例 所有的语句都工作在默认隔离级别下 丢失的更新 user run begin tran select 空座位 得到 update 定座位 mit 如果user 在user update之前运行同样的程序 都会得到空座位是 的信息 当然user 也可以定座位 结果就是user 的定座是最终有效的 user 的定座被覆蓋 为了避免这种情况 看看用隔离级别能不能解决 这四种隔离级别最多在表上施加S 由于S是兼容的 因此user 照样能得到空座位是 的信息 丢失的更新也照样会发生 SQL提供了表级锁定选项TABLOCKX 能避免这种情况的发生 但丧失了并发 脏读 user run begin tran update row A mit 如果user 能在user update的同时读出表中的数据(包含 row A) 那么就产生了脏读 因为user 可能mit也可能rollback update并没有被确认 默认情况下是不会产生脏读的 因为update将产生行的X 表的IX 而表IX和S是不兼容的 那么在什么情况下我们需要脏读呢 如果我们不需要确切的数据 我们需要的是一个大概的趋势 个别数据的不确定没有关系 想想一个股票系统 同一时刻的改写会很多 也就是表上会有许多IX锁 如果我们需要查询表获得大致情况 那么只有等改写结束 为了提高并发 此时我们需要脏读 解决方法就是在user 的会话环境中设置事务隔离级别为read unmitted 不可重复读 user run begin tran select tab where select tab where mit 当user 在交易中执行两次select 所得到的结果不一样 这便是不可重复读 发生的原因是user 在user 第二次select之前对tab 做了修改 select语句虽然对表有读锁 但在默认情况下 读锁在select语句执行完就被释放 而不是保持到交易结束 为了避免不可重复读的发生 只要select产生的锁保持到交易结束就可以了 将user 的会话环境中设置事务隔离级别为repeatable read 幻影 user run begin tran select tab where select tab where mit 虽然将user 的会话环境中设置事务隔离级别为repeatable read 但当user 在交易中执行两次select 所得到的结果还会不一样 这便是幻影 因为user 仅仅将select出来的行加了S锁 但user 可以insert满足where条件的新行 使得两次select的结果不一样 解决方法是将user 的会话环境中设置事务隔离级别为serializable 或者在表级锁定选项中选holdlock 锁定超时 前面说过 当某个语句因为锁而不能立即执行时 会等待 直到锁被释放 但如果持有锁的语句执行时间过长(未优化) 那么就会等待过长 影响响应 因此 我们通过lock_timeout来将等待过长的语句rollback 需要注意的是 当数据量增加时 可能发生不希望的lock_timeout 原因是SQL需要更多的时间来处理数据 为此我们也需要适当的增加lock_timeout 索引在锁中的应用 大家都知道索引可以提高查询速度 其实索引还有一个很重要的功能就是提高并发 例 当user run update tab set col =xxx时 user 对tab run select * from tab 将会等待 直到user 执行完 但如果user 执行select * from tab where col <>xxx也就是user 要查询的行并不是user 改写的行 结果如何呢?同样 user 也要等到user 执行完 这样就没有什么并发可言 如果我们在col 上建立index 就可以让user 无须等待 立即执行 更常用的是父表和子表的情况 通常为了保证引用完整性 SQL在修改数据时 都会将依赖表加锁 但如果有index 情况就好的多 cha138/Article/program/SQLServer/201311/22171相关参考
向SQL2k移植SQL7数据库问题的探讨 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 将SQL
知识大全 MS SQL7.0的数据迁移到MySQL上的一种方法
MSSQL7.0的数据迁移到MySQL上的一种方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Oracle]浅谈Lock与Latch 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对Ora
知识大全 使用synchronized和Lock对象获取对象锁
使用synchronized和Lock对象获取对象锁 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java多线程同步-BusyFlag或Lock 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我
知识大全 Java:使用synchronized和Lock对象获取对象锁
Java:使用synchronized和Lock对象获取对象锁 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
Oracle数据库监看lockscript 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Scr
注会中的所得税究竟该如何理解1、就是扣除净损溢中归属优先股(如果有)股东的,其余就是了;2、这是按照实质重于形式的原则和法律法规对于财报的编制、披露要求而这样规定的。爱,究竟该如何理解?爱一个人不一定
MACD指标中的白线和黄线如何理解?打开k线第一个显示的指标,被多数人认为的最无用指标却是寻求短期买卖点的唯一绝佳指标!经笔者2年半实践证明,准确率98%以上,在实战中本人使用至今没失过手。参数设置快
怎么理解劳动是意识产生的决定环节?答案:意识是人脑的机能,劳动在人类意识产生和发展过程中起决定作用:(1)劳动使形成中的人脑日益完善,为意识的产生和发展提供了生理基础。(2)劳动使思维的物质外壳一语言