浅谈 SQL 中的锁(六)查看锁的基本方法
来源:互联网 发布:詹姆斯各项数据排名 编辑:程序博客网 时间:2024/05/22 14:09
像前面的例子那样,阻塞事务的语句是必须的:
这个语句代表在查询中等待 10秒,这样我们才能模拟并发的情况,如果事务很快执行完毕了,就无法重现并发的情况。
我在网上看到有些例子是使用 C#、Java 等语言启动多个线程去模拟并发,而不是使用阻塞,虽然这样更接近生产环境,但并不利于简化问题。多个线程模拟并发,取决于线程数和事务执行的速度,难以确认并发发生了,而且编码量稍多。
这大概是防止在数据库有活动会话时,对数据库进行一些影响数据一致性的更改的。
在 id 54 的会话中,使用 http://blog.csdn.net/closurer/article/details/54342831 例子中的 app_user 表,执行下面的语句:
有趣的一点是,如果上面这个语句不使用 updlock 表提示,是看不到加锁的情况的。原因是在 read committed 默认的隔离级别下,select 语句放置的共享锁是不会一直持有到事务结束的。repeatable read 和 serializable 的共享锁则会一直持有到事务结束。
使用这个方法,就可以看到在不同隔离级别下,使用不同的表提示,数据库的加锁情况。
--延长处理时间waitfor delay '0:00:10'
这个语句代表在查询中等待 10秒,这样我们才能模拟并发的情况,如果事务很快执行完毕了,就无法重现并发的情况。
我在网上看到有些例子是使用 C#、Java 等语言启动多个线程去模拟并发,而不是使用阻塞,虽然这样更接近生产环境,但并不利于简化问题。多个线程模拟并发,取决于线程数和事务执行的速度,难以确认并发发生了,而且编码量稍多。
然后是使用 sys.dm_tran_locks 视图去查看锁:
--查看 id 54 的会话持有的锁select * from sys.dm_tran_locks where request_session_id = 54
如果在指定的会话是活动的,没有任何正在执行的事务,可以看一个数据库的共享锁:
这大概是防止在数据库有活动会话时,对数据库进行一些影响数据一致性的更改的。
在 id 54 的会话中,使用 http://blog.csdn.net/closurer/article/details/54342831 例子中的 app_user 表,执行下面的语句:
--开始事务 begin transaction --查询指定用户select * from app_user(updlock) where mobile = '13800002222'--延长处理时间 waitfor delay '0:00:10' --提交事务 commit transaction
在 10秒内,查看锁:
可以看到会话多持有了三个锁,一个页面意向更新锁,一个键更新锁,一个对象意向排它锁,锁的范围和类型问题比较复杂,而且不同的数据库产品的实现细节不同,对这个有兴趣的可以搜索相关的内容。
有趣的一点是,如果上面这个语句不使用 updlock 表提示,是看不到加锁的情况的。原因是在 read committed 默认的隔离级别下,select 语句放置的共享锁是不会一直持有到事务结束的。repeatable read 和 serializable 的共享锁则会一直持有到事务结束。
使用这个方法,就可以看到在不同隔离级别下,使用不同的表提示,数据库的加锁情况。
0 0
- 浅谈 SQL 中的锁(六)查看锁的基本方法
- 浅谈Sql 中的锁
- 浅谈Sql 中的锁
- 浅谈 SQL 中的锁(二)余额问题的处理
- 浅谈 SQL 中的锁(一)余额问题
- 浅谈 SQL 中的锁(三)重复用户问题
- 浅谈 SQL 中的锁(四)如何检查重复用户
- 浅谈 SQL 中的锁(五)另一种解决方案
- postgresql 查看锁的sql
- 浅谈Microsoft SQL Server的锁机制
- 网站推广的六种基本方法(常规网站推广方法)简介
- 浅谈SVM(六)
- 浅谈sqlserver中的“锁”
- 浅谈Java中的锁
- 史上最简单的 MySQL 教程(六)「SQL 基本操作 之 数据操作」
- SQL Server2008 学习之(六) :视图的创建、修改等基本操作
- 浅谈Android中的LOG查看ANR(一)
- 浅谈Android中的LOG查看ANR(一)
- 百.度.云.盘.破.解方法
- loadrunner12.5 录制脚本后不能回放问题
- Android Behavior
- 很久很久前初学Java时的笔记--集合操作1
- ueditor 更改上传文件的路径
- 浅谈 SQL 中的锁(六)查看锁的基本方法
- 小生初来CSDN
- AngularJs 利用百度地图API 定位当前位置 获取地址信息
- 关于etc目录
- MDN-闭包
- Python crawler(一):urllib的三种下载网页方法
- 欢迎使用CSDN-markdown编辑器
- 基于LVM快照mysql备份
- 1-DOM对象模型+事件(+note)