问题标签 [read-uncommitted]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
652 浏览

nhibernate - 使用 NHibernate 从 HasMany-relationship 中读取未提交的数据

我有一个 NHibernate 映射,它定义了一个类型的 HasMany 关系,即一个类有另一个类的列表。

我希望 NHibernate 能够读取未提交的数据,包括由 HasMany 关系产生的列表。

我有隔离级别 ReadUncommitted 并且我能够在提交之前写入数据并读回它。

但是,列表总是空的,除非我先提交。

有没有办法让 NHibernate 使用来自 HasMany-relationships 的数据填充对象?

编辑

事实证明,类上的任何非原始类型都不会被未提交的读取填充,除非它们实际上被添加到类中。

例如,Foo下面的类有一个列表Member- 在数据库中 - 由Id. 如果我使用NHibernate将一个实例Foo和一个实例持久化到数据库中,Member并且两者实际上都与IdFooMember

但是,如果我创建一个实例Foo和一个实例,Member并将后者设置为前者的引用,并使用 NHibermate 将两者都保存到数据库中,那么在完成事务之前Foo 有预期的实例当我读回它时。Member

如果我完成了交易,那么后续读取Foo中将会有预期的实例;Member只要事务完成,它是否Member仅作为具有正确 FK 的数据库记录存在Foo或它是对 的引用都无关紧要Foo

修订后的问题: NHibernate 是否可能仅在未提交的读取期间 基于FK 关系填充复杂成员?

0 投票
1 回答
3213 浏览

sql - SQL Server Read Uncommitted 阻塞事务

我在 SQL 中有一个工作队列,由一些服务管理,这些服务读出要处理READPAST查询的条目。

我最近添加了一个 UI 来检查在 C# 中使用READ UNCOMMITTEDNHibernate 查询的队列状态。他们给我正确的数字并不重要,只是表明处理过程有多远。

问题是这些状态查询已经开始导致超时。有时他们自己失败了;有时它们会导致队列操作失败。

主要的MSDN 文档说,如果我更改架构,仍然可以锁定,但我不是。

另一方面,显然为 Microsoft 的 SQL Server 团队工作的Marcel van der Holst就这个问题(提出问题的迈克尔不是我):

READ UNCOMMITTED事务不会占用任何数据库锁,但仍需要读取数据库页面才能读取实际数据。如果其他事务同时写入这些页面,它们可能会在两者之间造成一些阻塞。在引擎内部,我们不允许任何事务在写入过程中读取页面(我们使用锁存器来保证这一点)。如果在进行大查询时正在写入大量事务,则大读取可能仍会被阻塞。

我做错了什么吗?我应该改变什么来停止阻塞?

架构

非聚集索引:

在实践中

我减少了读取次数,因为它不会让事情变慢,但我仍然很好奇为什么可能会阻塞 with READ UNCOMMITTED

0 投票
1 回答
163 浏览

nhibernate - NHibernate:使用仅与数据库中的 FK 相关的未提交数据填充列表

这是对这个问题的阐述和澄清。

假设我有两张桌子,Foo并且Bar.

Bar有一个 FK 到Foo.

在应用程序中,表由类表示,并Foo有一个Bars 列表。 Bar有一个 id 的属性,Foo它在数据库中有一个 FK。

在 aSessionTransactionwith的上下文中IsolationLevel.ReadUncommitted,我将一个实例添加Foo到数据库中,将生成的 id 分配给Foo_id实例的属性Bar并将其添加到数据库中。

现在,调用之前Transaction.Commit(),是否可以从数据库中读取 NHibernateFoo列表Bar?也就是读取未提交的数据?

创建了一个 VS2012 项目来演示这一点。它包括一个用于构建所需数据库的 SSDT 项目,并进行了显示我所问问题的测试。

谢谢你。

0 投票
1 回答
1684 浏览

db2 - 读取已修改但未提交的数据

select .. WITH UR 忽略锁并且只给出当前提交的数据

如何读取未提交的数据?

如在甲骨文中:

更新表集..

select .. 给出修改但未提交的数据

0 投票
3 回答
3377 浏览

sql - 具有 READ UNCOMMITTED 隔离级别的查询是否会导致它访问的表被锁定?

我的应用程序需要批处理 10M 行,这是连接表的复杂 SQL 查询的结果。
我将计划迭代一个结果集,每次迭代读取一百个。
为了在繁忙的 OLTP 生产数据库上运行它并避免锁定,我想我将使用READ UNCOMMITTED 隔离级别进行查询。
这会使查询不受任何数据库写入的影响吗?避免任何行/表锁?

我主要关心的是我的查询阻塞了任何其他数据库活动,我不太关心其他方式。

