每 5 分钟卡在“查询结束”状态

Ale*_*lex 5 mysql profiler mysql-5.5

我厌倦了在慢查询日志中看到数据,所以我决定看看这到底是怎么回事。

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

Ric*_*mes 1

如果您放弃idname制作PRIMARY KEY.

UPDATE当前正在查找 2 个 BTree,并更新 2 个 BTree。PK 更改会将这些更改为 1 和 2。更重要的是,它会简单地进行行锁定。

桌子有多大?你有多少内存?innodb_buffer_pool_size 的值是多少?innodb_io_read_threads?什么鬼,让我们看看SHOW VARIABLES LIKE 'innodb%';