问题标签 [table-lock]
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.
php - 并发请求中的 Laravel 数据库锁表
如果突然多个请求发送到我的数据库并同时更新,我想阻止我的数据库更新。
我以创建用户 Laravel 用户表为例,使用 JMeter 模拟有两个用户,并发请求更改同一行数据。
例如场景
我的银行账户有 1000 美元。同时,有两个请求从我的账户向 A 先生和 B 先生转账。
我的余额记录是 1000,请求 1 - 向 Mr.A 发送 $700,请求 2 - 向 Mr.B 发送 $700。如果我没有锁桌,系统会认为我有足够的余额来汇款。
我的目标是当涉及到并发请求时,第二个(FIFO,即使它是并发 Web 服务器仍然会处理它并将其中一个视为第二个)将抛出异常/或向表示正在使用的请求显示返回错误.
下面是我的测试代码,我使用 JMeter 来运行测试。但是,测试表明两个请求都已更新。因此,最新的请求将覆盖第一个请求。
下面,我预计 Laravel 会为数据库锁定抛出异常或错误,但它仍然会继续进行。
我做了另一个版本来手动捕获异常,但也不起作用
mysql - 由于触发器导致的表锁定问题
我是触发器的新手,当我使用触发器时,我在 TransactionDateTracking 表上遇到了一些锁定问题(在 TransactionDateTracking 中插入时出现重复的条目消息)。以下是表结构
CREATE TABLE TransactionDateTracking
(
Id
int(11) NOT NULL AUTO_INCREMENT,
TransactionTrackType
varchar(50) NOT NULL,
TransactionTrackDate
date NOT NULL,
LastRunDate
datetime DEFAULT NULL, PRIMARY KEY ( Id
), UNIQUE KEY TransactionTrackType_UNIQUE
( TransactionTrackType
) ) ENGINE=InnoDB AUTO_INCREMENT=645 DEFAULT CHARSET=latin1;
CREATE TABLE JournalJobLog
(
TransformationId
int(11) NOT NULL AUTO_INCREMENT,
TransformationName
varchar(255) NOT NULL,
LastUpdated
timestamp NULL DEFAULT NULL,
LastFailureDate
timestamp NULL DEFAULT NULL,
RevisionNumber
bigint(20) DEFAULT NULL, PRIMARY KEY ( TransformationName
), KEY IDX_JournalJobLog
( TransformationId
) ) ENGINE=InnoDB AUTO_INCREMENT=302默认字符集=utf8;
以下是我使用的两个触发器 - DROP TRIGGER IF EXISTS JournalJobLogInsert;
分隔符 $$
CREATE TRIGGER JournalJobLogInsert AFTER ON INSERT ON TransactionDateTracking
FOR EACH BEGIN INSERT INTO JournalJobLog SET TransformationName=NEW.TransactionTrackType, LastUpdated=NEW.TransactionTrackDate; 结束$$
分隔符;
==================================================== ==============
如果存在则删除触发器 JournalJobLogUpdate;
分隔符 $$
TransactionDateTracking
在每行开始更新后创建触发器 JournalJobLogUpdate
结束$$
分隔符;
问题是有时无法在 TransactionDateTracking 中插入任何条目,说明“重复条目”消息。当我放下触发器时,它工作正常。
mysql - (MySQL 5.7.19 AWS RDS)如何在不加锁的情况下更改表列字符集
我想将表字符集从“utf8”更改为“utf8mb4”
,但每列都有自己的字符集设置(utf8)
所以我需要将列字符集更改为“表默认”,但锁定是问题
帮助我更改列没有表锁定的字符集表中
有超过 100,000,000 行
mysql - 简单插入期间的innodb全表锁
我们的代码确实
这样的插入在多个服务器上并行运行并且具有高并发(有时甚至在 2 个并行),其中许多由于锁定等待超时而失败。显示 innodb 状态如下所示
我们在 mysql 8.0.13 上,innodb_autoinc_lock_mode 设置为引擎默认值(2 交错),这是最轻松的模式。我们在代码中没有使用 MySQL 级别的 LOCK TABLE,所以我们很困惑为什么 innodb 在 IX 模式下会锁定完整的用户表?表格如下所示
usertbl_user_id_account_id_idx 是必需的,因为很少有表在用户表中有外键,如下所示
sql-server - SQL Server - 2 秒插入和 5 分钟归档 - 如何避免表锁定?
我有一个每 2 秒执行一次的插入(20 列,15000 行,在 SQL Server [传感器数据] 之外),它在 200 毫秒内运行。我想在这个表中只保留 10 分钟的数据(总和 ~4.500.000 行),然后将最早的 5 分钟移动(存档)到另一个存档表(将存储 50 天,数十亿行)。归档的存储过程:
我想确保插件完美无缺地运行,并且尽可能快地运行,而不会锁定在这个归档过程中。归档开始时,插入的运行时间增加到 4-5 秒。我还将有一个 2 秒的实时查询 (Power BI) 来读取此表。
目前,我在两个表的 UTCLogDateTime 列上都有一个聚集索引。
这些所有进程都必须无缝运行,而不会相互锁定表。您对我如何实现这一目标有什么建议吗?
mysql - 用不同的别名锁定同一个表
我正在尝试锁定一组特定查询中涉及的所有表,但其中一个查询对其自身进行了自联接。我要如何锁定那个?
从表面上看,这似乎应该有效,但在我的测试中似乎没有?我的测试是拙劣的还是真的不起作用?还是有其他我不知道的事情发生?
sql - 临时表和表锁
我正在考虑为我们的一个应用程序使用临时表解决方案,并希望在写入新数据时读取历史数据。这会导致表锁吗?我有数百万行要查询/甚至可能插入/更新/删除。