0

我将记录插入存储引擎为 myISAM 的表中。mysql insert count('Com_insert') 大约是每秒 8000 次,但是当我运行命令 'iostat -dkx 1' 时,结果是:

Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

sda             0.00  1322.00  0.00 16.00     0.00  5352.00   669.00     0.59   36.62   5.44   8.70

wrqm/s 和 w/s 之和约为 1400,远小于 8000('Com_insert' 计数),为什么?

我认为mysql插入的计数应该大约等于磁盘的合并写入和真实写入的总和,对还是错?

提前致谢!

- - - - - - - - - - - - - - - - - - 更新 - - - - - - - -----------------

我一一插入记录,而不是批量插入:

insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');
insert into test(c1,c2,c3,c4) values(1,1,1,'a');

...

表测试是 myISAM 表。myISAM 引擎会缓冲并合并这些插入操作吗?

4

2 回答 2

0

不确定您是否可以建立任何这样的直接关系,或者是否有人可以建议任何一种方式,而无需更多地了解底层硬件或数据库如何安排自己的写入,甚至优化自己的 I/O。有各种各样的总线带宽、延迟、写入缓存以及十亿左右的其他因素必须考虑到这样的问题中。

于 2013-02-26T14:41:56.070 回答
0

有几件事情要记住,即使没有深入了解 MySQL 的细节。

记录的插入是在页面上完成的。通常,每页有不止一行。因此,如果您在同一事务中插入多行,则该页面只需在已填充时写入一次。

然后,您遇到了日志和脏页的问题。即使使用单独的事务,也会记录更改。这允许数据库延迟写入页面。. . 也许会发生另一个插入。

然后,您遇到了索引问题。还需要编写和记录索引。这通常会增加 I/O。

我不知道您的 I/O 计数是否考虑了日志和索引。但是,我冒昧地猜测您正在将多行同时插入到一个索引很少的表中。

于 2013-02-26T15:07:28.707 回答