mysql只读事务_mysql8 参考手册--优化InnoDB只读事务

InnoDB可以避免与为已知为只读的事务设置事务ID(TRX_ID字段)相关的开销。事务ID仅对于可能执行写操作或SELECT ... FOR UPDATE 锁定读取的事务(例如)需要 。消除不必要的事务ID可以减少每次查询或数据更改语句构造一个读取视图时都要查询的内部数据结构的大小。

InnoDB 在以下情况下检测到只读事务:

1、事务从START TRANSACTION READ ONLY语句开始 。在这种情况下,尝试对数据库(针对InnoDB, MyISAM或其他类型的表)进行更改会导致错误,并且事务将继续以只读状态运行:

ERROR 1792 (25006): Cannot execute statement in a READ ONLY transaction.

您仍然可以在只读事务中对特定于会话的临时表进行更改,或对其发出锁定查询,因为这些更改和锁定对于任何其他事务都不可见。

2、autocommit设置被打开,这样事务就保证是单个语句,而组成事务的单个语句是一个“非锁定”SELECT语句。也就是说,不使用FOR UPDATE或LOCK IN SHARED MODE子句的SELECT。

3、事务在没有该READ ONLY选项的情况下启动,但是尚未执行任何显式锁定行的更新或语句。在需要更新或显式锁之前,事务将保持只读模式。

因此,对于诸如报表生成器之类的读取密集型应用程序,您可以InnoDB 通过在START TRANSACTION READ ONLY和中 对它们进行分组来调整查询序列COMMIT,或者autocommit 在运行SELECT语句之前打开设置,或者简单地避免任何数据更改语句散布在查询中,从而优化查询 序列。。

有关信息 START TRANSACTION,并 autocommit请参见 13.3.1节,“START TRANSACTION,COMMIT和ROLLBACK语句”。

注意

符合自动提交,非锁定和只读(AC-NL-RO)资格的事务将保留在某些内部 InnoDB数据结构之外,因此不在SHOW ENGINE INNODB STATUS输出中列出 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值