首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL锁定INNODB表

MySQL锁定INNODB表
EN

Server Fault用户
提问于 2011-10-19 13:13:19
回答 2查看 4.2K关注 0票数 0

我的环境是Windows 7,我正在使用XAMPP。

我在MySQL上做了一些性能测试,模拟一次添加100行。我使用的是一个简单的PHP查询和for循环。

但是,MySQL似乎已经锁定了,因为我不能再向表中添加任何内容了。

我登录MySQL查看流程列表,如下所示:

代码语言:javascript
运行
复制
mysql> SHOW PROCESSLIST \G;
*************************** 1. row ***************************
     Id: 1
   User: root
   Host: localhost:49349
     db: NULL
Command: Sleep
   Time: 2
  State:
   Info: NULL
*************************** 2. row ***************************
     Id: 17
   User: root
   Host: localhost:49759
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: SHOW PROCESSLIST
2 rows in set (0.00 sec)

我试了两件事:

A.杀死查询17,我得到了以下结果:

mysql> KILL QUERY 17; ERROR 1317 (70100): Query execution was interrupted

然后,我使用XAMPP控制器停止mysql,然后重新启动它,但这没有工作,因为表似乎只是永久锁定。

我也不能向数据库中的其他INNODB表添加数据。MyISAM表似乎没有问题。

我是否可以强制INNODB重新启动/重新启动或其他什么,即所有查询和连接?

提前谢谢。

编辑

原来,这是一个问题,最初是由我让PDO执行MySQL查询的方式引起的。我在创建MYSQL连接时设置了PDO::ATTR_AUTOCOMMIT = false (由于某些原因我无法更改),所以我必须专门运行$db_connection_handle->query('COMMIT;')来具体提交事务。所以看上去桌子都锁上了。

EN

回答 2

Server Fault用户

发布于 2011-10-19 13:30:06

  • 看看你的日志。您可能会发现ibdata文件已满,无法展开或未设置为自动展开。
  • 检查show innodb status,查找活动事务。示例:
代码语言:javascript
运行
复制
 ---TRANSACTION 0 16662058, ACTIVE 20 sec, process no 22014, OS thread id 140277380307216
 2 lock struct(s), heap size 368, 30 row lock(s), undo log entries 30
 MySQL thread id 3662, query id 46913632 localhost user
 Trx read view will not see trx with id >= 0 16662059, sees < 0 16662059
票数 0
EN

Server Fault用户

发布于 2023-04-17 09:46:41

MySQL使用锁定机制来管理对InnoDB表的并发访问。当对InnoDB表执行查询时,MySQL可能会对表或单个行设置一个锁,以防止其他查询同时修改相同的数据。如果MySQL正在锁定InnoDB表,则可能是由于以下原因之一:

长时间运行的事务:如果事务在一段较长的时间内持有表上的锁,其他需要访问同一表的查询可能会被阻止。要解决此问题,可以尝试通过减少查询数量或将其分解为较小的事务来优化事务。

死锁:当两个或多个事务正在等待对方释放相同资源上的锁时,就会发生死锁。在这种情况下,MySQL将检测死锁并选择其中一个事务作为受害者,将其回滚以释放锁。要解决此问题,可以尝试优化查询或事务,以减少出现死锁的可能性。

锁争用:如果多个查询同时试图访问同一资源,它们可能在争夺同一个锁。这可能导致某些查询被阻塞,并可能导致性能问题。要解决此问题,可以尝试优化查询,以减少所需的锁数量,或考虑使用不同的隔离级别。

若要标识锁定的原因,可以使用MySQL性能架构或InnoDB监视器监视系统,并标识导致锁定的查询或事务。一旦确定了根本原因,就可以采取步骤优化查询或事务,以减少将来发生锁定的可能性。MALKED.COM

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/322881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档