最近新做的一個項目要發布,結果在最終測試時候出問題了。后台的MySQL一直CPU使用率居高不行,通過:
show processlist查看到一個SQL很異常,update XX set YY = KK where pK = ?;
這是一個簡單的SQL,可是為什么他可能會影響問題呢。
背景:
MySQL數據庫,MyIsam表,按照時間建立一級分區,按照天建立2級分區。
程序:Java后台程序,mysql的最新驅動,使用rewriteBatch屬性,批處理提交update語句。
解決:
通過對比,發現:
1、當沒有分區存在時候,1000條記錄的更新時間在100-300ms左右,這是可以接受的,注意(在沒有任何優化前提下)
2、加上分區,立刻5s以上。
因此,猜測就是分區所用的分區列沒有在sql中使用,即使使用了其他索引,也可能搜索所有分區,因此使用:
explain partitions SQL,發現確實是這種情況,於是問題解決。
網上一般的例子都是關於查詢的:
1、http://www.xiaohui.com/weekly/20070307.htm
2、http://www.xiaohui.com/dev/server/20070701-discuz-mysql-cpu-100-optimize.htm