mysql purge进程_InnoDB Purge 的工作原理?

当执行 SQL语句删除行时,InnoDB不会立即从数据库中物理删除。 仅当InnoDB 丢弃 为删除而编写的undo log 时,才会物理删除行及其索引记录(删除对应数据文件中的记录和索引)。

这种仅发生在不再需要多版本并发控制(MVCC)或回滚之后的删除操作,称为purge。

purge 操作用于清理历史的UNDO 日志页, UNDO 日志可以使事务回滚和保证一致性读(取决于事务隔离级别)。

(History list length)UNDO日志页面的数量通常很小,但是大量更新操作或长时间运行的事务(即使纯粹读取事务)也会导致(History list length)undo 日志的增加。长时间运行的只读事务也会导致(History list length)undo 页数量的增长,原因是在REPEATABLE READ和SERIALIZATION事务隔离级别中事务要求它们返回与读取快照相同的结果。因此,InnoDB的多版本并发控制(MVCC)需要保留旧数据的副本,直到所有依赖于它的事务(transactions)完成为止。这些都是通过UNDO日志完成的。

(History list length)的查看在后面。

两个例子:

在大型数据库中,在执行DML操作时,同时使用mysqldump 加 --single-transaction

使用autocommit = 0 时,执行SELECT而忘记进行显式的COMMIT或ROLLBACK,此时事务并没有结束

purge 操作在后台进行。在MySQL 5.6和更高版本中,这是使用一个或多个专用线程完成的。 (在MySQL 5.5中,您可以选择使用InnoDB主线程还是专用线程,在早期版本中始终使用InnoDB主线程。)配置的线程数(innodb_purge_threads)是允许的最大线程数,并且清除进程将根据需要自动调整线程数。

purge 进程基本上是一个循环,一直在寻找要清除的UNDO页面。并且以innodb_purge_batch_size 定义的大小(UNDO日志页数)的来清除。

innodb_purge_threads

Property

Value

Property

Value

Command-Line Format

--innodb-purge-threads=#

System Variable

innodb_purge_threads

Scope

Global

Dynamic

No

Type

Integer

Default Value

4

Minimum Value

1

Maximum Value

32

增加purge_threads 的数量,可以提升多表DML 的效率

innodb_purge_batch_size

Property

Value

Command-Line Format

--innodb-purge-batch-size=#

System Variable

innodb_purge_batch_size

Scope

Global

Dynamic

Yes

Type

Integer

Default Value

300

Minimum Value

1

Maximum Value

5000

在多线程清除配置中,每个purge 线程处理undo 页的数量:innodb_purge_batch_size/innodb_purge_threads

innodb_purge_batch_size 限定了 每执行128次迭代后清除undo log 后,undo log page的数量。

innodb_purge_batch_size 与innodb_purge_threads 一起设置用于性能优化。 大多数情况下使用innodb_purge_batch_size默认值就可以了。

innodb_max_purge_lag

当purge 滞后时间超过innodb_max_purge_lag 阈值时,将对INSERT,UPDATE 和 DELETE 操作施加延迟,以使purge 操作有时间赶上DML 操作。

默认值为0,表示没有最大 purge 滞后也有延迟。

通过 SHOW ENGINE INNODB STATUS,可以查看 History list length 的值

------------

TRANSACTIONS

------------

Trx id counter 4874778630

Purge done for trx's n:o < 4874778624 undo n:o < 0 state: running but idle

History list length 24

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值