MYISAMはデータファイルがFULLになると、データファイル拡張が起こるまで
待機し続けますが、InnoDBはデータファイルがFULLになるとnext statementの
データ追加処理をrolls backします。アプリケーション側でデータファイルがいっぱい
になった事を認識して全てのトランザクションをROLLBACKするようにした方がよい。
それ以前にデータファイルがいっぱいにならないように設定するのが一番良い。

autoextend がONに設定されていればデータファイルが自動拡張します。

DATA FILE
mysql> show variables like ‘innodb_data_file_path’;
+———————–+————————+
| Variable_name | Value |
+———————–+————————+
| innodb_data_file_path | ibdata1:10M:autoextend |
+———————–+————————+
1 row in set (0.00 sec)

LOG FILE
mysql> show variables like ‘innodb_log%’;
+—————————+———+
| Variable_name | Value |
+—————————+———+
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
+—————————+———+
4 rows in set (0.01 sec)

mysql>

ibdata

———————————————————————————-
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
                 ↓
innodb_data_home_dir = /usr/local/mysql/data/
innodb_data_file_path = ibdata1:10M;ibdata2:30M:autoextend
———————————————————————————-

[root@colinux ~]# /etc/init.d/mysql.server stop
Shutting down MySQL.. SUCCESS!
[root@colinux ~]# /etc/init.d/mysql.server start
Starting MySQL. SUCCESS!
[root@colinux ~]#

[root@colinux data]# tail colinux.err
090225 11:26:49 InnoDB: Data file /usr/local/mysql/data/ibdata2 did not exist:new to be created
090225 11:26:49 InnoDB: Setting file /usr/local/mysql/data/ibdata2 size to 30 MB

ibdata2

mysql> show variables like ‘innodb_data_file_path’;
+———————–+————————————+
| Variable_name | Value |
+———————–+————————————+
| innodb_data_file_path | ibdata1:10M;ibdata2:30M:autoextend |
+———————–+————————————+
1 row in set (0.01 sec)

mysql> show variables like ‘innodb_log%’;
+—————————+———+
| Variable_name | Value |
+—————————+———+
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
+—————————+———+
4 rows in set (0.01 sec)

mysql>

※ InnoDB トランザクション モデルとロック

InnoDB トランザクション モデル内のゴールは、マルチ バージョン データベースの
優れた性質を、従来の二相ロックと合体させる事です。
InnoDB は、行レベルでロックを行い、デフォルトではクエリを Oracle 式の非ロックの
一貫した読み取りとして実行します。
InnoDB のロック テーブルは領域効率の高い方法で格納される為、
ロック エスカレーションは不要です:一般には、複数のユーザがデータベースのあらゆる
レコードまたはレコードのランダムなサブセットをロックする事ができ、InnoDB でメモリ不足
が発生する事もありません。