我将记录插入到存储引擎是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引擎会缓冲并合并这些插入操作吗?
答案 0 :(得分:0)
不确定是否可以建立任何此类直接关系,或者是否有人可以在不了解底层硬件或数据库如何安排自己的写入,甚至优化自己的I / O的情况下提出任何建议。各种各样的总线带宽,延迟,写入缓存以及十亿左右的其他因素都必须考虑在这样的问题中。
答案 1 :(得分:0)
有几点要记住,即使没有深入探讨MySQL的具体细节。
记录的插入在页面上完成。通常,每页有多行。因此,如果您在同一个事务中插入多行,则只有在填充页面时才需要写入一次。
然后,您遇到了日志和脏页的问题。即使使用单独的事务,也会记录更改。这允许数据库延迟写入页面。 。 。也许会发生另一次插入。
然后,你有索引的问题。索引也需要编写和记录。这通常会增加I / O.
我不知道您的I / O计数是否考虑了日志和索引。但是,我猜想你是在同一时间将多行插入到一个索引很少的表中。