相关疑难解决方法(0)

MySQL InnoDB page_cleaner 设置可能不是最佳的

在mysqld.log中看到这个注释:

[Note] InnoDB: page_cleaner: 1000ms intended loop took 15888ms. The settings might not be optimal. (flushed=200 and evicted=0, during the time.)
Run Code Online (Sandbox Code Playgroud)

这里似乎提到了这样的事情: MySQL 实例停滞“做 SYNC 索引”

我的问题是:当在日志中看到此注释时,应该采取什么措施(如果有)?

MySQL 和操作系统版本:
mysql-community-server- 5.7.9 -1.el7.x86_64
centos-release-7-1.1503.el7.centos.2.8.x86_64

运行SHOW VARIABLES LIKE 'innodb%'; 如建议所示:

innodb_page_cleaners | 1
Run Code Online (Sandbox Code Playgroud)

mysql innodb optimization logs configuration

20
推荐指数
2
解决办法
5万
查看次数

为什么 MySQL 要做串行同步 I/O?

在查看对 MyISAM 表执行多次需要很长时间的特别烦人的查询时,我注意到 MySQL 似乎暴露了一种相当奇怪的 I/O 模式:当执行单个查询并且必须执行一个重要的查询时I/O 量(例如,对于表扫描或当缓存为空时,echo 3 > /proc/sys/vm/drop_caches因此需要首先从磁盘加载索引),底层块设备的队列大小接近值 1,性能极差仅 4-5 MB/s:

root@mysql-test:~# iostat -xdm 5 /dev/sda
Linux 3.2.0-40-generic (mysql-test)  04/30/2014      _x86_64_        (4 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.14    24.82   18.26   88.79     0.75     4.61   102.56     2.83   26.39   19.29   27.85   2.46  26.31

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    69.29  151.52   72.73     5.31     0.59    53.95     1.21    5.39 …
Run Code Online (Sandbox Code Playgroud)

mysql myisam performance

8
推荐指数
1
解决办法
1011
查看次数

每 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

mysql profiler mysql-5.5

5
推荐指数
1
解决办法
4683
查看次数