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
如果您放弃id
并name
制作PRIMARY KEY
.
您UPDATE
当前正在查找 2 个 BTree,并更新 2 个 BTree。PK 更改会将这些更改为 1 和 2。更重要的是,它会简单地进行行锁定。
桌子有多大?你有多少内存?innodb_buffer_pool_size 的值是多少?innodb_io_read_threads?什么鬼,让我们看看SHOW VARIABLES LIKE 'innodb%';
归档时间: |
|
查看次数: |
4683 次 |
最近记录: |