[英]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.