码字介绍

http://msdn.microsoft.com/en-us/library/ms187504(v=SQL.100).aspx

锁分区技术对提高并发有一定帮助,但对对象操作又有了新的定义,需要DBA&开发人员在设计,维护应用中做更细致的考量.

锁分区提升并发,以及锁等待实例

--测试数据库tempdb --创建测试表 create table testlkp ( id int )--step1 spid 64中执行事务insert BEGIN TRAN ttt INSERT INTO testlkp VALUES(1)

说明:创建测试环境,第一步开启事务执行insert 成功

---随意不相关session spid70中查看操作的数据库上下文中查看锁的情况select request_session_id,* from sys.dm_tran_locks where resource_database_id=DB_ID()order by request_mode

说明:观察锁情况发现锁中分区号15有对象级IX锁

--step 2新开启session spid 67 执行sql 被阻塞ALTER TABLE testlkp ALTER COLUMN id smallint

说明:由于无法获得整体对象SCH-M锁,等待

---随意不相关session spid70中查看操作的数据库上下文中查看锁的情况select request_session_id,* from sys.dm_tran_locks where resource_database_id=DB_ID()order by request_mode

说明:其他锁分区(0-14)均获得了SCH-M锁,但由于15由于IX锁无法获得

--Step3 新开启session 执行事务 插入数据 spid 71 被阻塞BEGIN TRAN ttt
INSERT INTO testlkp VALUES(2)     ---------blocked

说明:开启新session查询被阻塞

---随意不相关session spid70中查看操作的数据库上下文中查看锁的情况select request_session_id,* from sys.dm_tran_locks where resource_database_id=DB_ID()order by request_mode

说明:insert需要申请表的IX锁,但正好落在15这个分区上,所以等待

--Step4 新开启session 执行事务 插入数据 spid 65 执行成功!BEGIN TRAN ttt
INSERT INTO testlkp VALUES(3)

说明:开启新的session insert 插入成功!

---随意不相关session spid70中查看操作的数据库上下文中查看锁的情况select request_session_id,* from sys.dm_tran_locks where resource_database_id=DB_ID()order by request_mode

说明:新的session插入操作时在其他的锁分区上(16)获得IX锁所以执行成功!

思考:锁分区技术的出现提高了并发,但在做表级操作如果需所有分区锁如SCH-M将有可能对此类操作造成更"长"等待

如索引维护操作(需SCH-M锁),一旦有长时间事务甚至孤立事务占据着分区级的某个锁,则可能一直陷入等待状态造成阻塞从而影响全局.

在诸如此类操作或应用设计中,大家需要全面仔细考量.

转载于:https://www.cnblogs.com/shanksgao/p/3140149.html

锁分区提升并发,以及锁等待实例相关推荐

  1. 19.Atomic系列之LongAdder的底层原理(分段锁提升并发性能)

    老王:小陈啊,上一章我们讲解了cas的缺陷,无法同时更新多个变量.以及ABA的问题.以及如果使用AtomicReference解决同时更新多个变量,如果使用AtomicStampedReference ...

  2. 【高并发】高并发分布式锁架构解密,不是所有的锁都是分布式锁!!

    来自:冰河技术 写在前面 最近,很多小伙伴留言说,在学习高并发编程时,不太明白分布式锁是用来解决什么问题的,还有不少小伙伴甚至连分布式锁是什么都不太明白.明明在生产环境上使用了自己开发的分布式锁,为什 ...

  3. 【高并发】高并发分布式锁架构解密,不是所有的锁都是分布式锁(升级版)!!

    点击上方蓝色"Garnett的Java之路",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 写在前面 最近,很多小伙伴留言说,在学习高并发编程时 ...

  4. Python之路 34:并发与并行、锁(GIL、同步锁、死锁与递归锁)、信号量、线程队列、生消模型、进程(基础使用、进程通信、进程池、回调函数)、协程

    内容: 同步锁 死锁.递归锁 信号量和同步对象(暂时了解即可) 队列------生产者和消费者模型 进程(基础使用.进程通信.进程池.回调函数) 协程 一.并发并行与同步异步的概念 1.1.并发和并行 ...

  5. java 锁升级_Java并发 锁优化和锁升级

    前言 本篇文章介绍Java Synchronized锁优化. 锁是存在哪里的,怎么标识是什么锁 Monitor机制在Java中怎么表现的 锁优化 锁升级 1. 锁存在哪里 对象在内存中的布局分为三块区 ...

  6. 高并发线程/锁/内存处理模型

    文章目录 锁与线程 一.进程/线程的基本介绍 进程 线程 1 线程的调度与时间片 2 优先级 3 生命周期 进程与线程的区别 二.线程的使用 2.1 Thread类的介绍 2.2 创建线程的方法 Th ...

  7. 《八股文》细数Java线程、并发、锁,温故而知新

    <八股文>细数Java线程.并发.锁,温故而知新 基础 1. 并行.并发有什么区别? 2. 说说什么是进程和线程? 3. 说说线程有几种创建方式? 4. 为什么调用start()方法时会执 ...

  8. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  9. java投票锁_Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家去排队本着先来 ...

最新文章

  1. 64位环境启用ASP.net 2.0的32位扩展
  2. Go语言中的struct的初始化。
  3. 基于weka实现的神经网络算法实现
  4. 计算机网络(网络层,运输层和应用层的一些tips)
  5. maven shade
  6. cvAdd()和 cvAddS()函数的使用
  7. 使用 C# 运行符号测试
  8. linux内核的I2C子系统详解5——i2c_driver的注册、i2c_client的来源
  9. nginx文件服务器密码登录,风的方向
  10. 【JavaScript算法】---快速排序法
  11. php下拉框选中效果,jquery模拟select下拉框效果
  12. tensorflow精进之路(二十四)——Object Detection API目标检测(中)(COCO数据集训练的模型—ssd_mobilenet_v1_coco模型)
  13. Android 打开蓝牙流程
  14. 【转】当你伤心时一定要读的50句话
  15. 引号快捷键_Android Studio 实用快捷键
  16. excel数据库_从案例说excel如何实现数据库管理
  17. OpenCV python下载和安装
  18. Web前端案例_QQ登录界面实现
  19. 中国近代史导图(二)
  20. Scikit-learn_聚类算法_K均值聚类

热门文章

  1. Redis的两种持久化机制RDB和AOF
  2. AngularJS集合数据遍历显示
  3. latex使用subequations后,段后首行文字不对齐
  4. declare sql语句_每天10分钟学习T-SQL语言基础(Part 5)
  5. Zigbee协议栈中OSAL的运行机理
  6. RRT,RRT*,A*,Dijkstra,PRM算法
  7. 关于printf()与自增自减运算符结和问题
  8. css常用样式汇总记录
  9. 一文带你了解java面向对象的三大特性:继承、封装、多态
  10. 启明云端分享|ESP32-S3开发环境搭建,这里我们会介绍两个比较常用的开发环境搭建:WINDOWS\LINUX