问题标签 [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.
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.
multithreading - 生产者 - 消费者和数据库队列
我有一个生产者消费者机制,我被迫将生产的项目存储在数据库中,这是一个要求。另外我有几个生产者和几个消费者,生产者和消费者线程将访问几个数据库表中的记录;ProcessID 列将确定哪个线程正在访问什么记录。
线程将通过 Windows 服务工作。
ProcessID 的创建出于三个原因。
1-如果线程不正常终止,则将使用 processID 来避免重新启动处理。
2-线程通过数据库锁定同步,希望我只会获得行锁,并且可能在短时间内我会有很少的阻塞线程,因为每个线程都会访问少数标有 ProcessID 的记录。
3-我想跟踪哪个线程在哪个时间做了什么,因为我正在将错误记录到数据库中。请注意,消费者会将项目发送到 Web 服务。
如果我使用 In-Memory 数组作为队列,我怀疑它是否会提高性能,它有以下缺点:-
当消费者将一个项目出队时,无论如何它都必须用它的 processID 更新它在数据库中的记录。
生产者将项目插入数据库,并使用 Output stp 参数获取其 ID,然后将项目以其 ID 放入队列中,避免从数据库中重新读取它,这是内存队列的唯一好处,避免从数据库中重新读取一个项目。请注意,一旦在数据库中插入一条记录,除了消费者之外,没有任何东西会更新它。
另一个问题是,我假设操作员可以通过从数据库中删除某个项目来停止使用它,如果我在内存队列中使用,我将失去这个未来。
Queue 类必须锁定私有对象,访问队列方法应该同步。我觉得我在复制线程将被饿死的概率。而且我觉得我正在复制线程被阻塞等待的时间。
两个问题
1-我错过了这个设计中的一些东西吗?你认为它会起作用吗?
2-不使用内存队列是个好主意吗?
neo4j - Neo4j - java.lang.IllegalStateException:数据库锁定
我正在使用嵌入在我的项目中的 Neo4j。正在运行一个连续运行并更新节点属性的线程。当我尝试从另一个线程读取更新的节点时,我得到了java.lang.IllegalStateException:数据库锁定异常。我该如何解决这个问题?
编辑:另外,如果一个用户正在访问数据库,其他用户可以访问同一个数据库吗?
database - Oracle 在执行 DML 语句时会锁定整个表还是仅锁定行
当我尝试在 db 表中插入/更新某些内容时,Oracle 会锁定整个表还是仅锁定正在插入/更新的行?
这是可以通过外部配置来控制的吗?
sql - 具有 READ UNCOMMITTED 隔离级别的查询是否会导致它访问的表被锁定?
我的应用程序需要批处理 10M 行,这是连接表的复杂 SQL 查询的结果。
我将计划迭代一个结果集,每次迭代读取一百个。
为了在繁忙的 OLTP 生产数据库上运行它并避免锁定,我想我将使用READ UNCOMMITTED 隔离级别进行查询。
这会使查询不受任何数据库写入的影响吗?避免任何行/表锁?
我主要关心的是我的查询阻塞了任何其他数据库活动,我不太关心其他方式。
旁注:
1. 我将阅读历史数据,所以我不太可能遇到未提交的数据。如果我这样做也没关系。
2. 迭代过程可能需要数小时。数据库连接将在此过程中保持打开状态。
3. 我最多有两个这样的并发批处理实例。
4. 我可以容忍重复行。(通过读取未提交的产品)。
5. DB2 是目标数据库,但我也想要一个适合其他数据库供应商的解决方案。
6. 快照隔离级别能帮我清理服务器内存吗?
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。
mysql - 由于选择查询而锁定表?
我们长期使用以下选择查询。但是今天我们收到了很多数据库锁。
请帮助我如何解决由于选择查询而导致的锁定。
表大小非常小 300kb。
我们优化了表格,但没有运气
从下面查询信息和表结构。
解释计划:
ios - 在 SQLite 数据库中插入字典不起作用
我正在尝试使用服务器返回的字典更新 iPhone 上的 SQLite 数据库。sqlite3_step 返回 sqlite_ok 但数据库仍然是空的。无论如何,在 sqlite3_step 之后插入了一个可能错误的日志,这将返回“数据库锁定”,所以我认为我的代码中的 sqlite 函数顺序有问题。我还验证了字典包含迭代内带有日志的数据,它为我提供了我期望找到的所有内容。
这里有什么问题?有人能帮我吗?对不起我的英语不好,谢谢马可
编辑:
我无法理解为什么这段代码不起作用!!!我还没有找到最终的解决方案。
我总是在 COMMIT 收到“不按顺序调用的库例程”,为什么?这个顺序不对吗?
-open -begin -prepare -循环字典(绑定,步进和重置;对于字典中的每个项目,我必须插入或替换一行) -finalize -commit -close
如果我删除开始并提交 exec 我在“步骤”上出现错误“数据库已锁定”,当代码尝试插入第一行时......这是一场噩梦......
再次感谢你的帮助!!
ruby-on-rails - 如何确保模型始终使用事务和锁(在 Rails 中)?
我注意到 Rails 可能存在多台服务器的并发问题,并且希望强制我的模型始终锁定。这在 Rails 中是否可能,类似于强制数据完整性的独特约束?还是只需要仔细编程?
一号航站楼
二号航站楼,睡觉时
数据库启动
执行后
一号航站楼
二号航站楼
数据库结束
其他示例
http://rhnh.net/2010/06/30/acts-as-list-will-break-in-production
ms-access - MS Access 防止数据库锁定
当我查询我的 MS Access 数据库时,我注意到它已被锁定,其他应用程序无法访问它。这是我的代码:
这是我的连接字符串:
除了将数据库升级到 SQL Server 之外,我可以指定连接字符串属性以从不锁定数据库吗?我的数据适配器上是否有我可以使用的属性?