簡體   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