[InterDB] [著者HP] [PREVIOUS][UP][NEXT]

Copyright @ 2009, Suzuki Hironobu @ InterDB




■2-10■ INSERT DELAYED文


INSERT DELAYED文がどのように実行されるか、具体的に説明します(【図.2-25】参照)。

図.2-25 INSERT DELAYED文の挙動

現在、スレッドBが(テーブルTに対し)SELECT文を実行中です。

ここでスレッドA1が(テーブルTに対し)INSERT DELAYED文を実行要求すると、INSERT DELAYED文実行用のスレッドが生成されます。このスレッドはINSERT文を保存するキュー(Delayed Queue)を持っており、ここではスレッドA1のINSERT DELAYED文が保存されます。

スレッドA1はINSERT文を別スレッドに任せてしまったので、別のSQL文が実行可能となります。

同様にスレッドA2とスレッドA3が(テーブルTに対し)INSERT DELAYED文の実行要求すると、それぞれのINSERT文がキュー(Delayed Queue)に保存されます。

さて、スレッドBのSELECT文が終了すると、キュー(Delayed Queue)に保存されたINSERT文が最大でdelayed_insert_limit個実行されます。
その後、もしもSELECT文の実行要求があればそのSELECT文を実行します。


このように、キュー(Delayed Queue)中のINSERT文をdelayed_insert_limit個処理する毎にSELECT文の実行要求があるか否か調べ(もしもあるならSELECT文を実行)、キューにINSERT文が無くなるまでこれを繰り返します。
なお、INSERT DELAYED文実行用のスレッドは、INSERT文の実行要求がdelayed_insert_timeout秒間なければ、KILLされます。


ここで`delayed_insert_limit'と`delayed_insert_timeout'はシステム変数です。



[PREVIOUS][UP][NEXT]