问题标签 [isolation-level]

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 回答
3254 浏览

sql-server - 为什么更好的隔离级别意味着更好的 SQL Server 性能

在测量查询的性能时,我发现了隔离级别和运行时间之间的依赖关系,这让我感到惊讶

左列是表提示,右列是以微秒为单位的经过时间(sys.dm_exec_query_stats.total_elapsed_time)。为什么更好的隔离级别可以提供更好的性能?这是一台开发机器,不会发生任何并发。由于锁定开销较少,我希望 READUNCOMMITTED 是禁食的。

更新:我确实用

发出并且 Profiler 确认没有发生缓存命中。

0 投票
10 回答
334741 浏览

sql-server - 为什么使用 READ UNCOMMITTED 隔离级别?

用通俗易懂的英语,使用的优缺点是什么

在 .NET 应用程序和报告服务应用程序的查询中?

0 投票
1 回答
166 浏览

sql - 防止事务并发(事务类型;事务隔离级别)

中间层组件将执行应用程序中的数据访问例程。该组件将调用几个 SQL Server 存储过程来执行数据库更新。所有这些过程调用都在单个事务的控制下运行。中间层的代码将实现以下对象:

我必须如何向组件添加代码以指定针对此类错误的最高可能保护级别(两个用户尝试同时更新相同的数据)。

0 投票
1 回答
1385 浏览

sql-server - 无法在快照隔离模式下使用 READPAST

我有一个从多个线程调用的进程,它执行以下操作:

  1. 开始交易
  2. IsProcessed=0通过查找带有提示的下一行从工作表中选择工作单元(UPDLOCK, HOLDLOCK, READPAST)
  3. 处理工作单元(C# 和 SQL 存储过程)
  4. 提交交易

这样做的想法是一个线程浸入池中以获取“下一个”工作,并对其进行处理,并且锁在那里确保单个工作不会被处理两次。(顺序无关紧要)。

几个月来,所有这些都运行良好。直到今天,当我碰巧意识到尽管启用了快照隔离并将其设置为数据库级别的默认值时,实际的事务创建代码是手动设置隔离级别“ReadCommitted”。

我适时将其更改为“快照”,当然立即收到以下消息:

您只能在 READ COMMITTED 或 REPEATABLE READ 中指定 READPAST 锁

锁定行的主要原因是“标记行”,以便在提交应用标记的事务时删除“标记”,并且锁定似乎是执行此操作的最佳方式,因为这除了这些线程之外,不会以其他方式读取 table。如果我要使用 IsProcessed 标志作为锁,那么大概我需要先进行更新,然后选择我刚刚更新的行,但我需要使用 NOLOCK 标志来知道是否有任何其他线程设置了标志在一行。

一切听起来有点乱。最简单的选择是完全放弃快照隔离模式,但第 3 步的设计需要它。

关于解决这个问题的最佳方法有什么好主意吗?

0 投票
3 回答
6598 浏览

oracle - Oracle 事务读取一致性?

我在理解数据库(Oracle)中的读取一致性时遇到问题。

假设我是一家银行的经理。一个客户有一把锁(我不知道)并且正在做一些更新。现在,在他获得锁定后,我正在查看他们的帐户信息并尝试对其进行一些操作。但由于读取一致性,我将看到客户获得锁定之前存在的数据。那么这不会影响我获得的投入以及我在此期间将要做出的决定吗?

0 投票
4 回答
62088 浏览

sql-server - 读取提交的快照 VS 快照隔离级别

有人可以帮助我了解何时在 SQL Server 中使用 SNAPSHOT 隔离级别而不是 READ COMMITTED SNAPSHOT 吗?

我知道在大多数情况下 READ COMMITTED SNAPSHOT 有效,但不确定何时进行 SNAPSHOT 隔离。

谢谢

0 投票
1 回答
503 浏览

birt - 在 BIRT 中定义事务隔离

我的 BIRT 报告使用 SQL 查询(JDBC 数据源)检索数据。我的 SQL Server 2005 数据库设置为使用快照事务隔离。

如何在 BIRT 报表设计器中定义事务隔离模式?

以编程方式调用数据源方法 setDefaultTransactionIsolation(4096) 完成(4096 表示快照隔离)。

0 投票
4 回答
8760 浏览

sql-server - 如何计算 Sql Server 中的读/写比率?

如何查询 Sql Server 2005 中的读/写比率?有什么我应该注意的警告吗?

也许它可以在 DMV 查询、标准报告、自定义报告(即性能仪表板)或检查 Sql Profiler 跟踪中找到。我不确定。

我为什么在乎?

我正在花时间提高我的网络应用数据层的性能。它处理数百万条记录和数以千计的用户。

我正在研究的要点之一是数据库并发性。默认情况下,Sql Server 使用悲观并发——适合写入繁重的应用程序。如果我的应用程序读取量很大,我可能会将其切换为乐观并发(隔离级别:),read committed snapshot就像Jeff Atwood 对 StackOverflow 所做的那样

0 投票
1 回答
389 浏览

.net - 我应该为以下 insert-if-not-present 事务使用哪个隔离级别?

我编写了一个实质上执行 ETL 任务的 linq-to-sql 程序,并且我注意到并行化可以提高其性能的许多地方。但是,当两个线程执行以下任务(伪代码)时,我担心防止违反唯一性约束。

通常,此代码执行一条SELECT语句来测试记录是否存在,INSERT如果记录不存在,则执行一条语句。它由隐式事务封装。

当两个线程为 的同一个实例运行此代码时recordText,我想防止它们同时确定该记录不存在,从而都试图创建相同的记录。隔离级别和显式事务会很好地工作,除了我不确定我应该使用哪个隔离级别——Serializable应该工作,但似乎太严格了。有更好的选择吗?

0 投票
5 回答
3665 浏览

c# - 锁定表以在 LINQ 中获取 MAX

我在 LINQ 中有一个查询,我想获取我的表的 MAX 代码并增加它并用新代码插入新记录。就像 SQL Server 的 IDENTITY 功能,但这里我的代码列是 char(5),其中可以是字母和数字。

我的问题是在插入新行时,两个并发进程获得最大值并将相等的代码插入记录。

我的命令是:

我跨 1000 个线程运行此命令,每个线程更新 200 个客户,并使用带有 IsolationLevel.Serializable 的 Transaction,执行两三次后发生错误:

错误:

事务(进程 ID 60)与另一个进程在锁资源上死锁,并已被选为死锁牺牲品。重新运行事务。

其他 IsolationLevels 生成此错误:

未找到或更改行。

请帮帮我,谢谢。

UPDATE2:我有一个生成新代码的.NET 方法,它是字母数字的。UPDATE3:我的 .NET 函数生成如下代码:0000、0001、0002、...、0009、000a、000b、000c、...、000z、0010、0011、0012、...、0019、001a、001b , 001z, ... ...