8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
在MySQL 5.6.4,InnoDB 能避免设置事务ID相关的开销(TRX_ID field),被称为只读事务。
一个事务ID 是需要的 对于一个事务需要执行写操作或者SELECT … FOR UPDATE操作。
减少不必要的事务IDs 会降低内部数据库结构的大小。
目前, InnoDB 检测只读事务:
1,事务是以START TRANSACTION READ ONLY 语句开始,在这种情况下,
试图对数据库进行修改(对于InnoDB, MyISAM, or other types of tables) 会产生错误,事务处于只读模式:
ERROR 1792 (25006): Cannot execute statement in a READ ONLY transaction.
你仍旧可以在只读事务中对session级别的临时表进行改变操作,或执行locking query,
因为那些改变和lock 对其他事务是不可见的。
autocommit 设置是打开的, 这样事务是强制为一个单独的语句, 单独的语句组成事务是一个 非锁定的select 语句,
即, 一个SELECT 不使用FOR UPDATE 或者LOCK IN SHAED MODE 子句。