SQL 2008 sp_getapplock事务缓慢

时间:2014-01-28 13:59:27

标签: sql sql-server performance transactions locking

抱歉 - 我不确定之前是否已经解决了这个问题(我找不到任何相关内容 - 请指导我)

我不是一个SQL人,但是试图管理SQL数据库&修复正在进行的问题,直到新的SQL开发人员出现。所以请原谅我的愚蠢问题。

我们有一个存储过程,它执行以下操作..

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

BEGIN TRAN

EXEC sp_getapplock @Resource=DBLock_100, @LockMode='Exclusive', @LockOwner='Transaction', @DbPrincipal = N'dbo';

-- SELECTS, UPDATES, DELETES, INSERTS ETC... on a few tables (nothing fancy, simple queries)

COMMIT TRAN

我的问题......

  1. 我是否理解sp_getapplock会创建一个名为DBLock_100的锁?
  2. 是否在整个数据库上创建锁定?或者只是它将在下面的代码中访问的表格?
  3. 其他SP,查询等...仍然可以访问上述SP正在使用的表吗?有没有NOLOCK?
  4. 我们COMMIT TRAN后会自动释放上述锁吗?
  5. 所有其他SP查询将被暂停,直到上述SP提交或回滚?
  6. 我只是想了解applock&交易在这里做。因为很多客户端正在经历缓慢,特别是当上述SP正在执行时。 SP确实需要很长时间才能执行(一旦新人出现,我们最终会调整它)

    提前致谢, 约瑟夫。

1 个答案:

答案 0 :(得分:2)

  

我是否正确理解sp_getapplock将创建一个锁   名字DBLock_100?

它在标记为“DBLock_100”的资源上创建应用程序锁定。没有其他的。代码唯一阻止的是获取相同应用程序锁的其他尝试。

即。对sp_getapplock @Resource=DBLock_100的并发调用。因此它将序列化对该存储过程的访问。任何并发执行尝试都需要等待。

  

是否在整个数据库上创建锁定?或者只有表格   它将在下面的代码中访问?

都不是。取出的唯一锁定在名为“DBLock_100”

的自定义锁资源上
  

其他SP,查询等...仍然可以访问正在使用的表   通过上面的SP?有没有NOLOCK?

是。只要他们不首先尝试获取名为“DBLock_100”的应用程序锁。虽然您未向我们展示的更新,删除,插入等仍会获得可能阻止它们的锁定。

  

我们COMMIT TRAN后会自动释放上述锁吗?

是。当您致电sp_releaseapplock或其拥有的交易结束时,锁定将被释放。

  

所有其他SP查询将一直保持到上述SP提交为止   还是回滚?

没有。见上文