ColdFusion 8执行cfquery,事务和脏读

时间:2012-06-01 18:28:39

标签: sql-server coldfusion transactions

当使用ColdFusion 8和MSSQL时,在跟踪时,我的DBA注意到cfquery调用附加了SET TRANSACTION ISOLATION LEVEL READ COMMITTED,这不在查询本身中。出于性能原因,他建议将其删除或更改为未提交。

这是ColdFusion正在添加的东西,默认情况下是ColdFusion和/或MSSQL吗?

我正在使用ColdFusion的默认MSSQL驱动程序,我可以通过在每个cfquerys周围使用<cftransaction isolation="read_uncommitted">标记进行临时更改。

有没有其他方法可以阻止它被添加到ColdFusion中,或者cftransaction是最好的方法吗?

最后一个问题,在使用isolation="read_uncommitted"时,为什么在添加SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED的查询之前添加SET TRANSACTION ISOLATION LEVEL READ COMMITTED

提前谢谢。

2 个答案:

答案 0 :(得分:2)

Committed是对DB的任何查询的默认隔离级别,否则将指定隔离级别。您在执行期间更改它,然后它将恢复为“已提交”。声明的创建是CF和JDBC驱动程序协同工作的“幕后”的一部分。使用“read_uncommitted”更快,因为它在不阻止任何其他连接或查询改变或读取数据的情况下进行读取。因此,它开启了“脏读”的可能性(您正在阅读未提交的内容,因此可能是不正确的数据),但在许多情况下,这并不是一个问题,因此您的DBA可能是正确的。

答案 1 :(得分:2)

这未被正确解释, read_committed 是一种隔离&#39;问题是,如果某个其他任务的表格已打开更新/插入/删除,那么“&_ 39; read_committed&#39;将等待锁定从表中释放,直到交易 ARE 提交。如果交易设置为&#39; read_uncommitted &#39;它将直接从现有数据中读取,不会等待待处理的更新/插入/删除。因此,术语“脏”&#39;意味着任何未决的,未提交将不会被退回,但它也不会被锁定和延迟。