SQL Server SELECT不会阻塞同类型查询详解:特殊情况下的误解
107 浏览量
更新于2024-08-28
收藏 265KB PDF 举报
在SQL Server中,关于SELECT语句是否会阻塞其他SELECT查询,通常情况下是不会的。一个标准的SELECT查询执行时只申请意向共享锁(IS)和共享锁(S),这两种锁模式之间是兼容的,这意味着一个SELECT操作不会阻止另一个SELECT在同一对象上进行。这基于SQL Server的并发控制机制,确保读操作之间的互不干扰。
然而,在特定场景下,如果存在并发操作,如UPDATE或DELETE,事情可能会有所不同。例如,当一个事务(如会话窗口A中的UPDATE语句)持有排它锁(X)或意向排他锁(IX)时,这会导致其他试图对该行获取共享锁的操作(如会话窗口B和C的SELECT语句)被阻塞,因为排它锁对所有类型的锁(包括共享锁)都是排斥的。在这种情况下,会话B和C会被挂起,等待会话A释放锁资源,其等待事件显示为LCK_M_S,表示锁定冲突。
测试数据的创建和实验步骤进一步证实了这一点。通过创建一个表和索引,并在两个会话中分别执行UPDATE和SELECT查询,当UPDATE操作持有排它锁时,第三个SELECT查询就会被阻塞,直到UPDATE操作完成或者被显式回滚。
总结来说,SQL Server中的SELECT并不会在常规情况下阻塞SELECT,除非涉及到了并发控制下的排它锁冲突。理解这些锁机制对于优化数据库性能和避免死锁至关重要,特别是在高并发环境下。开发者和DBA需要密切关注这些锁行为,以便更好地管理并发访问和维护系统的响应性。
2014-09-19 上传
2010-08-13 上传
点击了解资源详情
2023-05-13 上传
2023-06-14 上传
2020-12-15 上传
2020-09-10 上传
2014-09-30 上传
2022-09-19 上传
weixin_38663516
- 粉丝: 6
- 资源: 932
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载