none
高并发更新问题,SQLServer有热点块概念吗? RRS feed

  • 问题

  • 请问Sql Server 高并发Update或者Delete同一张数据表时,Sql Server是锁表,还是锁行,还是锁数据库?

    高并发是指:10个U或D会话,对应8条不同的数据,这8条数据也许是连续的数据,也许是非连续的数据。

    拆表分库已经了解,就是想了解单表高并发时Sql Server的内部机制,也许不同版本的机制会有差异,可有大神能解答下或提供点相关介绍文档?

    SqlServer 2008R2或者2012的。。

    2014年12月29日 3:09

答案

  • 热点块貌似是Oracle的概念

    http://www.itpub.net/thread-1133481-1-1.html

    sqlserver中也有热点块的相应概念,不过不叫热点块叫 hotpage

    sqlserver中最小锁粒度是行锁

    看情况,没有固定答案

    内存不足或者锁定的记录数太多会进行锁升级 升级到表锁

    如果用的是sql2008,并且进行了表分区,那么会上升到分区锁,前提是你设置了表的锁升级选项

    USE [sss]
    ALTER TABLE [test] SET(LOCK_ESCALATION=AUTO)

    还有如果这8条数据也许是连续的数据 ,sqlserver会使用到键范围锁,当然前提是查询的leading column有索引

    请参考 pls refer to:

    http://msdn.microsoft.com/en-us/library/ms190216.aspx

    http://www.sqlteam.com/article/introduction-to-locking-in-sql-server

    http://msdn.microsoft.com/en-us/library/aa213039(SQL.80).aspx


    SQLSERVER解决HOT PAGE问题

    2014年12月29日 7:13

全部回复

  • Sql locks row by default, will escalate to table lock if too many rows involved but you can use lock hint in the query to stick with row lock.
    2014年12月29日 3:48
  • Thank you for your reply,I will test it.
    2014年12月29日 5:04
  • 热点块貌似是Oracle的概念

    http://www.itpub.net/thread-1133481-1-1.html

    sqlserver中也有热点块的相应概念,不过不叫热点块叫 hotpage

    sqlserver中最小锁粒度是行锁

    看情况,没有固定答案

    内存不足或者锁定的记录数太多会进行锁升级 升级到表锁

    如果用的是sql2008,并且进行了表分区,那么会上升到分区锁,前提是你设置了表的锁升级选项

    USE [sss]
    ALTER TABLE [test] SET(LOCK_ESCALATION=AUTO)

    还有如果这8条数据也许是连续的数据 ,sqlserver会使用到键范围锁,当然前提是查询的leading column有索引

    请参考 pls refer to:

    http://msdn.microsoft.com/en-us/library/ms190216.aspx

    http://www.sqlteam.com/article/introduction-to-locking-in-sql-server

    http://msdn.microsoft.com/en-us/library/aa213039(SQL.80).aspx


    SQLSERVER解决HOT PAGE问题

    2014年12月29日 7:13
  • All rdbs have hot spot and can be addressed with proper table design.
    2014年12月29日 19:58