php mysql,查询会被锁定并且永远不会返回

php mysql,查询会被锁定并且永远不会返回,php,mysql,Php,Mysql,我的系统创建了很多事务,因为它有很多用户和大量数据,这些数据每天都会被检查和更新 不知何故,在某个时刻,我不确定是否是备份导致了查询被锁定。不知怎的,他们再也没有回来。这是僵局吗? 数据库也没有向代码返回任何内容,因此我无法检查它是否已锁定。此外,这会导致其他查询停止并堆积起来,并且我的服务器连接耗尽 有什么想法吗 这可能是由几个问题引起的。最流行的是MyISAM表锁。只需运行以下任务:显示状态,如“Table%”;。把它贴在这里。如果Table_locks_waited很大,例如超过0.5%的

我的系统创建了很多事务,因为它有很多用户和大量数据,这些数据每天都会被检查和更新

不知何故,在某个时刻,我不确定是否是备份导致了查询被锁定。不知怎的,他们再也没有回来。这是僵局吗? 数据库也没有向代码返回任何内容,因此我无法检查它是否已锁定。此外,这会导致其他查询停止并堆积起来,并且我的服务器连接耗尽


有什么想法吗

这可能是由几个问题引起的。最流行的是MyISAM表锁。只需运行以下任务:显示状态,如“Table%”;。把它贴在这里。如果Table_locks_waited很大,例如超过0.5%的Table_locks_immediate,并且您正在使用MyISAM开关切换到InnoDB表引擎

若您的数据库不是很大,那个么更改引擎是非常快速和透明的

请注意,所有锁定的查询都是写查询。这是因为MyISAM具有长时间运行的锁定表的选择。此外,选择可能导致某种类型的死锁。引自:

MySQL按如下方式授予表写锁:

如果表上没有锁,请在其上放置写锁。 否则,将锁请求放入写锁队列。 MySQL按如下方式授予表读锁:

如果表上没有写锁,请在其上放置读锁。 否则,将锁请求放入读锁队列。 别忘了调整innodb_*params

如果你不想切换到InnoDB为什么?!,你可以在my.cnf中调到try 2

顺便说一句,我看到很多睡眠连接。你有持久的连接吗?如果是,您是否正确关闭它们