繁体   English   中英

SQL Server:事务执行总是立即执行?

[英]SQL Server: Transaction execution always immediately?

一旦命令到达,SQL Server(2005/2008/2012)是否执行BEGIN TRANSACTION?

是 - 但是(选项,网络缓冲/ - 延迟,分布式数据库,......) - BEGIN TRANSACTION命令以及随后的所有内容都可能被保留,例如。 别的东西必须先发生?

此外,是否有可能 - 当数据库/网络导致缓冲/延迟时 - 两个事务将以相反的顺序执行?

是的,一旦命令到达,事务将立即开始,当您执行提交或回滚时,操作将相应地完成。

MSDN文档说:

在查询优化期间,SQL Server查找可能从并行执行中受益的查询或索引操作。 对于这些查询,SQL Server将交换运算符插入到查询执行计划中,以准备查询并行执行。 交换运营商是查询执行计划中的运营商,提供流程管理,数据重新分配和流量控制。 交换运算符包括Distribute Streams,Repartition Streams和Gather Streams逻辑运算符作为子类型,其中一个或多个可以出现在并行查询的查询计划的Showplan输出中。

您可以并行执行查询,但是一旦查询开始,除非您没有更改隔离级别或者如果有任何错误,那么您无法更改查询的执行。 因此,简而言之,您无法让其他查询等待第一个查询执行。

此外,是否有可能 - 当数据库/网络导致缓冲/延迟时 - 两个事务将以相反的顺序执行?

据我所知,您无法更改查询的执行顺序,即更改序列或更改任何代码/查询。

当服务器获得BEGIN TRAN消息时,它开始保留资源并执行命令。 如果另一个事务到达需要一些相同的资源,则需要等到第一个事务释放这些资源,通常使用COMMIT。

这可以通过更改服务器隔离级别来改变,但通常是按接收顺序执行的事务。

如果用户从不同位置进行更改,网络问题可能会导致事务更改顺序。 但是一旦事务到达服务器,如果它们使用相同的对象,就没有理由它会颠倒顺序。

此行为是ACID中C :一致性。

事务可能无序执行,但前提是它们不访问相同的资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM