我有我的服务器应用程序的一些问题,它有时会导致一些表locking自己,然后我有成千上万的查询等待表被解锁。 但是这不会发生。 有没有什么办法来检查什么查询可能会导致锁?
我觉得show processlist; 是开始debugging这个问题的最好方法。 show processlist显示哪些线程正在运行以及它们的状态。
您也可以使用Explain命令,特别是在最常见的查询中。 这将显示你想要的查询的执行计划。 有些查询可能没有索引,或者没有正确使用它们。
另一方面,您可能正在使用MyISAM存储引擎。 如果您不需要全文search(或其他MyISAM特定function),我build议您迁移到InnoDB,InnoDB提供基于行的锁,而不是locking整个表以及其他function,这可能会提高性能你的MySQL。 这是MyISAM和InnoDB之间的一个很好的比较 。
可能的话,你也需要调整一些你的MySQLvariables。 我build议你调整key_buffer_size ,这是用于索引块的缓冲区的大小。 调整至less30%的内存或重新索引过程可能会太慢。
最后但并非最不重要的是,启用慢查询日志 。 这将显示哪些查询需要花费太多的时间来运行。
希望这可以帮助!