zoukankan      html  css  js  c++  java
  • 锁分区提升并发,以及锁等待实例

    码字介绍

    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锁),一旦有长时间事务甚至孤立事务占据着分区级的某个锁,则可能一直陷入等待状态造成阻塞从而影响全局.

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

     

    Involuntary DBA
  • 相关阅读:
    可拖动面板
    mybatis generator 为数据库保留字段 转义
    SpringMVC全局异常处理
    java通过jdbc访问mysql,update数据返回值的思考
    资源查找器PathMatchingResourcePatternResolver的使用
    ant 通配符
    ffmpeg+libmp3lame库源码安装教程(CentOS)
    为Apache添加MP4扩展
    ffmpeg-php扩展
    ffmpeg编译错误,提示找不到相应的shared libraries :libavdevice.so.53
  • 原文地址:https://www.cnblogs.com/shanksgao/p/3140149.html
Copyright © 2011-2022 走看看