4

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

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

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

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

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

先感谢您。

4

2 回答 2

2

已提交是对未指定隔离级别的数据库的任何查询的默认隔离级别。您在执行期间更改它,然后它恢复为“已提交”。当 CF 和 JDBC 驱动程序一起工作时,语句的创建是“幕后”工作的一部分。使用“read_uncommitted”更快,因为它读取时不会阻止任何其他连接或查询更改或读取数据。因此,它开启了“脏读”的可能性(您正在读取未提交的数据,因此可能是不正确的数据),但在许多情况下,这并不是什么大问题,因此您的 DBA 可能是正确的。

于 2012-06-01T18:56:00.063 回答
2

这没有被正确解释,read_committed是一个“隔离”问题,如果其他任务打开表以进行更新/插入/删除,则“read_committed”中的事务将被等待从表中释放锁,直到事务提交。如果事务设置为“ read_uncommitted ”,它将直接从现有数据中读取,并且不会等待挂起的 更新/插入/删除。因此,“ Dirty ”这个术语意味着任何未决的、未提交的都不会被返回,但也不会被锁定和延迟。

于 2014-03-18T15:55:12.960 回答