Mysql更新需要很长时间才能处于“结束”状态

时间:2014-02-04 15:46:15

标签: php mysql sql

我遇到此更新查询的问题。我不明白为什么“结束”状态需要这么长时间。

奇怪的是,只有在我没有更新表一段时间之后才会发生这种情况,但是在我这样做之后,更新查询非常快。

我不在乎一个更新查询是否需要很长时间才能完成,但是此查询会暂停服务器中的所有其他查询(select / insert / update ..),因此所有这些查询都必须等到此更新完成。

我通过其他讨论阅读了很多内容,但所有这些都是关于“查询结束”而不是“结束”状态。

这是我最近的查询耗时超过70秒:

UPDATE optimizer_disabled_domains 
SET dateChanged = NOW( ) ,
 bgProcessID =18,
 profile =  '1. Default',
 creativeIDs =  '',
 excludeCreativeIDs =  '',
 emailGroupIDs =  '1',
 emailDomains =  '',
 status =1 
WHERE id =237

分析统计信息:

 starting => 0.000053
 checking permissions => 0.000010
 Opening tables => 0.000029
 System lock => 0.000010
 init => 0.000042
 Updating => 0.000106
 end => 0.000009
 Waiting for query cache lock => 0.000007
 *** end => 69.276521 ***
 query end => 0.000203
 closing tables => 0.000098
 freeing items => 0.000082
 logging slow query => 0.000035
 logging slow query => 0.000063
 cleaning up => 0.000033

表格结构:

 CREATE TABLE IF NOT EXISTS `optimizer_disabled_domains` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `dateCreated` datetime NOT NULL,
   `dateChanged` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   `bgProcessID` int(11) NOT NULL,
   `profile` varchar(100) NOT NULL DEFAULT '',
   `creativeIDs` varchar(255) NOT NULL DEFAULT '',
   `excludeCreativeIDs` varchar(255) NOT NULL DEFAULT '',
   `emailGroupIDs` varchar(30) NOT NULL DEFAULT '',
   `emailDomains` varchar(1000) NOT NULL DEFAULT '',
   `status` tinyint(1) NOT NULL DEFAULT '1',
   PRIMARY KEY (`id`),
   KEY `status` (`status`,`bgProcessID`,`profile`,`creativeIDs`,`excludeCreativeIDs`,`emailDomains`(255),`emailGroupIDs`)
) ENGINE=InnoDB

1 个答案:

答案 0 :(得分:0)

可能是DNS问题。在mysql配置中添加此行并重新启动

skip-name-resolve

同时检查查询缓存,如果它太大,您可能会看到一个非常大的缓存的锁争用问题。Link

SHOW VARIABLES LIKE 'query_cache_size';