0

ストレージ エンジンが myISAM であるテーブルにレコードを挿入します。mysql の挿入カウント ('Com_insert') は 1 秒あたり約 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' count) よりもはるかに少ないのはなぜですか?

mysql の挿入回数は、ディスクのマージ書き込みと実際の書き込みの合計回数とほぼ同じになるはずだと思いますが、正しいか間違っていますか?

前もって感謝します!

- - - - - - - - - - - - - - - - - - 更新しました - - - - - - - -----------------

一括挿入ではなく、レコードを 1 つずつ挿入します。

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

MySQL の詳細に飛び込まなくても、留意すべき点がいくつかあります。

レコードの挿入はページで行われます。通常、1 ページに複数の行があります。そのため、同じトランザクションで複数の行を挿入する場合、ページがいっぱいになったときにページを書き込む必要があるのは 1 回だけです。

次に、ログとダーティ ページの問題があります。個別のトランザクションであっても、変更はログに記録されます。これにより、データベースはページの書き込みを遅らせることができます。. . おそらく別の挿入が行われます。

次に、インデックスの問題があります。インデックスも作成してログに記録する必要があります。これにより、一般に I/O が増加します。

I/O のカウントがログとインデックスを考慮しているかどうかはわかりません。ただし、インデックスがほとんどないテーブルに同時に複数の行を挿入していると思います。

于 2013-02-26T15:07:28.707 に答える
0

そのような直接的な関係を築くことができるかどうか、または基盤となるハードウェアや、データベースが独自の書き込みをスケジュールする方法、または独自の I/O を最適化する方法について詳しく知らずに誰かがどちらかの方法を提案できるかどうかはわかりません。バスの帯域幅、レイテンシ、書き込みキャッシュなど、さまざまな要素を考慮して、このような質問をする必要があります。

于 2013-02-26T14:41:56.070 に答える