※ DELAYED が指定されていると、サーバはレコードをバッファに挿入する。
INSERT DELAYED ステートメントを発行したクライアントは処理を続行することができる。
※ テーブルが使用されていると、サーバはレコードを保持。テーブルが解放されると、
サーバはレコードの挿入を開始し、そのテーブルに対する新しい読み取り要求がない事
   を定期的にチェックする。新しい読み取り要求があると、そのテーブルが再び解放される
まで、遅延されたレコードのキューの処理は中断される。

mysql> show variables like ‘delayed%’;
+————————+——-+
| Variable_name | Value |
+————————+——-+
| delayed_insert_limit | 100 |
| delayed_insert_timeout | 300 |
| delayed_queue_size | 1000 |
+————————+——-+
3 rows in set (0.01 sec)

キューを作った行は、テーブルに挿入されるまでメモリ内だけで保持されます。
これは、もしmysqld を強制的に終了させたり (例えば、kill -9 を利用して)、mysqld
が突然停止してしまったりすると、ディスクに書き込まれる前のキューを作った行は
全て失われてしまう という事を意味します。

INSERT DELAYED は MyISAM、MEMORY、 ARCHIVE テーブルのみ機能

——————————————————————————————-
INNODB
——————————————————————————————-
mysql> show table status like ‘TABLE007’\G
*************************** 1. row ***************************
Name: TABLE007
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 9
Avg_row_length: 1820
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 35651584
Auto_increment: 10
Create_time: 2009-02-25 11:23:38
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

mysql>
————————————- INNODBではエラーになる —————————–
mysql> insert delayed into TABLE007(comment) values (‘Insert deleyed’);
ERROR 1616 (HY000): DELAYED option not supported for table ‘TABLE007’

——————————————————————————————-
MYISAM
——————————————————————————————-

mysql> show table status like ‘MYSQLIMP’\G
*************************** 1. row ***************************
Name: MYSQLIMP
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 2
Avg_row_length: 24
Data_length: 48
Max_data_length: 281474976710655
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2009-02-14 08:31:05
Update_time: 2009-02-14 08:32:13
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

mysql>

insert_delayed

注: テーブルが使用中でない場合、INSERT DELAYED は通常の INSERT より遅くなります。

Comments are closed.

Post Navigation