【发布时间】:2014-02-04 15:46:15
【问题描述】:
我在使用此更新查询时遇到了问题。我不明白为什么“结束”状态需要这么长时间。
奇怪的是,只有当我有一段时间没有更新表时才会发生这种情况,但在我更新之后,更新查询非常快。
我不在乎一个更新查询是否需要很长时间才能完成,但是此查询会暂停服务器中的所有其他查询(选择/插入/更新..),因此所有这些查询都必须等到该查询完成。
我通过其他讨论阅读了很多,但所有这些都是关于“查询结束”而不是“结束”状态。
这是我最新的查询,耗时超过 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
【问题讨论】: