max_binlog_stmt_cache_size パラメータの説明を見ると、次の文があります: トランザクション内の非トランザクション ステートメントがこのバイト数を超えるメモリを必要とする場合、サーバーはエラーを生成します。
それでは、非トランザクション ステートメントとは何ですか?
http://dev.mysql.com/ で nontransactional キーワードを検索すると、最初に出てくるのは「Rollback Failure for Nontransactional Tables」です。
では、非トランザクションテーブルとは何ですか?
非トランザクションテーブル、非トランザクションテーブル、トランザクションをサポートしないテーブル、つまり、MyISAM ストレージエンジンを使用するテーブル。
非トランザクション テーブルの特徴は、ロールバックをサポートしていないことです。以下の例を見ると
>create table no_trans(id int) ENGINE=MyiSAM; >start transaction; >insert into no_trans values(1); >select * from no_trans; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) >rollback; Query OK, 0 rows affected, 1 warning (0.00 sec) >show warnings; +---------+------+---------------------------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------------------------+ | Warning | 1196 | Some non-transactional changed tables couldn't be rolled back | +---------+------+---------------------------------------------------------------+ 1 row in set (0.00 sec) >select * from no_trans; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec)
、非トランザクション テーブルのロールバックは、非トランザクション テーブルがサポートしていないことを示す警告をスローすることがわかります。ロールバック。
非トランザクション テーブル オブジェクトと比較して、InnoDB を使用するテーブルなどのトランザクション テーブルはロールバック操作をサポートします。
>create table trans(id int); >start transaction; >insert into trans values(1); >select * from trans; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) >rollback; Query OK, 0 rows affected (0.00 sec) >select * from trans; Empty set (0.00 sec)
非トランザクション ステートメントとは、非トランザクション テーブルを操作するステートメントを意味すると結論付けることができます。
max_binlog_stmt_cache_size このパラメーターは、MyISAM などの非トランザクション テーブルに影響します。このパラメーターが十分でない場合は、より多くのスペースが必要であるというメッセージが表示されます。
max_binlog_cache_size このパラメータは、InnoDB などのトランザクション テーブルに影響します。このパラメータが十分でない場合は、より多くのスペースが必要であるというメッセージが表示されます。
上記は MySQL トランザクション テーブルと非トランザクション テーブルの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。