1

テーブルをロックせずに、常に MySQL MyISAM データベースに挿入するにはどうすればよいですか?

100,000 件のレコードをロードすると、他のプロセスがロックされているように見えます。

基本的に、テーブルに穴があっても、concurrent_inserts=2 の使用を強制することはできますか?

セッションに対して、concurrent_inserts を動的に設定できますか? http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.htmlを参照してください。

ノンロックインサートには他にどのような方法がありますか?
「挿入の遅延」は、挿入中のテーブルのロックを防ぎますか? http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.htmlを参照

4

4 に答える 4

4

小さなバッチで挿入を実行する場合、 INSERT DELAYED を使用すると、基本的にテーブルから選択するクライアントが最優先されるため、ブロックされません。一度に数千行を挿入すると、テーブルがしばらくロックされる可能性があります。挿入を高速化するのに役立つもう 1 つの方法は、一意のチェックをスキップするよう DB に一時的に指示することです。これにより、一意のキーの継続的な分析が防止されますが、テーブルのロックは防止されません。挿入するものが一意であることを確認する必要があります。

多くの挿入を行う場合、テーブルではなく行をロックするため、InnoDB の方が適していることがよくあります。挿入には時間がかかりますが、クライアントの同時実行パフォーマンスは向上します。

于 2012-07-23T14:57:03.027 に答える
0

IIRC MyISAM は、挿入が行われている間、テーブルをロックします。

非常に高速なロック速度を実現するために、MySQL は InnoDB、BDB、および NDBCLUSTER を除くすべてのストレージ エンジンに対して (ページ、行、または列のロックではなく) テーブル ロックを使用します。

から取得: http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

非ロック MyISAM 挿入を知っている場合は、私に知らせてください。これは私が毎日直面している問題です (InnoDB のスペース消費と速度が好きではありません)。

于 2012-07-23T14:57:11.357 に答える
0

MySQL は、MyISAM テーブルの同じテーブルへの並列挿入をサポートしています。

MyISAM

MySQL は MyISAM、MEMORY、および MERGE テーブルにテーブル レベルのロックを使用し、一度に 1 つのセッションのみがこれらのテーブルを更新できるようにするため、読み取り専用、ほとんど読み取り、またはシングル ユーザー アプリケーションにより適しています。

ただし、前述の MyISAM テーブルの動作は、同時書き込みを実現するために、 concurrent_insertシステム変数によって変更できます。要件に応じて、プロパティの値を1またはとして設定できます。2詳細はリンク参照。

したがって、実際のところ、MySQL は InnoDB および MyISAM ストレージ エンジンの同時挿入をサポートしています。

于 2015-09-03T18:34:57.460 に答える