旁注:
1. 我将阅读历史数据,所以我不太可能遇到未提交的数据。如果我这样做也没关系。
2. 迭代过程可能需要数小时。数据库连接将在此过程中保持打开状态。
3. 我最多有两个这样的并发批处理实例。
4. 我可以容忍重复行。(通过读取未提交的产品)。
5. DB2 是目标数据库,但我也想要一个适合其他数据库供应商的解决方案。
6. 快照隔离级别能帮我清理服务器内存吗?

0 投票
1 回答
1482 浏览

c# - 如何在 nHibernate 事务中读取未提交的数据?

我想知道如何读取未提交的数据。我有一个应用程序将一个条目保存到 table1 中,然后尝试从同一个表中读取一些条目。我无法这样做,因为数据在开始事务和结束事务之间被锁定。

我上网查了一下,感觉通过设置isolationlevel=ReadUnCommitted,应该可以搞定。但这似乎不起作用。

请参阅我之前的帖子以获取更多详细信息:StackOverflow 帖子

0 投票
1 回答
1702 浏览

mysql - 当隔离级别为 READ_UNCOMMITTED 时,看不到正在运行的事务插入的行

我有将行同时插入表A 的应用程序。每个应用程序以批处理模式插入行(使用 JDBC 准备语句),每个批处理使用一个事务(以避免在每个 之后重建索引INSERT)。每个批次中存在的行是完全独立的,事务仅用于优化。每个插入的行都会自动设置其主键 ( AUTO_INCREMENT)。

我有另一个应用程序根据它们的 ID 处理表 A 中的行。应用程序处理 range [ID1,ID2],然后处理 range [ID2+1,ID3][ID3+1,ID4]依此类推。每个范围,例如,[ID1,ID2]可能包含在不同事务期间插入的行,并且可能其中一些事务可能尚未提交。例如,在 range 中[ID1,ID2],行[ID1,ID1+N]可能已在尚未提交的事务期间插入,而行[ID1+N+1,ID2]可能已在已提交的事务期间插入。因此,当在范围内选择行时[ID1,ID2],交易隔离级别设置为READ_UNCOMMITTED以使得不合规行可见。

问题是有时,未提交的行是不可见的,因此永远不会被处理。

SELECT当 s在 s 之后很短的时间内执行时,似乎会出现该问题INSERT。我做了一个测试,其中一个连接在批处理中插入多行包装为事务,并且在提交事务之前,等待一段时间后,另一个连接READ_UNCOMMITTED以事务隔离级别查询行,并且这些行是可见的。因此,我得出的结论是,即使插入了一行并且释放了自增计数器锁,尽管READ_UNCOMMITTED设置为事务隔离级别,但该行可能对其他事务不可见。

0 投票
1 回答
358 浏览

sql - SQL Server 更新锁

如果您有以下sql,是否有可能如果它被许多不同的进程同时运行多次,那么两个或多个进程可能会更新表?

sql中没有指定其他锁等,其他未提交读取。

我正试图追查一个问题,而我现在正抓着稻草......

0 投票
1 回答
12020 浏览

jpa - 如何在@Transactional“READ_UNCOMMITTED”中设置隔离级别。我正在使用 EclipseLink 2.5.1-RC1

我需要在正在进行的事务中启动新事务,以便第二个事务中的异常只会回滚新事务而不是旧事务。

我通过在第二个事务中设置传播属性来做到这一点,如下所示:

@Transactional(传播=传播.REQUIRES_NEW)

这创建了一个新的 Transaction,但是新的 Transaction 需要读取第一个事务的一些未提交的数据(脏读),并更新该数据。我试图通过将隔离属性设置为:

@Transactional(传播=传播.REQUIRES_NEW,隔离=隔离.READ_UNCOMMITTED)

这会引发异常 - InvalidIsolationLevelException,说“标准 JPA 不支持自定义隔离级别 - 为您的 JPA 实现使用特殊的 JpaDialect”。

任何人都可以帮助我实施 JpaDialect 吗?我正在使用 Eclipse Link 2.5.1 。

或者我可以在开始新交易之前关闭第一笔交易吗?由于第一个事务关闭,第二个事务读取第一个事务提交的数据没有问题。

0 投票
1 回答
71 浏览

tsql - 为什么“读取未提交”隔离级别允许锁定?

我在我的代码中放置了一个断点,以在事务提交或回滚之前暂停执行。然后我想查看数据库的当前状态,但是当我在 ssms 中设置事务隔离级别read uncommited并针对受暂停事务影响的表运行查询时,它会被锁定并等待事务完成。

为什么会发生这种情况,是否可以禁用锁定?