首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不使用事务的情况下在存储过程中锁定SQL Server表

在不使用事务的情况下在存储过程中锁定SQL Server表
EN

Stack Overflow用户
提问于 2011-02-24 17:35:51
回答 2查看 1.1K关注 0票数 0

我需要执行一个存储过程,其中包含3个引用同一表的查询:

合并…

从表中选择X,其中{ BLA BLA }

从表中的{ BLA BLA }更新Y

存储过程应该是线程安全的,并且应该作为原子操作执行。

目前,我在每个查询上使用一个具有可序列化隔离级别的事务和一个with ( XLOCK,TABLOCK )提示。

有没有一种方法可以在存储过程的时间跨度内保持表锁,而不使用导致性能损失的事务?

干杯,多伦

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-24 18:04:05

每当开发人员选择TABLOCKX或(XLOCK,TABLOCK)时,它立即失去了询问有关性能的问题的权利。

不是导致性能损失的事务。就是拿着锁。所以你的问题实际上是:

是否有一种方法可以在不产生性能损失的情况下产生性能损失?

答案是否定的,没有这样的方法。

票数 3
EN

Stack Overflow用户

发布于 2011-02-24 17:54:54

Doron,要完成你想做的事情,只能使用事务来完成。我不明白为什么你说一个事务会导致性能开销,这是一个完全不正确的说法。除非你的意思是你的事务需要例如。10秒,在这10秒内,其他事务被阻塞。

现在,我经常工作并设计每秒必须支持大约80K事务的数据库,这样做你会学到一些技巧。我建议您后退一步,重新评估您的查询和表体系结构,如果这是一个高度事务性的数据库,我建议的第一个建议是摆脱任何外键约束,这会影响任何事务性数据库的性能。

另一件事是查看索引,您是否拥有正确的索引,您是否对必须插入和更新的表进行了过度索引?这可能会造成巨大的性能影响!

也许我可以建议你,如果你不能重新架构表等,稍微跳出框框,也许选择你想要的数据(用nolock)到临时表中,然后执行你的合并等。

也许如果你给我一个更具体的例子,我可以提供更多的帮助。

但现在,告诉我你能做什么,不能做什么。希望它能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5102777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档