我的环境是Windows 7,我正在使用XAMPP。
我在MySQL上做了一些性能测试,模拟一次添加100行。我使用的是一个简单的PHP查询和for循环。
但是,MySQL似乎已经锁定了,因为我不能再向表中添加任何内容了。
我登录MySQL查看流程列表,如下所示:
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;')
来具体提交事务。所以看上去桌子都锁上了。
发布于 2011-10-19 13:30:06
show innodb status
,查找活动事务。示例: ---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
发布于 2023-04-17 09:46:41
MySQL使用锁定机制来管理对InnoDB表的并发访问。当对InnoDB表执行查询时,MySQL可能会对表或单个行设置一个锁,以防止其他查询同时修改相同的数据。如果MySQL正在锁定InnoDB表,则可能是由于以下原因之一:
长时间运行的事务:如果事务在一段较长的时间内持有表上的锁,其他需要访问同一表的查询可能会被阻止。要解决此问题,可以尝试通过减少查询数量或将其分解为较小的事务来优化事务。
死锁:当两个或多个事务正在等待对方释放相同资源上的锁时,就会发生死锁。在这种情况下,MySQL将检测死锁并选择其中一个事务作为受害者,将其回滚以释放锁。要解决此问题,可以尝试优化查询或事务,以减少出现死锁的可能性。
锁争用:如果多个查询同时试图访问同一资源,它们可能在争夺同一个锁。这可能导致某些查询被阻塞,并可能导致性能问题。要解决此问题,可以尝试优化查询,以减少所需的锁数量,或考虑使用不同的隔离级别。
若要标识锁定的原因,可以使用MySQL性能架构或InnoDB监视器监视系统,并标识导致锁定的查询或事务。一旦确定了根本原因,就可以采取步骤优化查询或事务,以减少将来发生锁定的可能性。MALKED.COM
https://serverfault.com/questions/322881
复制相似问题