標籤:
批量【更新/插入】百萬以上資料時,每次2w條,超過10w條以後效率線性下降。參考本文設定效果不明顯,原因可能是因為索引的問題。 繼續查。不過此文品質不錯。
==============================
MySQL 從最開始的時候 1000條/分鐘的插入速度調高至 10000條/秒。 相信大家都已經等急了相關介紹,下面我做調優時候的整個過程。提高資料庫插入效能中心思想:
1、盡量使資料庫一次性寫入Data File
2、減少資料庫的checkpoint 操作
3、程式上盡量緩衝資料,進行批量式插入與提交
4、減少系統的IO衝突
根據以上四點內容,作為一個業餘DBA對MySQL服務進行了下面調整:
修改負責收錄記錄MySQL伺服器配置,提升MySQL整體寫速度;具體為下面三個資料庫變數值:innodb_autoextend_increment、innodb_log_buffer_size、innodb_log_file_size;此三個變數預設值分別為 5M、8M、8M,根據伺服器記憶體大小與具體使用方式,將此三隻分別修改為:128M、16M、128M。同時,也將原來2個 Log File 變更為 8 個Log File。此次修改主要滿足第一和第二點,如:增加innodb_autoextend_increment就是為了避免由於頻繁自動擴充Data File而導致 MySQL 的checkpoint 操作;
將大錶轉變為獨立表空並且進行分區,然後將不同分區下掛在多個不同硬碟陣列中。
完成了以上修改操作後;我看到下面幸福結果:
擷取測試結果:
Query OK, 2500000 rows affected (4 min 4.85 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
Query OK, 2500000 rows affected (4 min 58.89 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
Query OK, 2500000 rows affected (5 min 25.91 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
Query OK, 2500000 rows affected (5 min 22.32 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
最後表的資料量:
+------------+
| count(*) |
+------------+
| 10000000|
+------------+
從上面結果來看,資料量增加會對插入效能有一定影響。不過,整體速度還是非常面議。一天不到時間,就可以完成4億資料正常處理。預計資料庫瓶頸已經被巧妙解決,結果變成程式“猿”苦逼地向我埋怨,大哥不用這麼狠啊。
MySQL Innodb 插入速率最佳化