簡體   English   中英

如何使用 FireDAC 和 SQL Server 避免不需要的事務和鎖

[英]How to avoid unwanted transactions and locks using FireDAC and SQL Server

通過分析 SQL Server 中的表鎖,我在 RAD Studio XE7 中構建的 Win32 應用程序在每個 FDQuery 處於活動狀態時啟動了大量事務。 有時這會導致應用程序問題並鎖定數十個用戶。 尤其是觸發表。

在我的測試中,我使用簡單的 FDConnection 和 FDQuery 作為Select * from Customer並使用默認設置,並得出結論FDQuery1.Active:=True會導致 Customer 表事務的啟動。 FDQuery1.Active:=false時,事務消失。

我想禁止在 FDQuery 中以只讀方式啟動事務,作為網格或報告的數據列表。

但是我找不到找到適當調整 FDQuery 的方法。

默認情況下,SQL Server 不實現數據塊的版本控制。 因此,為了返回一組一致的行,它使用共享鎖保證在執行查詢期間沒有其他會話更改數據。

使用“WITH(NOLOCK)”禁用共享鎖,但會導致結果集不一致。

唯一的一種解決方案是使用 READ_COMMITED_SNAPSHOT 隔離級別,將更改的數據存儲到 temp,用於在不鎖定更新的情況下返回一致的結果集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM