日期:2014-05-16  浏览次数:20517 次

InnoDB Insert抖动问题及其改进

背景

日志型应用的一个典型操作,是周期性地有大量的insert操作。这类操作需要对扩展表空间。

?

?

分析

InnoDB里,扩展表空间的操作是在语句执行过程中,由执行线程直接调用的。

尤其是对于一些表每行比较大,则会出现每插入几条记录就需要扩展表空间。

虽然有insert bufferwrite ahead logging略保证在执行线程中不直接操作表数据文件,但扩展表空间的操作会导致更新的tps出现瞬间低点。现象如下图。实际上整体TPS也受此影响。

?

?

改进方案及可行性

?????? 可以在这类大操作之前预分配表空间来优化这个问题。我们的业务上线之前都有容量预估,每天也有监控。因此接下来一段时间表空间增长到多少,是能够预估得到。

?????? 在实际更新开始之前,在低峰期甚至是提供服务之前就将表空间预分配好,能够避免这种抖动和提高TPS

?

工具验证

?????? InnoDB的表空间结构上,空间头部有