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

mysql - 如何处理对生成自动递增主 ID 的表的多次插入?

我在注册期间使用 mySql 数据库将用户详细信息存储在表User中。

用户表具有列 ID 自动增量主键

我知道如果两个用户同时注册,两个请求会在数据库中排队。插入时在桌子上放一把锁。

15000个用户同时注册如何处理?所有这些请求都在数据库中排队吗?如果是,它会降低网页性能,对吗?我该如何扩展它?

0 投票
1 回答
1695 浏览

postgresql - pg_dump 阻止使用同一用户访问 Postgres 数据库

我们在同一台服务器上使用 Postgres DB 在 Ubuntu 上运行 Django 应用程序。我们每天都使用以下命令备份数据库:

问题是这似乎阻止了使用相同用户(user1)而不是我们的 Django 应用程序对相同数据库的读/写访问。检查它指出的文档

pg_dump 不会阻止其他用户访问数据库(读者或作者)

这让我觉得可能是因为 Django 应用程序使用的是同一个用户,所以它阻止了对数据库的访问。这会发生吗?我没有找到任何澄清它的文档。

0 投票
0 回答
57 浏览

mysql - 在 mysql 中写入的 Sidekiq 工作者在单线程时表现更好

我正在使用 sidekiq 同时执行某种服务,该服务table1在 mysql 数据库中执行 INSERT。我注意到,平均而言,当我实际上为相关队列运行一个线程时,我的工作人员执行得更快(我正在使用 sidekiq-limit-fetch 来限制每个队列的线程数)。我读到mysql实际上正在运行LOCKS,它在执行INSERT时实际上锁定了表或行。我的猜测是,这就是为什么 worker 在单线程时实际上表现更好的原因。我怎么能确定这是实际问题?我能做些什么来解决这个问题?有没有办法不为这些 INSERT 操作锁定行或表。

0 投票
1 回答
1560 浏览

postgresql - 如何在 PostgreSQL 中锁定 SELECT?

我习惯在 MySQL 中这样做:

这将锁定我的表SELECT

现在,我正在尝试在 PostgreSQL 中做类似的事情,在表中选择一组行,然后根据这些行值在其他表中插入一些内容。我想防止有过时的数据,所以我想知道如何SELECT在 PostgresSQL 中锁定一个。

0 投票
1 回答
422 浏览

xamarin.forms - 错误 DB 锁定在 Android SQLite Xamarin 表单中

我正在开发一个有 50 多个表并且可以在没有互联网连接的情况下工作的应用程序,因此在后台应用程序可以与 API 同步并获取所有信息并在本地进行 CRUD 操作。

有时,当应用程序与 API 同步时,当我在应用程序上进行另一项操作时,我会收到错误“数据库已锁定”。

所以我需要帮助来解决这个问题,我知道有很多关于这个问题的帖子,但是基于我对我的数据库的实施,这似乎不足以解决我的问题。

Nugets:Xamarin.Forms 3.0.0 482510 sqlite-net-pcl 1.5.166-beta

我使用一个类 DataService.cs,该类与DataContext.csCRUD 连接并与数据库和方法 CRUD 建立连接。DataService 中的所有方法与 DataContext 的连接方式相同:

DataContext.cs我们有与本地数据库的连接以及与本地数据库的所有方法。所有方法都有collisionLock(避免与数据库冲突)和cnn.Dispose()(关闭与数据库的连接并避免错误Fatal signal 11 (SIGSEGV));

数据上下文.cs

Android项目的实现。

所以我需要你们的帮助来解决问题(数据库锁定)并检查我使用 SQLite 的实现是否正常。

我听到了所有的建议。

提前致谢。

0 投票
1 回答
168 浏览

postgresql - pg_locks 表有很多简单的选择语句

我们从我们的 django 后端和 lambda 连接到我们的 Postgresql (RDS) 服务器,有时 django 后端查询超时,我运行以下查询来查看锁:

这给了我 30 行从 lambda 执行的简单选择查询,如下所示:

为什么这个查询持有锁?我应该担心吗?

我正在使用 pg8000 库从 Lambda 连接

我在 Github 上打开了一个问题,可能是因为我使用错误的库。https://github.com/tlocke/pg8000/issues/16

0 投票
0 回答
227 浏览

mysql - 可以用mysql和innodb实现悲观锁吗?

我目前拥有的锁定流程是 aSELECT ... FOR UPDATE后跟一个INSERT. 例如

我希望SELECT上面的内容能够获得一个排他锁,以防止多个调用者同时处于临界区,但似乎默认情况下,InnoDB 只在表或索引间隙上获得一个共享锁。如果两个并发事务同时尝试此操作,它们都可以获得共享锁,但在尝试插入时会失败并出现死锁错误。

有没有办法让这段代码表现得更像标准的悲观锁定来防止并发读者?

注意:我知道在某些情况下,唯一索引可以解决此问题,但我遇到了两个实例,其中唯一索引不足 (1) 当其中一列可以为空并且我只想要一个空值和 (2 ) 当我想保证行的另一个不变性时,例如给定键的行应该少于 10 行。

0 投票
1 回答
339 浏览

database - BLink 树插入操作

Lehman 和 Yao (1981)B-link tree介绍的.any insert operation need at most 3 locks simultaneously

我很难找到获取 3 个锁的具体场景。场景是什么?

0 投票
1 回答
589 浏览

mysql - Mysql在进行UPDATE查询时是否默认使用排他锁?

环境:Mysql5.7 InnoDB

一个连接

B 连接

功能流程:<1> -> <2> -> <3>

结论:<2>查询结果是blahblah。但是,B Query(<3>) 等待。

B 查询没有锁。

为什么我会得到这个结果?Mysql在进行UPDATE查询时是否默认使用排他锁?

0 投票
0 回答
1203 浏览

spring - Spring Batch 表清理需要很长时间

对于基于 Spring Boot 并依赖 PostgreSQL 9.6 数据库的应用程序,我使用 Spring Batch 来安排一些必须每n秒执行一次的操作(可自定义,但通常在几秒到几分钟之间);结果,一天结束时,系统执行了大量作业,Spring Batch 保留了大量信息。

事实是,我对历史化这些作业并不感兴趣,所以一开始,我使用了 Spring Batch 的内存版本来避免对此类(对我而言)无用信息的任何持久性。

但是,如果在资源较少的环境中运行具有小n的配置,这种方法会导致性能问题,因此我决定尝试使用数据库方式。

不幸的是,这些表增长得很快,我想实现一个清理过程来清除所有比一天更早的数据。

痛苦来了:事实上,即使没有锁定这些表(因此,主应用程序已关闭并且没有人与数据库交互),清理它们需要很长时间,我真的无法理解原因。

Spring Batch (4.0.1) 提供了以下 PG 脚本来生成这些表:

通过尊重引用优先级,我尝试通过执行以下删除来清理这些表:

前 4 个表一切正常,但是,一旦我到达BATCH_JOB_EXECUTION表,删除几十万行需要 30 分钟。更糟糕的是,从前 5 个表中删除所有内容后,最后一个(现在没有链接)需要更多。

你能看出为什么这个简单的操作需要这么长时间才能完成吗?我的意思是,它当然必须检查是否违反约束,但它似乎慢得不合理。

另外,有没有更好的方法来使用 Spring Batch 而不用不必要的作业信息浪费磁盘空间?