我厌倦了在慢查询日志中看到数据,所以我决定看看这到底是怎么回事。
UPDATE每秒运行多达数十次的查询有时真的很慢。这是查询:
UPDATE `user` SET
`last_active` = NOW(),
`last_ip` = '<ip>'
WHERE `name` = '<name>'
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
桌子:
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(16) NOT NULL,
`last_ip` varchar(50) NOT NULL DEFAULT 'none',
`last_active` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `last_active` (`last_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=34003;
Run Code Online (Sandbox Code Playgroud)
通常查询需要大约 0.2 毫秒,但每 5 分钟(准确地说是每 5 分钟,10:00:12、10:05:12、10:10:12...)需要超过 250 毫秒,所有时间都花在状态“查询结束”。
知道是什么原因造成的吗?为什么一个查询每 5 分钟就会运行缓慢?每 5 分钟发生什么会影响“查询结束”?没有其他进程正在运行。
MySQL 版本 5.5.44