问题标签 [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 - 如何处理对生成自动递增主 ID 的表的多次插入?
我在注册期间使用 mySql 数据库将用户详细信息存储在表User中。
用户表具有列 ID 自动增量主键。
我知道如果两个用户同时注册,两个请求会在数据库中排队。插入时在桌子上放一把锁。
15000个用户同时注册如何处理?所有这些请求都在数据库中排队吗?如果是,它会降低网页性能,对吗?我该如何扩展它?
postgresql - pg_dump 阻止使用同一用户访问 Postgres 数据库
我们在同一台服务器上使用 Postgres DB 在 Ubuntu 上运行 Django 应用程序。我们每天都使用以下命令备份数据库:
问题是这似乎阻止了使用相同用户(user1
)而不是我们的 Django 应用程序对相同数据库的读/写访问。检查它指出的文档
pg_dump 不会阻止其他用户访问数据库(读者或作者)
这让我觉得可能是因为 Django 应用程序使用的是同一个用户,所以它阻止了对数据库的访问。这会发生吗?我没有找到任何澄清它的文档。
mysql - 在 mysql 中写入的 Sidekiq 工作者在单线程时表现更好
我正在使用 sidekiq 同时执行某种服务,该服务table1
在 mysql 数据库中执行 INSERT。我注意到,平均而言,当我实际上为相关队列运行一个线程时,我的工作人员执行得更快(我正在使用 sidekiq-limit-fetch 来限制每个队列的线程数)。我读到mysql实际上正在运行LOCKS,它在执行INSERT时实际上锁定了表或行。我的猜测是,这就是为什么 worker 在单线程时实际上表现更好的原因。我怎么能确定这是实际问题?我能做些什么来解决这个问题?有没有办法不为这些 INSERT 操作锁定行或表。
postgresql - 如何在 PostgreSQL 中锁定 SELECT?
我习惯在 MySQL 中这样做:
这将锁定我的表SELECT
。
现在,我正在尝试在 PostgreSQL 中做类似的事情,在表中选择一组行,然后根据这些行值在其他表中插入一些内容。我想防止有过时的数据,所以我想知道如何SELECT
在 PostgresSQL 中锁定一个。
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.cs
CRUD 连接并与数据库和方法 CRUD 建立连接。DataService 中的所有方法与 DataContext 的连接方式相同:
在DataContext.cs
我们有与本地数据库的连接以及与本地数据库的所有方法。所有方法都有collisionLock(避免与数据库冲突)和cnn.Dispose()
(关闭与数据库的连接并避免错误Fatal signal 11 (SIGSEGV));
数据上下文.cs
Android项目的实现。
所以我需要你们的帮助来解决问题(数据库锁定)并检查我使用 SQLite 的实现是否正常。
我听到了所有的建议。
提前致谢。
postgresql - pg_locks 表有很多简单的选择语句
我们从我们的 django 后端和 lambda 连接到我们的 Postgresql (RDS) 服务器,有时 django 后端查询超时,我运行以下查询来查看锁:
这给了我 30 行从 lambda 执行的简单选择查询,如下所示:
为什么这个查询持有锁?我应该担心吗?
我正在使用 pg8000 库从 Lambda 连接
我在 Github 上打开了一个问题,可能是因为我使用错误的库。https://github.com/tlocke/pg8000/issues/16
mysql - 可以用mysql和innodb实现悲观锁吗?
我目前拥有的锁定流程是 aSELECT ... FOR UPDATE
后跟一个INSERT
. 例如
我希望SELECT
上面的内容能够获得一个排他锁,以防止多个调用者同时处于临界区,但似乎默认情况下,InnoDB 只在表或索引间隙上获得一个共享锁。如果两个并发事务同时尝试此操作,它们都可以获得共享锁,但在尝试插入时会失败并出现死锁错误。
有没有办法让这段代码表现得更像标准的悲观锁定来防止并发读者?
注意:我知道在某些情况下,唯一索引可以解决此问题,但我遇到了两个实例,其中唯一索引不足 (1) 当其中一列可以为空并且我只想要一个空值和 (2 ) 当我想保证行的另一个不变性时,例如给定键的行应该少于 10 行。
database - BLink 树插入操作
Lehman 和 Yao (1981)中B-link tree
介绍的.any insert operation need at most 3 locks simultaneously
我很难找到获取 3 个锁的具体场景。场景是什么?
mysql - Mysql在进行UPDATE查询时是否默认使用排他锁?
环境:Mysql5.7 InnoDB
一个连接
B 连接
功能流程:<1> -> <2> -> <3>
结论:<2>查询结果是blahblah
。但是,B Query(<3>) 等待。
B 查询没有锁。
为什么我会得到这个结果?Mysql在进行UPDATE查询时是否默认使用排他锁?
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 而不用不必要的作业信息浪费磁盘空间?