Database-Design

當長時間執行的事務阻塞多個讀取事務時如何提高系統的活躍度

  • December 22, 2020

當在同一個數據庫對像上具有多個讀取事務和一個正在更新數據的長時間執行的事務時,是否有任何推薦的方法來提高應用程序的活躍性?

例如,一個事務 Ti 正在更新幾條記錄

$$ CUSTOMER $$表(可能持續數小時),並且多個 Tj 事務正在嘗試讀取每個客戶的訂單數。我假設如果 Ti 獲得排他鎖,所有 Tj 事務都將被暫停,從而導致性能不佳(低活躍度)。 我的應用程序處於設計階段,我還沒有選擇具體的 DBMS。

我的目標是為 Tj 提供最新版本的

$$ CUSTOMER $$在 Ti 開始之前,並且 Ti 不會阻塞 Tj。

您可以切換到樂觀並發控制 (OCC)。通常,作者不會阻止讀者。在您描述的情況下,吞吐量肯定會提高。根據您如何定義“活躍度”,它可能比現在更糟。

OCC 為每個事務提供數據的快照。通常,這表示事務開始時送出的值,儘管細節有所不同。因此,事務可能不會讀取最近送出的值,因為該值是在事務開始後寫入的。這是延遲和正確性之間的權衡。選擇更適合這種情況的選項。

引用自:https://dba.stackexchange.com/questions/281899