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