问题标签 [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 投票
0 回答
460 浏览

mysql - Mysql完全锁定大导入

我有一台带有 5 个数据库的 MYSQL 服务器。

我正在使用 phpmyadmin csv import 在一个数据库的一个表中加载大量数据。

我知道这台机器上的所有其他操作可能会因为处理量而变慢,但是 MYSQL 很简单,不会响应任何其他同时请求,即使在其他表或其他数据库中也是如此。

并且由于这个 apache 不回答任何需要数据库连接的请求(永远加载)

导入完成后,apache和mysql恢复正常工作...我不需要重新启动或执行任何其他命令

我的问题是,这种行为正常吗?由于一个巨大的请求,mysql应该停止回答所有其他请求吗?

恐怕如果我在这台服务器的一个数据库中运行一个大查询,我的所有其他数据库也将被锁定,我的应用程序将停止工作

0 投票
2 回答
1489 浏览

sql-server - 检测 SQL Server 更新锁的原因

问题

业务事务期间的 .NET 应用程序执行如下查询

此查询挂起直到超时(几分钟),然后我得到一个异常:

SqlException:执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。

当数据库负载过重(每天几次)时,它会被复制。
我需要检测查询锁定的原因。

我试过的

  1. 探索活动监视器 - 它显示查询被锁定。通过 headblocker 过滤并没有提供太多,它经常变化。

  2. 分析 SQL 脚本,给出类似于活动监视器数据的结果 - 与查看活动监视器的结果几乎相同。追逐blocking_session_id 会导致一些会话,等待命令或执行一些SQL,我无法推断与Order 表的关系。在一秒钟内执行相同的脚本会产生其他会话。我还尝试了这个 atritcle 中的一些其他查询/存储过程,但没有结果。

  3. 为锁定/问题事务构建标准 SQL Server 报告会导致错误,如最大递归耗尽或本地 OutOfMemory 异常(我有 16 Gb RAM)。

数据库详细信息

  • 版本:SQL Server 2016
  • 应用程序每秒对数据库的大约并发查询数:400
  • 数据库大小:1.5 Tb
  • 事务隔离级别:ReadUncommited对于只读事务,Serializable对于有修改的事务

我对这类问题完全陌生,所以我肯定错过了很多。
任何帮助或方向都会很棒!

0 投票
1 回答
32 浏览

sqlite - 使用 C# 在 SQLite3 中存储数组的问题

我有一个要求,如果找到一个新对象,我将其唯一 id 添加到继承该类的所有父类中。例如,如果 C:B 和 B:A(C 扩展 B 和 B 扩展 A),那么如果为 C 找到一个新对象,由于继承,该对象也是 B 和 A 类型,因此该对象进入包含其所有子实例的 A 和 B(子)列。因此,我想将它作为一个数组。为此,我正在读取 A 和 B 行并获取子列,将其反序列化为数组并将其放回 db。现在这肯定有锁定问题。例如,如果同时发现 D:C 或 D:B 的实例,则它们都将读取相同的副本,最后一次写入将赢得擦除先前写入的实例。

有没有办法通过在我的事务(在本例中为读取-->更新数组-->写入)完成之前不允许其他人读取它来消除此问题。

有没有推荐的方法来解决这个问题。

0 投票
1 回答
772 浏览

django - 使用 django select_for_update 不回滚错误

select_for_update我正在尝试通过使用该实用程序来利用 django 的行级锁定。根据文档,这只能在transaction.atomic块内使用。使用块的副作用transaction.atomic是,如果我的代码抛出异常,所有数据库更改都会回滚。我的用例是这样的,我实际上希望保留数据库更改,并允许传播异常。这让我的代码看起来像这样:

这感觉像是一个完全的反模式,我敢肯定我一定遗漏了一些东西。我知道我可能会通过手动使用transaction.set_autocommit来管理事务来推出我自己的解决方案,但我认为会有一种更简单的方法来获得这个功能。有没有一种内置的方式来实现我想要的?

0 投票
2 回答
102 浏览

sql - 存储过程与标准选择更新,避免锁定

为了检索 ID,我首先在两个后续查询中进行选择,然后进行更新。

问题是我遇到了锁定行的问题。我已经读过将这两个语句 Select 和 Update 放在一个存储过程中它有助于锁定。这是真的?

我运行的查询是:

问题是可能会发生多个用户选择同一行并且他们也可能更新同一行。

0 投票
1 回答
276 浏览

c# - C# - Sqlite - 错误锁定数据库

我需要帮助:我的代码中有两种方法——一种用于插入数据,一种用于更新数据——我首先调用“插入方法”,第二次调用“更新方法”,但在第二次情况下,我收到“锁定数据库错误”。

这里的方法:

这里的错误:

错误截图

PS:如果我多次调用 insert 方法,它可以正常工作;如果我只调用更新方法 - 之前没有插入一些东西 - 它可以工作;仅当我首先调用 insert 方法和第二次调用 update 方法时,它才起作用。

我不明白问题出在哪里!

0 投票
1 回答
1198 浏览

c# - SQLite 从读取锁定表

问题:从 SQLite 获取错误,表明数据库已锁定 预期结果:多个应用程序可以从数据库中读取,如果只有一个应用程序写入,则表不会被锁定。

我有一个读取和写入 SQLite 数据库的 C# 应用程序。当应用程序的多个实例同时运行时,没有应用程序实例能够对数据库进行更改,但所有实例都可以从中读取。我发现的所有内容都表明,只要一次只有一个应用程序尝试写入 BD,它就不应被锁定。我的连接字符串明确指出LockingMode=Normal; Synchronous=Off. 关于导致这种情况的任何建议?以下是运行的连接方法和遇到锁的写入:

私有字符串 _databasePath ; 私有 SQLiteConnection _dbConn;

0 投票
1 回答
362 浏览

sql - SELECT 是否会阻止返回的行被删除?

说我有:

  1. T1:(SELECT id FROM x WHERE timestamp < y返回id = [1, 2, 3]
  2. T2:DELETE FROM x WHERE id = 1
  3. T1:SELECT timestamp, value FROM x WHERE id = 1

READ-COMMITTED隔离。

第 3 步是否存在返回空结果的风险,或者第 1 步是否获得某种锁定/快照以防止第 2 步更改结果?(我假设REPEATABLE-READ会做我想做的事,但这个问题是关于READ-COMMITTED)。

我正在使用 postgresql,但我对独立于 DB 的答案感兴趣。例如,如果某些数据库阻止删除而其他数据库不阻止,我想知道这一点。谢谢你。

0 投票
0 回答
78 浏览

java - 具有各种应用程序访问权限的 SQLite 数据库锁定

我有一个被多个应用程序使用的 SQLite 数据库。我一直认为 SQLite 允许多个同时读取,但在给定时间只有一个应用程序可以写入它。这是不正确的吗?

布局是我有一个 Java 应用程序,它正在连续写入数据库(每秒 1 个事务,该事务中有多个插入)。这是一个历史数据库,所以它总是存储数据。

我有另一个 C# 应用程序(不是我编写的),当用户请求报告(基本上是数据转储)时,它会从该数据库中读取数据。当我运行此报告时,Java 应用程序将收到 SQLite 异常 SQLITE_BUSY “数据库文件已锁定”异常,并且在那几秒钟内无法插入数据。

我的问题是,这正常吗?还是应该在插入仍在进行时进行读取?如果这是正常的,我将不得不添加功能以在发生故障时重试 INSERTING。还是我没有编写的 C# 代码中的某些内容可能会不必要地锁定数据库以进行读取?

0 投票
1 回答
782 浏览

mysql - Mysql Deadlock - 事务是否在等待它持有的锁?

我无法解释 MySql(5.7,InnoDB)的这个死锁输出。我知道死锁最终将通过更改应用程序级代码来解决,而您无法从这个代码段中找到根本原因。但是,希望有人能够告诉我为什么我对这个 MySql 诊断的解释是不正确的。

对我来说,看起来我们有两个交易涉及这个死锁。事务 2 持有这个锁,而事务 1 等待它:

现在,这是我不明白的部分。事务 2 似乎也在S(共享)模式下等待同一个锁。但是,事务 2 已经在X模式下获得了锁,所以我不明白为什么它需要等待才能获得锁。

  1. 我对这个诊断输出的解释一定有问题。谁能指出这里实际发生了什么?
  2. MySql 是否有任何其他诊断信息可以帮助我了解这里发生了什么?