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 중국어 홈페이지(www.php.cn)를 참고해주세요!