问题标签 [table-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 - Innodb 事务或表锁?
我有一个简单的表格,它是一个电子邮件队列。
多个线程一次重复读取 50 行并删除这些行。
为了避免重复阅读我使用的同一行:
另一个线程同时写入表。出于某种原因,我不明白这个配置在读取和写入时都被锁定的表死锁了。
我的问题是:这是锁定正确的解决方案,以确保我读取每一行一次且仅一次(并删除它)。
还是将其作为交易更好地处理,如果是,是哪种?我没有交易经验。
mysql - mysqldump 与 --single-transaction 并避免没有表锁定的 DDL 语句
我正在寻找一种解决方案,使用带有单事务选项的 mysqldump 对 MySQL 数据库进行逻辑备份,并且在备份期间避免任何 DDL 语句而不锁定任何表。如果在备份期间执行任何 alter table 语句,当前 mysqldump 将失败。
mysql - MySql - innodb - 复合键上的行级锁定如何用简单的话工作
伙计们,我阅读了 MySQL 5.5 的参考手册,但理解行级锁定非常棘手。我正在使用 MySQL innoDB 并想了解具有复合主键的表上的行级锁定。这两个键都是从父表中一对一地识别键。
我想在上表中运行 Haversine 公式(我知道查询和公式),以便在 where 子句中我必须提供 trip_route_id。这样Haversine 公式查询在特定的trip_route_id 上运行。
另一方面,一些线程/会话正在插入到该表中,而一些正在搜索。我在两个 PK 列上都有一个默认的 PRIMARY 索引。
现在的问题:我的完整表会被锁定还是只锁定具有 trid_route_id = someProvidedId 的行?
请让我知道是否需要其他解释?
谢谢。
mysql - 表锁和行锁的区别
我正在研究 MySQL 及其工作原理,有些事情让我感到困惑,我在网上找不到任何明确的解释。
行锁和表锁到底有什么区别?一个锁定行,另一个锁定表。正确的?
那么,在哪种情况下你会使用表锁和行锁呢?它是程序员或数据库管理员可以编程的东西,还是它是为你做的?
如果您认为有任何其他信息值得了解,请随时将其添加到您的答案中。对于这个可能的问题,我很抱歉,但我仍在学习。
mysql - MYSQL 5.6.10 ANALYZE TABLE 锁定问题
我在生产 mysql db 上运行了分析表命令,却不知道它会阻止我选择表的内容。这导致生产站点宕机:(释放锁需要多长时间?另外,从备份中重新创建数据库会解决问题/摆脱锁吗?
请告诉我。
谢谢。
database - postgresql db 表锁定或行锁定多查询执行
我想了解 postgreSQL 是如何执行多查询的,例如我有一个数据库,其中有很多插入查询运行,例如每分钟 20-40 和很多选择查询,如每分钟 200-300(通过主键进行简单查询选择)。
这种类型的查询在同一张表上运行,我很好奇 postgreSQL 是如何处理这些的。是否就像当插入查询运行时表被锁定并且我们必须等待选择查询或者它是行锁定以便在插入查询正在进行时选择查询可以继续并忽略锁定的行?
在 mysql 数据库中,我猜有执行表锁定的 MyISAM 引擎和执行行锁定的 innoDB...
mysql - mySql innoDB 写查询被读查询锁定了很长时间
我有一个带有表的 mySql innoDB 数据库(带有自动增量主键)。我有许多进程在表上执行读取操作。我有其他(少数)进程需要在时间间隔(小于 30 秒)内写入同一个表。写入进程有时会遇到超时,因为他们发现表被读取操作锁定(超过 30 秒)。
有没有办法防止这种行为并允许写入进程写入,即使其他进程正在读取?
mysql - MySQL 5.6 - 即使使用 ALGORITHM=inplace 也会锁定表
我ALTER
在一个有 6000 万行的大表上的 MySQL 5.6 数据库上运行以下命令:
尽管同时指定了ALGORITHM=INPLACE
和LOCK=NONE
,但该表仍会被锁定并基本上关闭应用程序,直到迁移完成。
我通过检查命令In_use
输出中列的值来验证表确实被锁定。SHOW OPEN TABLES
它被设置为1
。
根据我在 MySQL 文档中收集的信息,此操作不应锁定表。而且,如果没有锁就无法继续执行,MySQL 应该会导致命令失败。我将数据库升级到 MySQL 5.7 看看它是否更好,但我在 5.7 上也面临同样的问题。
这是预期的行为吗?我如何找出这里出了什么问题?
oracle - 为什么我的语句因资源繁忙异常而失败?
作为 ETL 过程的一部分,我有这个交换子分区声明:
(每个运行不同的子分区但相同的 2 个表)。
我们开始得到一个异常:
ORA-00054: 资源繁忙并使用指定的 NOWAIT 获取或超时已过期。
这意味着某些进程会更新表,我们无法更改。
由于最终表 - QV_FACT_AMS 仅用于报告,而 STG_QV_FACT_AMS 是在 ETL 本身中创建的内部动态表,我不知道谁可以更新这些表。
ETL 不能与 ETL 本身的另一次运行发生冲突,因此不能尝试从这两个进程修改同一个表。
交换语句每天运行很多次并正常完成,异常仅在晚上 9 点左右引发。
所以我在这两张表上应用了 AUDIT ALL:
但是对表格的所有访问都不是在那个时间段内,只有 select 不应该锁定表格。
失败日志示例:
我们可以看到异常发生在 18-07-2019 21:29:28。
这是审计:
除了 etl 本身,唯一的访问是只有 action# = 3(选择),3 小时后......
mysql - MySQL 中的表锁定似乎无法处理并行请求?
我使用带有 IF 验证的 FOR UPDATE 锁定了表。但是,他们似乎无法处理并行请求?
我有两个存储过程示例。我使用 cURL 测试了这些以发出并行请求。
根据我的验证,我希望输出不超过 50。
日志输出:
在第二次通话中,他们似乎没有读取插入的值。
数据已插入。
我需要的是价格的总和 <= 50。但上面的输出显示为 60。