Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server表在存储过程中锁定而不使用事务_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server表在存储过程中锁定而不使用事务

SQL Server表在存储过程中锁定而不使用事务,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要执行一个存储过程,其中包括引用同一表的3个查询: 合并 从{BLA BLA}所在的表中选择X 从{BLA BLA}所在的表更新Y 存储过程应该是线程安全的,并且应该作为原子操作执行 目前,我在每个查询上使用一个具有可序列化隔离级别的事务和一个with(XLOCK,TABLOCK)提示 有没有一种方法可以在存储过程的时间跨度内保持表锁,而不使用会导致性能损失的事务 干杯, DoronDoron要完成您想要做的事情,只能使用事务来完成。我不明白为什么你说一个事务会导致性能开销,这是一个完全不真

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

合并

从{BLA BLA}所在的表中选择X

从{BLA BLA}所在的表更新Y

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

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

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

干杯,
Doron

Doron要完成您想要做的事情,只能使用事务来完成。我不明白为什么你说一个事务会导致性能开销,这是一个完全不真实的说法。除非你的意思是你的交易需要10秒,并且在这10秒内其他交易被阻止

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

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

如果您不能重新构建表等,我可以建议您跳出框框思考一下,或者选择所需的数据(使用nolock)到临时表中,然后执行合并等

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


但现在,告诉我你能做什么,不能做什么。希望有帮助

Doron要完成您想要做的事情,只能使用事务来完成。我不明白为什么你说一个事务会导致性能开销,这是一个完全不真实的说法。除非你的意思是你的交易需要10秒,并且在这10秒内其他交易被阻止

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

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

如果您不能重新构建表等,我可以建议您跳出框框思考一下,或者选择所需的数据(使用nolock)到临时表中,然后执行合并等

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


但现在,告诉我你能做什么,不能做什么。希望有帮助

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

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

有没有一种方法可以产生性能 没有法律效力的处罚 产生绩效惩罚


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

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

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

有没有一种方法可以产生性能 没有法律效力的处罚 产生绩效惩罚


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

为什么事务会导致性能损失?如果我错了,请更正我的错误。在使用事务时,会创建日志以支持回滚功能,因此会产生可能会导致性能损失的开销。当然,表锁有很大的性能损失,但不幸的是,我不能放弃它。我的问题是,关于表锁定约束,我可以在不使用事务的情况下锁定并保持吗?Doron为什么事务会导致性能损失?请纠正我的错误。如果我错了,在使用事务时,会创建一个日志以支持回滚功能,因此存在可能导致性能损失的开销。当然,表锁有很大的性能损失,但不幸的是,我不能放弃它。我的问题是,关于表锁定约束,我可以在不使用事务的情况下锁定并保持吗?DoronIn为了保持存储过程结果的正确性,我必须在存储过程期间对相关表使用表锁。当然,这是我不得不忍受的主要表现惩罚。目前的问题是,事务具有我不需要的附加功能(回滚日志等)。所有数据库操作都在事务下运行,无论是否显式启动。没有事务“开销”,因为不可能在没有事务的情况下访问数据库。如果不使用显式事务,则发出的每个语句都将启动自己的隐式语句。为了保持存储过程结果的正确性,我必须在存储过程期间对相关表使用表锁。当然,这是我不得不忍受的主要表现惩罚。目前的问题是,事务具有我不需要的附加功能(回滚日志等)