mysql插入计数与磁盘io写入计数的关系

时间:2013-02-26 14:36:30

标签: mysql insert io count

我将记录插入到存储引擎是myISAM的表中。 mysql插入计数('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的数量应该大约等于磁盘的合并写入和实际写入的总数,对或错?

提前致谢!

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

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

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引擎会缓冲并合并这些插入操作吗?

2 个答案:

答案 0 :(得分:0)

不确定是否可以建立任何此类直接关系,或者是否有人可以在不了解底层硬件或数据库如何安排自己的写入,甚至优化自己的I / O的情况下提出任何建议。各种各样的总线带宽,延迟,写入缓存以及十亿左右的其他因素都必须考虑在这样的问题中。

答案 1 :(得分:0)

有几点要记住,即使没有深入探讨MySQL的具体细节。

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

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

然后,你有索引的问题。索引也需要编写和记录。这通常会增加I / O.

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