SQLSTATE[HY000]:一般错误:1205 INSERT 查询超出锁定等待超时

问题描述 投票:0回答:3

我的 laravel 作业经常出现 超出锁定等待超时错误

我无法追踪,INSERT语句怎么可能得不到LOCK

根据我的理解,将在新行中进行INSERT,因此不存在等待锁定

的问题

MySQL用作数据库

请建议如何处理,或者根本原因是什么?

日志:

{"message":"SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting 
transaction (SQL: insert into `jobs` (`queue`, `attempts`, `reserved_at`, `available_at`, 
`created_at`, `payload`) values (default, 0, , 1599989867, 1599989867, 
{\"displayName\":\"Modules\\\\RewardAnalyzer\\\\Jobs\\\\RewardEvents\\\\KhataFirstBusinessReward
Job\",\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"maxTries\":null,\"timeout\":nu
ll,\"timeoutAt\":null,\"data\":
{\"commandName\":\"Modules\\\\RewardAnalyzer\\\\Jobs\\\\RewardEvents\\\\KhataFirstBusinessReward
Job\",\"command\":\"O:68:\\\"Modules\\\\RewardAnalyzer\\\\Jobs\\\\RewardEvents\\\\KhataFirstBusi
nessRewardJob\\\":8:{s:7:\\\"\\u0000*\\u0000data\\\";a:4:
{s:7:\\\"user_id\\\";s:10:\\\"1000210290\\\";s:10:\\\"event_type\\\";s:20:\\\"KHATA_BUSINESS_ADD
ED\\\";s:10:\\\"user_count\\\";i:1;s:12:\\\"global_count\\\";i:890;}s:6:\\\"\\u0000*\\u0000job\\
";N;s:10:\\\"connection\\\";N;s:5:\\\"queue\\\";N;s:15:\\\"chainConnection\\\";N;s:10:\\\"chainQ
ueue\\\";N;s:5:\\\"delay\\\";N;s:7:\\\"chained\\\";a:0:
{}}\"},\"NewRelicID\":\"VgUGUlBTChADVVFQAAEEX1M=\",\"NewRelicTransaction\":\"PxQDUgNUCFcABlkDBVB
UV1UBFB8EBw8RVU4aVgtdAwJXVVtZUFNSAVUHB0NKQQ1QCF1WUlYFFTs=\"}))",
"context":{"exception":{"class":"Illuminate\\Database\\QueryException","message":"SQLSTATE[HY000]: 
General error: 1205 Lock wait timeout exceeded; try restarting transaction (SQL: insert into `jobs` (`queue`, `attempts`, `reserved_at`, `available_at`, `created_at`, `payload`) values (default, 0, , 1599989867, 1599989867, 
{\"displayName\":\"Modules\\\\RewardAnalyzer\\\\Jobs\\\\RewardEvents\\\\KhataFirstBusinessReward
Job\",\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"maxTries\":null,\"timeout\":nu
ll,\"timeoutAt\":null,\"data\":
{\"commandName\":\"Modules\\\\RewardAnalyzer\\\\Jobs\\\\RewardEvents\\\\KhataFirstBusinessReward
Job\",\"command\":\"O:68:\\\"Modules\\\\RewardAnalyzer\\\\Jobs\\\\RewardEvents\\\\KhataFirstBusi
nessRewardJob\\\":8:{s:7:\\\"\\u0000*\\u0000data\\\";a:4:
{s:7:\\\"user_id\\\";s:10:\\\"1000210290\\\";s:10:\\\"event_type\\\";s:20:\\\"KHATA_BUSINESS_ADD

ED\\\";s:10:\\\"user_count\\\";i:1;s:12:\\\"global_count\\\";i:890;}s:6:\\\"\\u0000*\\u0000job\\
\";N;s:10:\\\"connection\\\";N;s:5:\\\"queue\\\";N;s:15:\\\"chainConnection\\\";N;s:10:\\\"chain
Queue\\\";N;s:5:\\\"delay\\\";N;s:7:\\\"chained\\\";a:0:
{}}\"},\"NewRelicID\":\"VgUGUlBTChADVVFQAAEEX1M=\",\"NewRelicTransaction\":\"PxQDUgNUCFcABlkDBVB
UV1UBFB8EBw8RVU4aVgtdAwJXVVtZUFNSAVUHB0NKQQ1QCF1WUlYFFTs=\"}))","code":0,"file":"/var/www/api/ve
ndor/laravel/framework/src/Illuminate/Database/Connection.php:664","previous":
{"class":"PDOException","message":"SQLSTATE[HY000]: General error: 1205 Lock wait timeout 
exceeded; try restarting 
transaction","code":0,"file":"/var/www/api/vendor/laravel/framework/src/Illuminate/Database/Conn
ection.php:458"}}},"level":400,"level_name":"ERROR","channel":"production","datetime":
{"date":"2020-09-13 15:08:38.660818","timezone_type":3,"timezone":"Asia/Kolkata"},"extra":[]}


php mysql laravel locking
3个回答
2
投票

您正在使用交易;自动提交不会禁用事务,它只是使它们在语句末尾自动提交。

发生的情况是,某些线程在某些记录上持有记录锁的时间太长,并且您的线程正在超时。

如果您使用 MySQL,您可以在

中查看状态
SHOW ENGINE INNODB STATUS

或者

您应该强制解锁 MySQL 中锁定的表,但这很危险,我只在您需要快速修复时推荐它

如何做到这一点?

  1. 进入MySQL

    mysql -u your_user -p

  2. 查看锁定表列表

    mysql> show open tables where in_use>0;

  3. 查看当前进程列表,其中一个正在锁定您的表

    mysql> show processlist;

  4. 终止这些进程之一

    mysql> kill <put_process_id_here>;

您还可以在这里找到这个答案:获取“超过锁定等待超时;尝试重新启动交易”即使我没有使用交易


2
投票

我也面临同样的问题。我正在运行 PHP 代码,向数据库发出 SELECT 和 INSERT 请求。该错误仅在 INSERT 查询时抛出。

发生问题是因为我在同一台计算机上也有一个 MySQL Workbench 打开连接。虽然,我没有运行任何可能导致此错误的查询,但 Workbench 连接以某种方式锁定了表并导致 PHP 连接中的 INSERT 查询中出现此错误。

关闭 Workbench 数据库连接解决了问题。

但是,即使您不使用 Workbench,也可以运行

SHOW processlist;
命令,该命令将列出正在运行的 MySQL 进程。带有
Command=Sleep
的连接处于睡眠开放状态。尝试通过运行
KILL <process Id>;

来关闭这些连接

基本上,会话持有表锁,因此您需要找到并终止持有您正在使用的表锁的会话。


-1
投票

如何解决尝试更新产品时出现的此错误?

SQLSTATE[HY000]:一般错误:1205 超出锁定等待超时;尝试重新启动事务,查询为:INSERT INTO

catalog_product_entity_varchar
(
attribute_id
,
store_id
,
entity_id
,
value
) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE
attribute_id
= VALUES(
) attribute_id
),
store_id
= 值(
store_id
),
entity_id
= 值(
entity_id
),
value
= 值(
value
)

问候

© www.soinside.com 2019 - 2024. All rights reserved.