您好,登錄后才能下訂單哦!
專題描述 | 研發團隊拋出問題如下: 折扣引擎在向數據庫插入數據時,90萬數據需要一個小時 | |||
分析過程 | 1 | 計算得出每秒插入行數只有250左右,遠低于正常性能范圍。 | ||
2 | 和開發人員溝通發現,插入數據庫的語句每次insert一行。 | |||
3 | 配合開發團隊人員,在壓測時查看數據庫,發現壓測期間MySQL數據庫完整占用一個數據庫核心(top命令顯示mysqld的cpu占用率在100%左右),瓶頸為單核cpu的運算能力。通過查看數據庫連接情況進一步確認,一個數據庫上,只有一個連接在插入數據。 | |||
解決方案 | 1 | insert語句修改為批量插入數據。使用insert into ... values (),(),...,();小批量提交事務。 | 優點 | 缺點 |
修改簡單 | 可能需要修改max_allowed_packet參數。 | |||
2 | 修改程序,使用合適的并發度,并發多線程插入數據。 (備注,方案1、2可以同時使用) | 效果預計非常明顯 | 應用程序需要較大的改造。 | |
問題原因 | 1 | 對MySQL數據庫的操作方式不夠優化。 | ||
知識點 | 1 | MySQL對一條SQL語句,只能利用一個cpu核心處理,可能成為瓶頸。 | ||
2 | insert into ... values (),(),...,();一次插入多行數據,可以減少網絡來回次數,以及數據庫事務數量,從而提高性能。 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。