並發交易與同時交易
大衛·克倫克的第 6 章
Database Concepts: Database Administration
我的理解是否正確,在數據庫中,並發事務並沒有真正發生。相反,它是一個快速發生的並發事務,使用者認為它是一個同時事務?
我問的原因是因為我被作業中的問題所困擾,詢問需要多少 CPU 才能執行同時事務。我回答說只需要一個 cpu,因為它實際上是一個正在發生的並發事務,而不是一個同時發生的事務?
想法,有人嗎?
編輯:~ jcolebrand——
@gbn 和 @Mark,
感謝您的意見,但是,我完全不知道這些術語是什麼,因為我目前正在學習的這門課程是數據庫管理的入門課程,而我的問題僅在本書的第 1 段中進行了討論,沒有進一步詳細說明。我也許能夠及時了解您的回复,但現在,我還不能。不過謝謝!
您的作業問題很差,預期的答案可能不正確。隨時發送講師我們的方式討論!
從書中:
解釋並發事務和同時事務之間的區別。並發事務需要多少 CPU?
我想預期的差異是:
- 並發事務 = 多個事務同時處於活動狀態。
- 同時交易=多個交易同時執行。
我認為納夫的問題。
我的理解是否正確,在數據庫中,並發事務並沒有真正發生
事務當然是同時執行的。問題是是否可以同時送出,這就是@gbn 在他的回答中所要解決的問題。
@gbn 是正確的,如果您認為事務在 WAL 條目被硬化到磁碟時送出,則不會發生兩個同時送出。從崩潰恢復的角度來看,此時事務肯定已送出。如果發生故障,該事務將前滾(重做),而不是回滾(撤消)。由於兩個磁碟寫入不能同時發生,我們可以爭辯說兩個同時送出不能發生。
但是,您也可以爭辯說,當 IO 子系統通知 RDBMS WAL 寫入已成功完成並且已釋放它在事務期間持有的任何鎖時,事務已送出。因此,在多 CPU 環境中,同時送出可以並且將會發生。
性能調整等待和隊列,標題為“執行模型(簡化)”的部分解釋了 SQL Server 如何發生這種情況的機制。同樣對於 SQL Server 人員來說,閱讀有關 WRITELOG 等待類型的背景知識有助於理解這些概念。
由於預寫日誌 (WAL),不會同時發生
WAL(又名事務日誌、二進制日誌等,取決於 RDBMS)強制所有數據更改可序列化以供以後重放或回滾。
在兩個核心伺服器上,兩個寫入可以同時進行,因為在 WAL 寫入之前可能沒有爭用,其中一個必須在另一個之前發生。
更高層,鎖存器和鎖可以序列化同一行/頁/表上的數據更改。