【发布时间】:2014-01-28 13:59:26
【问题描述】:
抱歉 - 我不确定这是否已经解决(我找不到任何相关信息 - 请指导我)
我不是 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
我的问题...
- 我是否理解 sp_getapplock 将创建一个名为 DBLock_100 的锁?
- 是否在整个数据库上创建了锁?还是仅在下面的代码中将访问的表?
- 其他 SP、查询等...是否仍能访问上述 SP 正在使用的表?有没有 NOLOCK?
- 一旦我们COMMIT TRAN,上面的锁会自动释放吗?
- 所有其他 SP,查询将暂停,直到上述 SP 提交或回滚?
我只是想了解 applock 和事务在这里做什么。因为很多客户端都遇到了缓慢的问题,尤其是在执行上述 SP 时,并且 SP 确实需要很长时间才能执行(一旦新人出现,我们最终会进行调整)
提前致谢, 约瑟夫。
【问题讨论】:
标签: sql sql-server performance transactions locking