我的(MySQL)数据库正在经历间歇锁定超时。我还没有根本原因,我们也没有任何建议。回到过去,我必须重新索引我的Server和Oracle索引,因为他们需要它。从来没有人谈论过这个和MySQL。
有什么建议吗?
发布于 2010-08-03 06:51:06
您不应该需要重新索引MySQL,除非在崩溃或突然停电的情况下。如果您有锁定问题,您可能需要考虑将您的MyISAM表(或者至少是具有最大锁争用问题的表)转换为InnoDB。它需要更多的RAM,但它支持行级锁定,而不仅仅是表级锁定(还有许多其他改进)。
您还需要启动并运行“显示完整处理列表”;以确保它不是刻意地显式锁定表的东西,比如某种备份。
发布于 2010-08-03 07:02:37
如前所述,选择的存储引擎是影响MySQL性能的主要因素。如果使用MyISAM或InnoDB,这取决于您的工作负载。
如果在您的情况下选择是快速的,而且DB没有太多的写活动,那么MyISAM一点也不坏。但是,如果您甚至有适度的写活动和一些长时间运行的选择,请注意MyISAM只支持表级锁。在缓慢的选择过程中,所有的写活动都会排队,这很快就会导致各种棘手的问题。
InnoDB支持行级锁、事务和多版本控制,因此即使是严重混合的读/写操作也不会像MyISAM那样降低速度。
还要确保无论存储引擎在使用什么,它都是正确调整的。对于MyISAM,key_buffer_size和table_cache是最重要的调优值,对于InnoDB,首先要调整的是innodb_buffer_pool_size。
但是这两个存储引擎都有自己的缺点:例如,只有MyISAM支持全文索引,而InnoDB表空间不会缩小,因此在一个正在进行大量删除/更新/插入的活跃更新表中,您需要将其转储到表中,并不时地将它们吸回表中。
发布于 2011-01-10 14:31:32
锁定超时?在这方面,MySQL设计得很好,特别是在使用InnoDB引擎时。
索引不需要重新索引.但是,首先需要正确地将它们编入索引。
如果我们讨论的是实际锁,比如死锁/超时,那么您应该检查是否有任何可疑的LOCK TABLES命令。
https://serverfault.com/questions/166398
复制相似问题