MySQL,许多写入等待磁盘i / o访问
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL,许多写入等待磁盘i / o访问,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1872字,纯文字阅读大概需要3分钟。
内容图文
![MySQL,许多写入等待磁盘i / o访问](/upload/InfoBanner/zyjiaocheng/896/a26a9b679f6a4844ac42f5b9ad1dd365.jpg)
在以下情况下,我看到了MySQL DB的磁盘i / o问题:
>计算机上的24个CPU总数
> 22个线程同时写入单独的表
>每次写入都是使用INSERT INTO … VALUES …完成的,其中可以在一个insert语句中插入~5000行
>每行的输入VALUES都是整数,看起来像这样,例如:(13953,195,-149)
>表格是MyISAM
问题是,当所有22个线程都忙于编写大型批量插入操作时,MySQL报告它们都处于状态“关闭表”状态,这相当于将数据刷新到磁盘.
我的第一个分析发现,jdb2进程很可能导致瓶颈,因为MySQL数据目录位于/ partition下,当然日志已经开启.
我读到对于MySQL数据目录这没有必要,所以我重新分区磁盘,将MySQL数据目录移到新分区,关闭这个新分区的日志,然后重新启动系统.
这导致了一个改进,其中22个线程能够完成而没有i / o等待并且没有卡在关闭表上,但只有一段时间,当所有线程再次结束等待’关闭表’时.
例如,mysqladmin processlist具有输出(切割以节省空间),其中瓶颈非常明显:
processlist output
然后,当我检查哪个进程阻止磁盘i / o时,我发现它是:
[kworker / U65:3]
哪个是内核进程工作者.谷歌帮助我很少识别这是什么.
所以,我的问题:
>即使关闭日记功能,这个内核工作线程导致磁盘I / O瓶颈的是什么?
>如果我要将表类型切换到InnoDB,并将磁盘分区更改为raw(当然也关闭日志),这会使内核线程脱离图片吗?
>以及任何其他一般性建议,以消除这个瓶颈?
一些额外的信息,每瑞克詹姆斯的要求:
1)显示create table输出:
'CREATE TABLE `psd1` (
`psd_fk` int(10) unsigned NOT NULL,
`perbin_fk` mediumint(8) unsigned NOT NULL,
`power` smallint(6) NOT NULL,
KEY `psd_fk` (`psd_fk`),
KEY `perpow` (`perbin_fk`,`power`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs'
2)表不大于RAM,但有数千个表,每个表可能有数百个Mb.
3)RAM => 32GB.
4)行按第1列排序:这是一个外键(只是我自己的,不是正式的MySQL外键)到另一个表的主键.
谢谢…
解决方法:
>切换到InnoDB.注意建议here.
>由于Engine更改,在my.cnf中更改了一些内容.
>不要对磁盘做任何特别的事情.
InnoDB使用16KB块,而不是4KB,像MyISAM一样用于数据;索引为16KB对1KB.
如果你还有问题,…你的桌子上有哪些索引?这些行的顺序是什么?表格大于RAM吗?你有多少RAM?我们来看看SHOW CREATE TABLE.
内容总结
以上是互联网集市为您收集整理的MySQL,许多写入等待磁盘i / o访问全部内容,希望文章能够帮你解决MySQL,许多写入等待磁盘i / o访问所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。