mysql中的undo

5.6版本之前mysql的udno是放在ibdata中,在5.6后可以设置undo的参数来指定undo的存储

mysql> show variables like '%undo%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_undo_directory   | .     |
| innodb_undo_logs        | 128   |
| innodb_undo_tablespaces | 0     |
+-------------------------+-------+

innodb_undo_tablespaces这个参数控制着undo表空间的个数,范围是0到126
在大事务的情况下,单个的undo表空间文件可能会很大,放在多个表空间中会减少这个问题。默认的undo的大小是10m。
innodb_undo_logs这个参数控制着undo段的数量0~128.
在rr级别下,如果一个读取事务很久没有提交,那么后面使用的undo都不能被释放,导致回滚段很大。因为要使用快照读取。如果innodb_undo_tablespaces的值设置为0,那么undo的数据还是放在ibdata中的。

在mysql技术内幕innodb存储引擎一书中,描述了一致性读的实现,书中提到mysql对于delete的操作不是马上去删除,而是标记,用来进行一致性的读,过后会删除。这个不知道是否正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值