问题标签 [database-locking]

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 投票
5 回答
10965 浏览

mysql - How do I lock on an InnoDB row that doesn't exist yet?

How can I guarantee that I can search if a username exists in my database, then insert that username into the database as a new row without any intercept between the SELECT and INSERT statements?

Almost as if I am locking on a row that doesn't exist. I want to lock on the non-existent row with the username "Foo", so that I can now check if it exists in the database AND insert it into the database if it doesn't already exist without any interruption.

I know that using LOCK IN SHARE MODE and FOR UPDATE exist but as far as I know, that only works on rows that already exist. I am not sure what to do in this situation.

0 投票
1 回答
1068 浏览

multithreading - 生产者 - 消费者和数据库队列

我有一个生产者消费者机制,我被迫将生产的项目存储在数据库中,这是一个要求。另外我有几个生产者和几个消费者,生产者和消费者线程将访问几个数据库表中的记录;ProcessID 列将确定哪个线程正在访问什么记录。

线程将通过 Windows 服务工作。

ProcessID 的创建出于三个原因。

  • 1-如果线程不正常终止,则将使用 processID 来避免重新启动处理。

  • 2-线程通过数据库锁定同步,希望我只会获得行锁,并且可能在短时间内我会有很少的阻塞线程,因为每个线程都会访问少数标有 ProcessID 的记录。

  • 3-我想跟踪哪个线程在哪个时间做了什么,因为我正在将错误记录到数据库中。请注意,消费者会将项目发送到 Web 服务。

如果我使用 In-Memory 数组作为队列,我怀疑它是否会提高性能,它有以下缺点:-

  • 当消费者将一个项目出队时,无论如何它都必须用它的 processID 更新它在数据库中的记录。

  • 生产者将项目插入数据库,并使用 Output stp 参数获取其 ID,然后将项目以其 ID 放入队列中,避免从数据库中重新读取它,这是内存队列的唯一好处,避免从数据库中重新读取一个项目。请注意,一旦在数据库中插入一条记录,除了消费者之外,没有任何东西会更新它。

  • 另一个问题是,我假设操作员可以通过从数据库中删除某个项目来停止使用它,如果我在内存队列中使用,我将失去这个未来。

  • Queue 类必须锁定私有对象,访问队列方法应该同步。我觉得我在复制线程将被饿死的概率。而且我觉得我正在复制线程被阻塞等待的时间。

两个问题

1-我错过了这个设计中的一些东西吗?你认为它会起作用吗?

2-不使用内存队列是个好主意吗?

0 投票
1 回答
426 浏览

neo4j - Neo4j - java.lang.IllegalStateException:数据库锁定

我正在使用嵌入在我的项目中的 Neo4j。正在运行一个连续运行并更新节点属性的线程。当我尝试从另一个线程读取更新的节点时,我得到了java.lang.IllegalStateException:数据库锁定异常。我该如何解决这个问题?

编辑:另外,如果一个用户正在访问数据库,其他用户可以访问同一个数据库吗?

0 投票
4 回答
58728 浏览

database - Oracle 在执行 DML 语句时会锁定整个表还是仅锁定行

当我尝试在 db 表中插入/更新某些内容时,Oracle 会锁定整个表还是仅锁定正在插入/更新的行?

这是可以通过外部配置来控制的吗?

0 投票
3 回答
3377 浏览

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

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

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

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

0 投票
1 回答
2647 浏览

oracle - Oracle 在多次插入时锁定索引

我有这个问题,还没有找到解决方案:

我有一个包含多个表的应用程序(就像大多数应用程序一样)。

其中两个表是:

TB_POLICY由其某些字段的哈希分区,并通过关系TB_REDEMPTION上的引用进行分区fk_policy

TB_POLICY包含约 50,000 条记录,表TB_REDEMPTION包含约 25,000,000 条记录。

有一个用例,其中应用程序在单个事务中插入一条记录TB_POLICY和许多记录(大约 200-300 条记录) 。TB_REDEMPTION

TB_REDEMPTION当我在代码中标记断点时,在所有插入之后(在两个表中),并且在提交事务之前,无法从另一个数据库连接(甚至直接从 SQL*Plus)插入另一条记录- 它只是等待!

我们分析了很多东西,发现在PK_REDEMPTION(的主键索引TB_REDEMPTION)上发生了锁。

我怎样才能防止这个锁?我在网上搜索并没有在插入过程中找到任何关于索引锁的信息。

需要提一下,这个应用程序是基于web的,有很多并发用户使用同一个用例,并且一个用户锁定了主键索引,阻止了其他用户的工作,对应用程序的性能影响很差。

还有一点,应用是Spring/Hibernate开发的,所以事务管理是Spring做的,DML语句是Hibernate创建的。我们正在使用 Oracle 11g。

0 投票
2 回答
127 浏览

mysql - 由于选择查询而锁定表?

我们长期使用以下选择查询。但是今天我们收到了很多数据库锁。

请帮助我如何解决由于选择查询而导致的锁定。

表大小非常小 300kb。

我们优化了表格,但没有运气

从下面查询信息和表结构。

解释计划:

0 投票
2 回答
521 浏览

ios - 在 SQLite 数据库中插入字典不起作用

我正在尝试使用服务器返回的字典更新 iPhone 上的 SQLite 数据库。sqlite3_step 返回 sqlite_ok 但数据库仍然是空的。无论如何,在 sqlite3_step 之后插入了一个可能错误的日志,这将返回“数据库锁定”,所以我认为我的代码中的 sqlite 函数顺序有问题。我还验证了字典包含迭代内带有日志的数据,它为我提供了我期望找到的所有内容。

这里有什么问题?有人能帮我吗?对不起我的英语不好,谢谢马可

编辑:

我无法理解为什么这段代码不起作用!!!我还没有找到最终的解决方案。

我总是在 COMMIT 收到“不按顺序调用的库例程”,为什么?这个顺序不对吗?

-open -begin -prepare -循环字典(绑定,步进和重置;对于字典中的每个项目,我必须插入或替换一行) -finalize -commit -close

如果我删除开始并提交 exec 我在“步骤”上出现错误“数据库已锁定”,当代码尝试插入第一行时......这是一场噩梦......

再次感谢你的帮助!!

0 投票
4 回答
3816 浏览

ruby-on-rails - 如何确保模型始终使用事务和锁(在 Rails 中)?

我注意到 Rails 可能存在多台服务器的并发问题,并且希望强制我的模型始终锁定。这在 Rails 中是否可能,类似于强制数据完整性的独特约束?还是只需要仔细编程?

一号航站楼

二号航站楼,睡觉时

数据库启动

执行后

一号航站楼

二号航站楼

数据库结束

其他示例

http://rhnh.net/2010/06/30/acts-as-list-will-break-in-production

0 投票
1 回答
2983 浏览

ms-access - MS Access 防止数据库锁定

当我查询我的 MS Access 数据库时,我注意到它已被锁定,其他应用程序无法访问它。这是我的代码:

这是我的连接字符串:

除了将数据库升级到 SQL Server 之外,我可以指定连接字符串属性以从不锁定数据库吗?我的数据适配器上是否有我可以使用的属性?