mysql整点抖动_MySQL 5.5 大量数据插入出现的抖动问题 及 解决方法
背景
日志型應(yīng)用的一個典型操作,是周期性地有大量的insert操作。這類操作需要對擴展表空間。
分析
在InnoDB里,擴展表空間的操作是在語句執(zhí)行過程中,由執(zhí)行線程直接調(diào)用的。
尤其是對于一些表每行比較大,則會出現(xiàn)每插入幾條記錄就需要擴展表空間。
雖然有insert buffer和write ahead logging策略保證在執(zhí)行線程中不直接操作表數(shù)據(jù)文件,但擴展表空間的操作會導(dǎo)致更新的tps出現(xiàn)瞬間低點。現(xiàn)象如下圖。實際上整體TPS也受此影響。
改進方案及可行性
可以在這類大操作之前預(yù)分配表空間來優(yōu)化這個問題。我們的業(yè)務(wù)上線之前都有容量預(yù)估,每天也有監(jiān)控。因此接下來一段時間表空間增長到多少,是能夠預(yù)估得到。
在實際更新開始之前,在低峰期甚至是提供服務(wù)之前就將表空間預(yù)分配好,能夠避免這種抖動和提高TPS。
工具驗證
InnoDB的表空間結(jié)構(gòu)上,空間頭部有4個byte的數(shù)字N表示這個表空間的大小(page數(shù)目),文件的實際大小是N*Page_SIZE.
實現(xiàn)了一個工具extend_space,修改4個byte并將文件append到指定的大小。測試發(fā)現(xiàn)insert性能提升10%。由這個原因引起的抖動消除。
后續(xù)
目前還只是用工具實現(xiàn)。工具使用起來比較麻煩,主要是更新過程中的鎖表操作就需要外部腳本,而且以后應(yīng)用的新版本中page_size可變,因此比較優(yōu)美的方案是將這個功能加入到MySQL支持的命令中。
補充更新
新增MySQL命令支持預(yù)擴展
效果如圖
總結(jié)
以上是生活随笔為你收集整理的mysql整点抖动_MySQL 5.5 大量数据插入出现的抖动问题 及 解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 增加mysql的sortbuffer_M
- 下一篇: matlab 连接mysql数据库_【转