INSERT DELAYED
提供:MySQL Practice Wiki
MyISAM、ARCHIVE、MEMORYテーブルへのINSERTステートメントに対してDELAYEDオプションをつけると、INSERTの処理がバックグラウンドで(遅れて)処理される。バックグラウンドの処理はそれぞれテーブルごとに専用に作成されるスレッド上で行われる。MySQLはスレッドに処理を渡すと即座にクライアントに対して応答を返し、クライアントは次の処理にとりかかることが可能となる。
INSERT DELAYEDに対しては、my.cnfにおいて以下のオプションによりチューニングが可能である。
--delayed-insert-limit
MySQLはdelayed-insert-limitで指定される行数をINSERTすると、待機中のSELECTステートメントがないかどうかをチェックする。もしあればINSERTされるべき行が存在してもその処理は後回しにされ、先にSELECTステートメントが実行される。大きな値にするほどINSERT DELAYEDの性能は向上するが、テーブルからの読み込み性能が低下してしまう可能性がある。
--delayed-queue-size
INSERT DELAYEDにおいてテーブルあたりにキューイングできる行数。キューイングしている間はどこにも書き込みが行われないので、MySQLサーバーがクラッシュするとデータが失われてしまう。データの消失量を抑えたい場合はあまり大きくし過ぎないように注意しよう。
--delayed-insert-timeout
INSERT DELAYEDにおいて生成されたスレッドが、処理を終えてから消失するまでの時間。消失するまでに新たにINSERT DELAYEDにより行がキューイングされればスレッドは消失せず、キューイングされた行を処理する。スレッドの生成はそれなりに時間が掛かる処理であるので、スレッド数やメモリ(スタック用)などに余裕があれば、スレッドを生かしておくことで処理の高速化が図れる。